Browsing posts in: Development

CAP Theorem

Il teorema del CAP (ConsistencyAvailability and Partition tolerance), ideato dall’informatico statunitense Eric Brewer, afferma afferma che è impossibile per un sistema informatico distribuito fornire simultaneamente tutte e tre le seguenti garanzie: Coerenza, Disponibilità e Tolleranza delle partizioni.

Di seguito è riportata una breve definizione di questi tre termini:

  • Consistency: E’ la garanzia che ogni nodo in un cluster distribuito restituisca lo stesso dato più recente, ovvero proveniente dall’ultima scrittura dello stesso, oppure un messaggio di errore. Ogni client che interroga un qualsiasi cluster del sistema distribuito ha la stessa “vista” dei dati.  Ad esempio, un’applicazione bancaria distribuita mostrerà sempre il saldo corretto nel proprio account.
  • Availability: significa semplicemente che ogni richiesta deve ricevere una risposta. Un server funzionante non può ignorare una richiesta di un client ed è obbligato a dare una risposta. Nella maggior parte dei sistemi reali, ovviamente, una risposta sufficientemente ritardata è altrettanto negativa quanto una risposta non data.
  • Partition tolerance: il sistema continua a funzionare, nonostante il numero di messaggi ritardati dalla rete tra i nodi. Un sistema tollerante alle partizioni può sopportare qualsiasi problema di rete che non si traduce per forza in un guasto dell’intera rete. I record di dati sono sufficientemente replicati tra i nodi che garantiscono una tolleranza anche su interruzioni intermittenti. Quando si tratta di sistemi distribuiti moderni, il Partition Tolerance non è un’opzione, ma una necessità.

Lo schema seguente mostra i tre termini sopra riportati. Come si può vedere non si raggiungerà mai lo stato formato dall’unione di tutti e tre gli stati:

Teorema CAP – Coerenza, disponibilità, tolleranza delle partizioni

Continue Reading


SQL o NO-SQL?

Un filo conduttore della tecnologia è l’evoluzione – come del resto anche per gli esseri umani. Non è insolito, vedere le cose evolversi e adattarsi mentre il mondo intorno a loro cambia. Un esempio che conosciamo benissimo sono gli aggiornamenti nei software applicativi del nostro pc o del nostro smartphone… Questo adattamento significa che a volte appaiono nuove “varianti” nei nostri strumenti, per servire meglio determinati scopi specifici.

Il mondo del database non fa eccezione. Sin dai tempi di EF Codd e della sua introduzione del modello di dati relazionali, abbiamo visto i database, e le loro esigenze, evolversi da modelli puramente transazionali ACID (Atomic, Consistent, Isolated, Durable), richiedendo maggiore flessibilità, capacità di scalare (in sistemi distribuiti) e velocità (in termini di latenza e velocità effettiva).

Queste evoluzioni potrebbero essere state, in molti casi, le motivazioni per cui si è preferito, in passato, l’adozione dei sistemi RDBMS. Chi lo sa?

In questo articolo, faremo riferimento ai tradizionali database SQL – sistemi di database relazionali – come RDBMS. La loro controparte è la categoria di database NoSQL – che include molti sottotipi.

Continue Reading


L’albero decisionale nel machine learning

In un articolo precedente abbiamo introdotto il concetto di Machine learning e come l’apprendimento statistico possa identificare automaticamente delle strutture nei dati e quindi effettuare predizioni con elevata accuratezza. In questo articolo, usando dei dati che riportano specifiche informazioni, creeremo un modello di machine learning.

Oltre ad essere un elemento così importante per la sopravvivenza degli esseri umani, gli alberi hanno anche ispirato un’ampia varietà di algoritmi nel Machine Learning sia per la classificazione che per la regressione.  Gli alberi decisionali, come suggerisce il nome, sono alberi di decisioni. Continue Reading


Machine Learning

Machine Learning (o Apprendimento Automatico) rappresenta un insieme di metodi sviluppati a partire dagli ultimi decenni del XX secolo che porta i computer ad apprendere e agire come fanno gli umani, migliorare in modo autonomo il loro apprendimento nel tempo, “alimentandoli” con dati e informazioni sotto forma di osservazioni e interazioni reali.

Varie comunità scientifiche hanno utilizzato nel tempo diversi nomi quali statistica computazionale, riconoscimento di pattern, reti neurali artificiali, filtraggio adattivo, teoria dei sistemi dinamici, elaborazione delle immagini, data mining, algoritmi adattivi, ecc. Tutti sinonimi per indicare l’applicazione di metodi statistici al fine di migliorare progressivamente la performance di un algoritmo nell’identificare pattern nei dati. Continue Reading


La programmazione ad oggetti spiegata a mio figlio

Quali sono i principi fondamentali della programmazione orientata agli oggetti? È uno di quegli argomenti che viene chiesto così spesso che un informatico non può permettersi di non sapere. Come le classiche domande banali in un colloquio, anche questa serve principalmente a scoprire il grado di preparazione di un candidato o il livello di comprensione di un argomento.

Ma torniamo a noi… Quattro principi basilari: incapsulamento, astrazione, eredità e polimorfismo.

Queste parole possono sembrare spaventose per uno sviluppatore junior. E le complesse spiegazioni eccessivamente lunghe di Wikipedia a volte non aiutano ma raddoppiano la confusione. Per questo motivo, questo articolo è dedicato ad una spiegazione semplice, breve e chiara per ciascuno dei 4 concetti, come se davanti a me ci fosse mio figlio. Continue Reading


Come costruire un motore di ricerca basato su MySQL

Nei siti web content-heavy (con molti contenuti), è importante dare la possibilità di poter effettuare ricerche in grado di aiutare gli utenti a trovare esattamente ciò che stanno cercando. La soluzione più ovvia è la ricerca diretta all’interno delle tabelle del database MySQL. Tuttavia, l’implementazione di una ricerca MySQL generica non è affatto banale. Ecco come evitare insidie ​​e creare un motore di ricerca robusto basato su MySQL.

MySQL è un database relazionale, non un motore di ricerca. Sebbene fornisca alcuni strumenti per cercare all’interno delle tabelle, è meglio integrare un vero motore di ricerca se stai cercando una soluzione a tutti gli effetti. Alcuni dei più popolari motori di ricerca (open source) sono:

Le opzioni di cui sopra sono sicuramente di gran lunga superiori, tuttavia potrebbe avere senso costruire un motore di ricerca basato solo su MySQL, magari per evitare l’installazione e la manutenzione di software aggiuntivo o perchè il nostro hosting ha risorse limitate. Continue Reading



React, da dove iniziare?

Nel precedente articolo, ho parlato di DOM e Virtual DOM e di quali potenzialità quest’ultimo offre agli sviluppatori per creare interfacce dinamiche performanti e veloci. Tutto questo può avvenire grazie alla libreria React.

In questo articolo, proverò a spiegarti i concetti fondamentali di React attraverso un esempio step-by-step su come creare una semplice app. Si presuppone che tu abbia già conoscenza del linguaggio Javascript e che abbia installato l’ambiente NodeJs. Continue Reading


Una panoramica su React

React è una potente libreria Javascript per creare applicazioni dinamiche e interattive efficienti. In questo articolo vedremo una breve panoramica di ciò che può fare React, partendo da un esempio costruito da zero, senza utilizzare strumenti o ide particolari, ma solo un semplice notepad.

Continue Reading


React, DOM e DOM Virtuale: quali differenze?

Prima di parlare di DOM Virtuale e React, cerchiamo di fissare un paio di concetti: DOM sta per Document Object Model ed è un’astrazione di un testo strutturato.

Per gli sviluppatori web, questo testo è una semplice pagina HTML, e il DOM è semplicemente chiamato DOM HTML. Gli elementi di HTML diventano nodi nel DOM.

Quindi, mentre l’HTML è un testo, il DOM è una rappresentazione in memoria di questo testo. Potremmo confrontarlo alla stregua di un processo informatico, che si tratta di un’istanza di un programma. Possiamo avere più processi dello stesso programma, cosi come possiamo avere più DOM dello stesso codice HTML (ad esempio la stessa pagina caricata su molte schede). Continue Reading


Pagine:12345

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

Chiudi