MySolution.it

MySolutions è un un quotidiano on-line riguarda il mondo dell’imprenditoria analizzato dal lato fiscale. I membri della redazione di MySolution , che sono tutti esperti di fiscalità ciascuno secondo la sua specializzazione, analizzano e pubblicano quotidianamente centinaia di articoli, documenti e libri riguardanti la fiscalità.

Avevamo pubblicato dei dettagli sulla teconologia con cui il sistema di ricerca fosse stato riscritto, ma  abbiamo preferito in seguito ritirare le informazioni precedentemente diffuse.

Questa pagine resta per mantenere efficiente la SEO di questo sito.

Vi consigliamo di leggere quancuno dei nuovi articoli che abbiamo pubblicato:

Vendiamolibri.it

Il marchio vendiamo libri rappresenta un network di siti di vendita libri e-commerce. In questo network vengono proposti alla vendita i libri specifici di ogni settore rappresentato dal sito come per esempio i libri scolastici, i libri universitari, i libri italiani in vendita all’estero più un sito generalista dove ogni testo può essere ritrovato.


Il catalogo completo è rappresentato da circa tre milioni di items che vengono desunti da diverse Fonti ciascuna di esse di diverso formato e con diversi tempi di aggiornamento.

Tali items vengono distribuiti al network tramite la selezione del catalogo completo degli elementi interessati e l’inserimento in appositi database dove gli e-commerce possono effettuare le loro interrogazioni con maggiore precisione e velocità.

STACK

Ci è stato assegnato Woocommerce come motore di e-commerce. Abbiamo scelto di lavorare con un database esterno non SQL per quel che riguarda il rifornimento dei dati ai siti mentre il database unico dove convergono tutti i dati sui libri a disposizione per la vendita è un database MySql.

La piattaforma su cui tutto il processo di sincronizzazione funziona è Linux ubuntu 22.4, le varie procedure sono scritte in Php o python ed eseguite da cron.

IL COLLETTORE

Esiste una terza parte da noi sviluppata che fornisce al network dei siti tutta una serie di servizi comuni, a partire dalla funzione di identity provider per tutti gli elementi del network, alla gestione centralizzata dei programmi di fidelizzazione e gamification, al centralizzazione dei processi di acquisto dei libri e dell’integrazione con il magazzino dello spedizioniere.

Come implementare la ricerca full-text in un progetto Laravel

Al giorno d’oggi, l’implementazione della ricerca full-text è una delle parti più importanti dello sviluppo di applicazioni. Nelle applicazioni che fanno molto affidamento sulla funzionalità di ricerca, come servizi musicali o negozi online, la configurazione e la personalizzazione della classificazione delle risposte è vitale. Per capire meglio perché è necessario implementare una soluzione del genere, consideriamo i problemi in sua assenza. Il framework PHP Laravel, nella sua magnifica completezza offre per la ricerca uno strumento eccezionale.

Miglioramento della funzionalità di ricerca

Spesso gli sviluppatori hanno il compito di migliorare la ricerca in un’applicazione e, in molti casi, viene dedicato molto tempo a mettere insieme una serie chiara di perfezionamenti per il progetto.

Le attività comuni per migliorare la ricerca potrebbero includere quanto segue:

  • Accelerare le prestazioni di ricerca
  • Aggiungere tolleranza agli errori
  • Aggiungere la possibilità di cercare oltre il nome dell’articolo
  • Aggiungere la possibilità di cercare per parole non necessariamente nello stesso ordine
  • Aggiungere la possibilità di cercare altre forme di parole da una query
  • Aggiungere la possibilità di gestire regole di ricerca per la stessa parola con valori diversi

Criteri di valutazione

I criteri principali per valutare le prestazioni della ricerca possono essere definiti come velocità di risposta, completezza e accuratezza. Mentre i tassi di risposta possono essere facilmente misurati e valutati, gli altri due sono un po’ più difficili da calcolare.

La completezza della ricerca è il risultato della divisione del numero di elementi restituiti per il numero di elementi corrispondenti. Quando si risolve un problema del primo tipo, con l’esclusione degli articoli corrispondenti, spesso viene risolto anche il problema di una query errata con un errore o un errore di battitura.

La precisione della ricerca è il risultato della divisione del numero di elementi corrispondenti nella risposta per il numero di elementi nella risposta. Quegli elementi che sono stati inclusi nella risposta, ma che non avrebbero dovuto figurare, sono chiamati errori del secondo tipo.

Di conseguenza, abbiamo bisogno della risposta più rapida, con le più alte percentuali di completezza e accuratezza della ricerca. L’equilibrio tra questi elementi è unico per ogni progetto. Proviamo a considerare le possibili soluzioni a questo problema senza implementare la ricerca full-text.

Tentativo di soluzione tramite SQL LIKE

La soluzione più semplice potrebbe essere l’uso di LIKE in SQL.Tuttavia, questa non è la soluzione ottimale e se i record nella tabella dei post sono più di 1000, anche considerando che gli indici siano correttamente impostati, le query verranno comunque elaborate sull’orlo del timeout.

Inoltre, questo tipo di query è appropriato esclusivamente per affrontare un compito specifico, in cui tutti i campi vengono utilizzati nella ricerca. Tuttavia, altri compiti, in particolare riorganizzare l’ordine delle parole all’interno della query, dare priorità agli elementi e migliorare la velocità di ricerca della query, rimangono in gran parte irrisolti.

Ricerca full-text in PostgreSQL/MySQL

La seconda soluzione con il set di strumenti esistente nell’applicazione può consistere nell’utilizzare le funzionalità di ricerca full-text di PostgreSQL e MySQL. In questo caso, la query avrà la seguente forma: SELECT … MATCH (campo) CONTRO (‘parola’).

La decisione di utilizzare SQL ci garantisce il 100% di precisione e completezza della ricerca, ma presenta anche numerosi svantaggi. Tra questi ci sono la necessità di una costante personalizzazione del database e le limitazioni sulla tipologia dei campi e la mancanza di classificazione, nonché il costo finale di tale soluzione in termini di risorse macchina che producono oltretutto un’insostenibile lentezza nell’esecuzione della query.

Laravel Scout

Per risolvere tutti i problemi descritti sino ad ora esistono servizi di terze parti che producono rapidamente ricerche full-text e risolvono problemi con la tokenizzazione e l’analisi morfologica. Laravel Scout ti consente di lavorare con molti di questi servizi e fornisce un’interfaccia unificata per lavorare con la ricerca, oltre a collegare la ricerca di entità con i modelli Laravel.

Di seguito è riportato un elenco di servizi che funzionano con la ricerca full-text di Laravel Scout

 

Il principio di lavorare con il full-text in Laravel non differisce molto a seconda del driver. Facendo riferimento ad Algolia, Laravel Scout semplifica l’aggiunta di dati all’indice Algolia e rende altrettanto facile recuperarli effettuando la ricerca in molti campi. Naturalmente, quando si sceglie un fornitore, il progetto acquisirà una dipendenza che deve essere tenuta presente. Laravel Scout contribuirà a ridurre la dipendenza, grazie alle sue interfacce.

Ottimizzazione delle Prestazioni in Flutter: 6 Trucchi per un’App Più Veloce

Nell’era digitale odierna, le applicazioni mobili hanno rivoluzionato il modo in cui viviamo la nostra vita. Dal ordinare cibo al prenotare un taxi, dalla gestione delle finanze all’accesso alle cure sanitarie – c’è un’app per quasi tutto. Man mano che sempre più imprese e imprenditori si rendono conto del potenziale delle applicazioni mobili, cresce l’interesse nello sviluppo di un Prodotto Minimo Viabile (MVP). Un MVP è una versione semplificata di un’applicazione sviluppata con abbastanza funzionalità per soddisfare gli early adopters e fornire feedback per lo sviluppo futuro del prodotto.

Flutter di Google è emerso come un framework popolare per lo sviluppo di MVP. Flutter è un kit di sviluppo software UI open-source che permette agli sviluppatori di costruire applicazioni compilate in modo nativo per mobile, web e desktop da un unico codice sorgente. Ma come si garantisce il successo nello sviluppo di un MVP utilizzando Flutter? Come agenzia leader specializzata nello sviluppo di app Flutter, abbiamo visto quali sono le migliori pratiche di sviluppo app con Flutter.

Queste pratiche oltre ad aumentare l’efficienza della tua app sono consigliate per l’ottimizzazione del codice in ottica di aderenza agli standard della Green Software Foundation.

1) Esegui in modalità profilo su un dispositivo reale
2) Utilizza il performance overlay e altri strumenti
3) Minimizza le operazioni costose
4) Utilizza il lazy loading e la paginazione
5) Usa il tree shaking per il tuo codice
6) Usa il caricamento differito per il tuo codice


1 Esegui in modalità profilo su un dispositivo reale

Il primo trucco per l’ottimizzazione delle prestazioni in Flutter è eseguire la tua app in modalità profilo su un dispositivo reale. La modalità profilo è una modalità speciale che esegue la tua app con ottimizzazioni simili alla modalità di rilascio, ma consente anche alcune strumenti di misurazione delle prestazioni. La modalità profilo ti aiuta a identificare potenziali problemi di prestazione e a misurare l’impatto delle tue ottimizzazioni.

Per eseguire la tua app in modalità profilo, utilizza il comando flutter run –profile o seleziona l’opzione profilo nel tuo IDE. Puoi anche utilizzare il comando flutter build –profile per creare una compilazione profilo per la tua app.

Eseguire la tua app su un dispositivo reale è importante perché i simulatori e gli emulatori non utilizzano lo stesso hardware dei dispositivi reali, il che porta a differenze nelle loro prestazioni. Rispetto ai dispositivi reali, alcune operazioni del simulatore sono più veloci, mentre altre sono più lente. Inoltre, la modalità di debug attiva controlli aggiuntivi (come gli assert) che non vengono eseguiti nelle compilazioni di profilo o rilascio, e questi controlli possono essere onerosi.

Dovresti considerare di controllare le prestazioni sul dispositivo più lento che i tuoi utenti potrebbero ragionevolmente utilizzare. In questo modo, puoi garantire che la tua app funzioni senza problemi su tutti i dispositivi.

2 Utilizza il performance overlay e altri strumenti

Il secondo trucco per l’ottimizzazione delle prestazioni in Flutter è utilizzare la sovrapposizione delle prestazioni (performance overlay) e altri strumenti per diagnosticare problemi di prestazione. La sovrapposizione delle prestazioni è un widget che mostra due grafici sopra l’interfaccia utente della tua app. I grafici mostrano quanto tempo ogni frame impiega per essere renderizzato sul thread dell’interfaccia utente (grafico superiore) e sul thread raster (grafico inferiore). Il thread raster era precedentemente noto come thread GPU.

Per attivare la sovrapposizione delle prestazioni, utilizza il comando flutter run –profile –show-performance-overlay o premi P mentre esegui la tua app in modalità profilo. Puoi anche attivarlo programmaticamente utilizzando il widget PerformanceOverlay o dalla riga di comando usando il parametro showPerformanceOverlay.

La sovrapposizione delle prestazioni ti aiuta a identificare frame scattosi mostrando picchi nei grafici. Idealmente, ogni frame dovrebbe impiegare meno di 16 ms per essere renderizzato per una prestazione di 60 fps. Se un frame impiega più di 16 ms, significa che non ha rispettato la scadenza e ha causato uno scatto.

3 Minimizza le operazioni costose

Il terzo Hack per l’ottimizzazione delle prestazioni di Flutter consiste nel ridurre al minimo le operazioni costose nel codice. Le operazioni costose sono quelle che consumano molte risorse, come CPU, memoria o rete. Alcuni esempi di operazioni costose sono:

Layout e rendering: layout e rendering sono i processi di calcolo delle dimensioni e della posizione di ciascun widget sullo schermo e di disegno sul display. Il layout e il rendering possono essere costosi se disponi di widget complessi o nidificati, widget grandi o dinamici o widget che cambiano frequentemente. Per ottimizzare il layout e il rendering, dovresti utilizzare widget semplici e piatti, evitare ricostruzioni non necessarie, memorizzare nella cache o riutilizzare i widget ed evitare livelli fuori schermo.

Animazione: l’animazione è il processo di modifica dell’aspetto o della posizione di un widget nel tempo. L’animazione può essere costosa se le animazioni sono troppe o troppo complesse oppure se si utilizzano tecniche di animazione non ottimizzate. Per ottimizzare l’animazione, dovresti utilizzare widget di animazione integrati, evitare di animare widget grandi o costosi, utilizzare l’opacità e il ritaglio con parsimonia e utilizzare il pattern TransitionBuilder per evitare di ricostruire i discendenti.

Caricamento delle immagini: il caricamento delle immagini è il processo di recupero e decodifica dei file di immagine dalla rete o dalla memoria del dispositivo. Il caricamento delle immagini può essere costoso se hai troppe immagini o troppo grandi o se non le memorizzi nella cache o non le ridimensioni correttamente. Per ottimizzare il caricamento delle immagini, è necessario utilizzare formati di immagine compressi, memorizzare nella cache le immagini in memoria o su disco, ridimensionare le immagini per adattarle alle dimensioni del display e utilizzare segnaposto o precaching per migliorare le prestazioni percepite.

Operazioni intrinseche: le operazioni intrinseche sono quelle che dipendono dalla dimensione intrinseca di un widget, come la sua larghezza o altezza naturale. Le operazioni intrinseche possono essere costose perché richiedono un passaggio di layout aggiuntivo per calcolare la dimensione del widget prima di renderizzarlo. Alcuni esempi di operazioni intrinseche utilizzano widget IntrinsicWidth o IntrinsicHeight, utilizzando widget Riga o Colonna con MainAxisSize.min o utilizzando widget di testo con softWrap: true. Per ottimizzare le operazioni intrinseche, dovresti evitarle quando possibile, utilizzare dimensioni fisse anziché dimensioni intrinseche o utilizzare widget alternativi che non richiedono operazioni intrinseche.

4 Utilizza il lazy loading e la paginazione

Il quarto Hack per l’ottimizzazione delle prestazioni di Flutter consiste nell’utilizzare il caricamento lento e l’impaginazione per i tuoi dati. Il caricamento lento è una tecnica che carica i dati solo quando è necessario, invece di caricarli tutti in una volta. La paginazione è una tecnica che divide i dati in blocchi o pagine più piccoli e li carica uno per uno mentre l’utente scorre.

Il caricamento lento e l’impaginazione possono migliorare le prestazioni della tua app riducendo la quantità di dati che devono essere recuperati dalla rete o dall’archiviazione del dispositivo, riducendo l’utilizzo della memoria dell’app e la complessità dell’interfaccia utente della tua app.

Per implementare il caricamento lento e l’impaginazione in Flutter, puoi utilizzare vari widget e plugin, come:

ListView: un widget che visualizza un elenco scorrevole di elementi. È possibile utilizzare ListView con il costruttore del builder per creare elementi pigramente mentre vengono fatti scorrere per essere visualizzati. È inoltre possibile utilizzare ListView con la proprietà controller per ascoltare gli eventi di scorrimento e caricare più dati quando l’utente raggiunge la fine dell’elenco.

GridView: un widget che visualizza una griglia scorrevole di elementi. È possibile utilizzare GridView con le stesse tecniche di ListView per creare elementi in modo pigro e caricare più dati durante lo scorrimento.

PaginatedDataTable: un widget che visualizza una tabella di dati con controlli di impaginazione. Puoi utilizzare PaginatedDataTable con una proprietà di origine personalizzata per recuperare i dati da un’origine remota o locale nelle pagine.

Paginazione a scorrimento infinito: un plugin che fornisce un widget e un controller per implementare l’impaginazione a scorrimento infinito con ListView o GridView. È possibile utilizzare la paginazione a scorrimento infinito con una proprietà pagingController personalizzata per recuperare i dati da un’origine remota o locale nelle pagine.

5. Usa il tree shaking per il tuo codice

Il quinto Hack per l’ottimizzazione delle prestazioni di Flutter consiste nell’utilizzare il tree shaking per il codice. Il il tree shaking è una tecnica che rimuove il codice inutilizzato dal file binario della tua app, riducendone le dimensioni e migliorandone il tempo di avvio.

Il il tree shaking funziona analizzando il codice e determinando quali parti sono raggiungibili e quali no. Solo le parti raggiungibili vengono incluse nell’output finale, mentre le parti irraggiungibili vengono scartate. In questo modo puoi evitare di inviare codice non necessario che non verrà mai eseguito.

Il il tree shaking può essere utile quando nella tua app sono presenti funzionalità di grandi dimensioni o opzionali che non sono necessarie a tutti gli utenti. Ad esempio, puoi utilizzare Il il tree shaking per:

Localizzazione: puoi rimuovere i file di lingua non rilevanti per le impostazioni locali dell’utente, invece di includere tutte le lingue supportate.

Temi: puoi rimuovere i file dei temi che non sono rilevanti per le preferenze dell’utente, invece di includere tutti i temi disponibili.

Funzionalità: puoi rimuovere i moduli di funzionalità che non sono rilevanti per l’azione dell’utente, invece di includere tutte le funzionalità possibili.

Per abilitare il tree shaking in Flutter, non devi fare nulla di speciale. Flutter esegue automaticamente il tree shaking durante la creazione dell’app in modalità di rilascio.

Scopri di più sul tree shaking in Flutter qui.

6 Usa il caricamento differito per il tuo codice

Il sesto Hack per l’ottimizzazione delle prestazioni di Flutter consiste nell’utilizzare il caricamento differito per il codice. Il caricamento differito (deferred loading) è una tecnica che consente di caricare parti del codice su richiesta, invece di caricarle tutte in una volta. Ciò può ridurre le dimensioni del download iniziale e l’utilizzo della memoria dell’app e migliorarne il tempo di avvio.

Per utilizzare il caricamento differito in Flutter, devi utilizzare la parola chiave deferred dopo l’istruzione import e specificare un alias per la libreria importata. Quindi, devi chiamare il metodo loadLibrary() sull’alias per caricare la libreria quando ne hai bisogno.

Il caricamento differito può essere utile quando nella tua app sono presenti funzionalità di grandi dimensioni o facoltative che non sono necessarie all’avvio o a tutti gli utenti. Ad esempio, puoi utilizzare il caricamento differito per:

Localizzazione: puoi caricare solo i file di lingua rilevanti per le impostazioni locali dell’utente, invece di caricare tutte le lingue supportate.

Temi: puoi caricare solo i file dei temi rilevanti per le preferenze dell’utente, invece di caricare tutti i temi disponibili.

Funzionalità: puoi caricare solo i moduli di funzionalità rilevanti per l’azione dell’utente, invece di caricare tutte le funzionalità possibili.

Efficienza Energetica del Data Center

Abbiamo scelto di ospitare le nostre applicazioni su un datacenter che potesse fornire progressi significativi e misurabili rispetto agli obiettivi di sostenibilità in modo da avere un impatto positivo sui nostri clienti, partner, investitori e dipendenti.

Possiamo offrire soluzioni di hosting managed su datacenter che garantisca:

1) Sistemi di controllo adattativi
2) Linee guida termiche ASHRAE
3) Contenimento del corridoio freddo/caldo
4) Sistemi di illuminazione ad alta efficienza energetica
5) Celle a combustibile
6) Punti di settaggio dell’acqua refrigerata ad alta temperatura


1. Sistemi di controllo adattativi

Riduzione dell consumo energetico e aumento della capacità di raffreddamento attraverso la gestione attiva del flusso d’aria utilizzando sensori intelligenti e distribuiti e criteri di controllo innovativi

2. Linee guida termiche ASHRAE

Riduzione del consumo energetico per il raffreddamento, mantenendo al tempo stesso una temperatura operativa sicura per le apparecchiature informatiche

3. Contenimento del corridoio freddo/caldo

Riduzione del consumo di energia, consente un raffreddamento più efficiente utilizzando barriere fisiche per ridurre la miscelazione di aria fredda nei corridoi di alimentazione del data center con l’aria calda nei corridoi di scarico

4. Sistemi di illuminazione ad alta efficienza energetica

Utilizzo di controlli attivati dal movimento e/o LED per ridurre il consumo di energia e il calore ambientale delle luci operatorie

5. Celle a combustibile

Posizionare l’elettricità in prossimità del nostro consumo energetico consentendo la massima efficienza e una maggiore resilienza;

6. Punti di settaggio dell’acqua refrigerata ad alta temperatura

Migliora i valori PUE (power usage efficiency efficiency) e di progettazione aumentando la temperatura dell’acqua refrigerata per risparmiare energia

7 metodi di ottimizzazione del codice secondo gli standards ISO 5055

Scrivere codice efficiente e ottimizzato è un aspetto cruciale per ridurre il consumo di risorse e di energia durante l’esecuzione del software. Ciò non solo migliora le prestazioni complessive dell’applicazione, ma contribuisce anche a ridurre l’impatto ambientale, secondo i dettami della Green Software Foundation.

ISO/IEC 5055:2021 (di seguito denominato ISO 5055) è uno standard ISO per misurare la struttura interna di un prodotto software su quattro fattori critici per l’azienda: sicurezza, affidabilità, efficienza delle prestazioni e manutenibilità. Questi sono i fattori che determinano quanto affidabile, resiliente sia un sistema software.

Scrivere codice efficiente si riferisce alla pratica di creare software che utilizzi in modo ottimale le risorse disponibili, come la CPU, la memoria e altre risorse di sistema. L’obiettivo è massimizzare l’efficienza delle operazioni eseguite dal software, riducendo al minimo lo spreco di risorse e di energia.

Per alcuni consigli pratici su come ottimizzare il codice nelle app mobile in flutter vi rimandiamo a quest’articolo.

Ecco una lista di pratiche con descrizione ed esempi:

1) Minimizzare l’Utilizzo di Cicli
2) Gestione Efficiente della Memoria
3) Cache Awareness
4) Evitare Chiamate di Funzioni Ridondanti
5) Ottimizzare le Query al Database
6) Parallelismo e Concorrenza
7) Gestione delle Risorse Esterne
8) Ridurre l’Overhead


1. Minimizzare l’Utilizzo di Cicli

Evitare cicli eccessivamente complessi o ripetitivi può ridurre il carico sulla CPU e migliorare le prestazioni. Ad esempio, preferire l’uso di operazioni vettorialiali anziché cicli espliciti.

2. Gestione Efficiente della Memoria

Allocare e deallocare la memoria in modo appropriato per evitare perdite di memoria o frammentazione. Utilizzare strutture dati ottimizzate può migliorare l’efficienza e ridurre il consumo di memoria.

3. Cache Awareness

Sfruttare la gerarchia della cache per ottimizzare l’accesso alla memoria. Mantenere i dati locali ai registri o alla cache può ridurre i tempi di accesso alla memoria principale.

4. Evitare Chiamate di Funzioni Ridondanti

Ridurre il numero di chiamate di funzioni ridondanti o non necessarie può migliorare le prestazioni. Ad esempio, evitare chiamate costose in loop.

5. Ottimizzare le Query al Database

Scrivere query SQL efficienti, evitando la selezione di colonne non necessarie o l’uso eccessivo di JOIN, può migliorare le prestazioni del software.

6. Parallelismo e Concorrenza

Sfruttare il parallelismo e la concorrenza quando possibile per suddividere il carico di lavoro tra più thread o processi. Ciò può migliorare l’utilizzo della CPU e accelerare l’esecuzione.

7. Gestione delle Risorse Esterne

Assicurarsi di chiudere e rilasciare correttamente le risorse esterne, come file e connessioni di rete, per evitare sprechi e consumi inutili.

8. Ridurre l’Overhead

Come imparai molti anni fa in un vecchio manuale di marketing: dare al cliente sempre di piu’ di cio’ che si aspetta. Ecco un ottavo elemento:minimizzare l’overhead generato da operazioni accessorie o da strutture dati complesse può migliorare le prestazioni e l’efficienza.

Cos’è il software green

Il software green è il software concepito per garantire la minore quantità possibile di gas serra. Da sottolineare che l’ obiettivo è la riduzione, non la neutralizzazione.

L’argomento di quest’articolo è l’individuazione di criteri per la creazione di un ecosistema affidabile di persone, standard, strumenti e migliori pratiche per la creazione di software green tenendo in considerazione che esistono due concenzioni per considerare il software dal punto di vista ecologico: il software come parte del problema climatico e il software come parte della soluzione climatica.

Costruire software green e farlo su larga scala richiede la creazione di un ecosistema affidabile di persone, standard, strumenti e migliori pratiche. La missione della Green Software Foundation è proprio questa.

1) Software e anidride carbonica
2) Software Green: Riduzione
3) Azioni possibili


1. Software e anidride carbonica

Vorremmo che il software diventi parte della soluzione climatica, anziché essere parte del problema climatico. Ecco perché ci concentriamo sulla riduzione degli impatti negativi del software sul nostro clima, diminuendo le emissioni di carbonio di cui il software è responsabile.

Il software può anche essere un catalizzatore di soluzioni climatiche. Il software può essere sviluppato per contribuire ad accelerare la decarbonizzazione in tutti i settori dell’industria e della società. Abbiamo bisogno che persone e organizzazioni si concentrino su entrambi gli aspetti: creare software green e software abilitante per il verde. Tuttavia, il nostro focus principale è sulla creazione di un ecosistema per lo sviluppo di software green.

Per questo partecipiamo alle iniziative della Green Software Foundation, un’organizzazione senza di lucro, creata per le persone che si occupano di sviluppare software che si propone il compito di fornire risposte su cosa si puo’ fare per ridurre le emissioni di CO2 del software di cui sono responsabili.

2. Software Green: Riduzione

L’obiettivo del software green è la riduzione, non la neutralizzazione. Un grammo di carbonio che non viene emesso nell’atmosfera non è equivalente a un grammo di carbonio che è stato compensato. Di gran lunga, l’obiettivo preferibile è evitare completamente l’emissione di carbonio in primo luogo.

La riduzione è più sfidante della neutralizzazione. Comporta maggiori rischi e maggiori investimenti. Per mitigare tale rischio e incentivare gli investimenti nella riduzione, dobbiamo sviluppare un ecosistema di persone, standard, strumenti e migliori pratiche per la riduzione delle emissioni di carbonio del software. La missione della Fondazione a cui partecipiamo è coltivare questo ecosistema.

3. Azioni possibili

La nostra visione è che ci siano solo tre azioni che riducono le emissioni di carbonio del software:

1) Utilizzare meno risorse fisiche
2) Utilizzare meno energia
3) Utilizzare l’energia in modo più intelligente

Utilizzare l’energia in modo più intelligente significa consumare fonti di energia a basse emissioni di carbonio o consumare elettricità in modo che acceleri la transizione energetica verso un futuro a basse emissioni di carbonio.

Tutto ciò che si puo’ fare per ridurre le emissioni di carbonio del software rientra in una o più delle categorie sopra indicate. La missione della Fondazione per il software green di cui siamo fautori è incoraggiare l’adozione di più di queste azioni nell’industria del software.

Vi invitiamo a consultare il sito della Green Software Foundation per approfondire questi temi.

Quello che noi proponiamo per realizzare tali obiettivi sono interventi in diversi campi, e precisamente questi:

1. **Ottimizzazione del Codice:** Scrivere codice più efficiente e ottimizzato può ridurre il consumo di risorse e di energia durante l’esecuzione del software.

2. **Utilizzo di Algoritmi Efficienti:** Scegliere algoritmi che richiedono meno risorse computazionali può contribuire a ridurre il consumo di energia.

3. **Virtualizzazione e Consolidamento:** L’utilizzo di tecnologie di virtualizzazione e il consolidamento di server possono ridurre il consumo di energia e l’impatto ambientale dei data center.

4. **Efficienza Energetica del Data Center:** Migliorare l’efficienza energetica dei data center attraverso il raffreddamento efficiente, l’uso di energia rinnovabile e altre strategie può contribuire a ridurre le emissioni.

5. **Ottimizzazione delle Risorse di Calcolo:** Utilizzare le risorse di calcolo in modo più efficiente, ad esempio attraverso il bilanciamento del carico e l’allocazione intelligente delle risorse, può ridurre l’energia utilizzata.

6. **Strategie di Deployment:** Ottimizzare le strategie di deployment e distribuzione del software può contribuire a ridurre l’uso di risorse e l’impatto ambientale.

7. **Misurazione e Monitoraggio:** Implementare sistemi di monitoraggio per valutare l’utilizzo delle risorse e l’impatto ambientale del software, consentendo l’identificazione di aree di miglioramento.

8. **Utilizzo di Energia Rinnovabile:** Scegliere fornitori di servizi cloud e data center che utilizzano energia rinnovabile può contribuire a ridurre l’impatto delle emissioni.

9. **Riduzione del Consumo di Memoria:** Ottimizzare l’uso della memoria può ridurre il consumo di energia e migliorare le prestazioni complessive del software.

10. **Sviluppo Sostenibile:** Integrare principi di sostenibilità e responsabilità ambientale nello sviluppo del software, compresa la considerazione delle implicazioni ambientali durante le fasi di progettazione e sviluppo.

Ricorda che le pratiche specifiche possono variare a seconda del contesto e delle tecnologie coinvolte. Da ottobre 2021 potrebbero esserci state ulteriori sviluppi e nuove pratiche introdotte nell’ambito della riduzione dell’impatto del software sulle emissioni di CO2.