Come modelliamo gli aggregati? Qual è la strategia migliore per implementare un dominio complesso. Ci sono pattern ricorrenti nell’implementazione di applicazioni in DDD? Per quale motivo dovrei utilizzare CQRS? E se i Maya avessero avuto ragione e non ce ne fossimo accorti? Queste ed altre domande ancora…
L’alimentazione è intesa in senso olistico come reciproco scambio fra l’uomo e gli elementi vitali di cui si nutre provenienti dall’ambiente (e da restituire all’ambiente): cibi materiali che alimentano il livello organico e cibi immateriali (pensieri, azioni, emozioni) che alimentano il livello psichico.
Impariamo a conoscere gli alimenti -Macro vs micro nutrientiantoniomar21
Macro vs micro nutrienti? Cosa rappresentano questi due termini? Perché è importante avere un'informazione chiara e precisa al riguardo? Le quattro slide seguenti ti daranno un’informazione concisa e molto utile. Il contenuto è pensato per fornire un’idea molto concreta delle differenze e peculiarità dei termini presi in considerazione. Vai alla presentazione!
L’alimentazione è intesa in senso olistico come reciproco scambio fra l’uomo e gli elementi vitali di cui si nutre provenienti dall’ambiente (e da restituire all’ambiente): cibi materiali che alimentano il livello organico e cibi immateriali (pensieri, azioni, emozioni) che alimentano il livello psichico.
Impariamo a conoscere gli alimenti -Macro vs micro nutrientiantoniomar21
Macro vs micro nutrienti? Cosa rappresentano questi due termini? Perché è importante avere un'informazione chiara e precisa al riguardo? Le quattro slide seguenti ti daranno un’informazione concisa e molto utile. Il contenuto è pensato per fornire un’idea molto concreta delle differenze e peculiarità dei termini presi in considerazione. Vai alla presentazione!
PIATTI DA SALVARE - Ricette della tradizione italiana ----disponibile App per...Gianandrea Zagato
PIATTI DA SALVARE è una raccolta di ricette tradizionali italiane. Settantacinque piatti regionali accompagnati da una guida ai ristoranti, alle sagre e alle tradizioni locali. PIATTI DA SALVARE è disponibile anche su App store sia per IPad che per IPhone. Per contatti gzagato@hotmail.com www.gianandreazagato.it @gzagatoblog
“Integratori di Proteine” è il titolo della presentazione che espone informazioni utili per rispondere alle domande che seguono: Quando serve assumere un integratore a base di proteine? Quali sono le principali caratteristiche di ogni prodotto?
Nutrienti e geni: un dialogo alla base della nostra saluteMaurizio Salamone
Il dialogo tra nutrienti e geni è alla base della nostra salute. Le modificazioni epigenetiche diventano talvolta trasmissibili anche modifiche del DNA: I nutrienti sono potenti modulatori della regolazione genica oltre che del metabolismo. E' ora di abbandonare arcaiche visioni centrate sul conteggio delle calorie
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
Increased complexity makes it very hard and time-consuming to keep your software bug-free and secure. We introduce fuzz-testing as a method for automatically and continuously discovering vulnerabilities hidden in your code. The talk will explain how fuzzing works and how to integrate fuzz-testing into your Software Development Life Cycle to increase your code’s security.
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
It was 1993 when we decided to venture in a beat'em up game for Amiga. The Catalypse's success story pushed me and my comrade to create something astonishing for this incredible game machine... but things went harder, assumptions were slightly different, and italian competitors appeared out of nowhere... the project died in 1996. Story ended? Probably not...
Il Commodore 65 è un prototipo di personal computer che Commodore avrebbe dovuto mettere in commercio quale successore del Commodore 64. Purtroppo la sua realizzazione si fermò appunto allo stadio prototipale. Racconterò l'affascinante storia del suo sviluppo ed il perchè della soppressione del progetto ormai ad un passo dalla immissione in commercio.
Rivivere l'ebbrezza di progettare un vecchio computer o una consolle da bar è oggi possibile sfruttando le FPGA, ovvero logiche programmabili che consentono a chiunque di progettare il proprio hardware o di ricrearne uno del passato. In questa sessione si racconta come dal reverse engineering dell'hardware di vecchie glorie come il Commodore 64 e lo ZX Spectrum sia stato possibile farle rivivere attraverso tecnologie oggi alla portata di tutti.
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
There's a lot of talk about blockchain, but how does the technology behind it actually work? For developers, getting some hands-on experience is the fastest way to get familiair with new technologies. So let's build a blockchain, then! In this session, we're going to build one in plain old Java, and have it working in 40 minutes. We'll cover key concepts of a blockchain: transactions, blocks, mining, proof-of-work, and reaching consensus in the blockchain network. After this session, you'll have a better understanding of core aspects of blockchain technology.
PIATTI DA SALVARE - Ricette della tradizione italiana ----disponibile App per...Gianandrea Zagato
PIATTI DA SALVARE è una raccolta di ricette tradizionali italiane. Settantacinque piatti regionali accompagnati da una guida ai ristoranti, alle sagre e alle tradizioni locali. PIATTI DA SALVARE è disponibile anche su App store sia per IPad che per IPhone. Per contatti gzagato@hotmail.com www.gianandreazagato.it @gzagatoblog
“Integratori di Proteine” è il titolo della presentazione che espone informazioni utili per rispondere alle domande che seguono: Quando serve assumere un integratore a base di proteine? Quali sono le principali caratteristiche di ogni prodotto?
Nutrienti e geni: un dialogo alla base della nostra saluteMaurizio Salamone
Il dialogo tra nutrienti e geni è alla base della nostra salute. Le modificazioni epigenetiche diventano talvolta trasmissibili anche modifiche del DNA: I nutrienti sono potenti modulatori della regolazione genica oltre che del metabolismo. E' ora di abbandonare arcaiche visioni centrate sul conteggio delle calorie
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
Increased complexity makes it very hard and time-consuming to keep your software bug-free and secure. We introduce fuzz-testing as a method for automatically and continuously discovering vulnerabilities hidden in your code. The talk will explain how fuzzing works and how to integrate fuzz-testing into your Software Development Life Cycle to increase your code’s security.
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
It was 1993 when we decided to venture in a beat'em up game for Amiga. The Catalypse's success story pushed me and my comrade to create something astonishing for this incredible game machine... but things went harder, assumptions were slightly different, and italian competitors appeared out of nowhere... the project died in 1996. Story ended? Probably not...
Il Commodore 65 è un prototipo di personal computer che Commodore avrebbe dovuto mettere in commercio quale successore del Commodore 64. Purtroppo la sua realizzazione si fermò appunto allo stadio prototipale. Racconterò l'affascinante storia del suo sviluppo ed il perchè della soppressione del progetto ormai ad un passo dalla immissione in commercio.
Rivivere l'ebbrezza di progettare un vecchio computer o una consolle da bar è oggi possibile sfruttando le FPGA, ovvero logiche programmabili che consentono a chiunque di progettare il proprio hardware o di ricrearne uno del passato. In questa sessione si racconta come dal reverse engineering dell'hardware di vecchie glorie come il Commodore 64 e lo ZX Spectrum sia stato possibile farle rivivere attraverso tecnologie oggi alla portata di tutti.
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
There's a lot of talk about blockchain, but how does the technology behind it actually work? For developers, getting some hands-on experience is the fastest way to get familiair with new technologies. So let's build a blockchain, then! In this session, we're going to build one in plain old Java, and have it working in 40 minutes. We'll cover key concepts of a blockchain: transactions, blocks, mining, proof-of-work, and reaching consensus in the blockchain network. After this session, you'll have a better understanding of core aspects of blockchain technology.
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
When was the last time you were truly lost? Thanks to the maps and location technology in our phones, a whole generation has now grown up in a world where getting lost is truly a thing of the past. Location technology goes far beyond maps in the palm of our hand, however. In this talk, we will explore how a ridesharing app works. How do we discover our destination?How do we find the closest driver? How do we display this information on a map? How do we find the best route?To answer these questions,we will be learning about a variety of location APIs, including Maps, Positioning, Geocoding etc.
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
Eward Driehuis, SecureLink's research chief, will guide you through the bumpy ride we call the cyber threat landscape. As the industry has over a decade of experience of dealing with increasingly sophisticated attacks, you might be surprised to hear more attacks slip through the cracks than ever. From analyzing 20.000 of them in 2018, backed by a quarter of a million security events and over ten trillion data points, Eward will outline why this happens, how attacks are changing, and why it doesn't matter how neatly or securely you code.
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
IoT revolution is ended. Thanks to hardware improvement, building an intelligent ecosystem is easier than never before for both startups and large-scale enterprises. The real challenge is now to connect, process, store and analyze data: in the cloud, but also, at the edge. We’ll give a quick look on frameworks that aggregate dispersed devices data into a single global optimized system allowing to improve operational efficiency, to predict maintenance, to track asset in real-time, to secure cloud-connected devices and much more.
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
What if Virtual Reality glasses could transform your environment into a three-dimensional work of art in realtime in the style of a painting from Van Gogh? One of the many interesting developments in the field of Deep Learning is the so called "Style Transfer". It describes a possibility to create a patchwork (or pastiche) from two images. While one of these images defines the the artistic style of the result picture, the other one is used for extracting the image content. A team from TNG Technology Consulting managed to build an AI showcase using OpenCV and Tensorflow to realize such goggles.
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
Blockchain (and Cryptocurrency) is an evolution of 20-year old research from scientists like Chaum, Lamport, and Castro & Liskov. Due to the current hype, it's hard to distinguish beneficial aspects of the technology from a desire for a "silver bullet" for device security, verifiable logistics, or "saving democracy". The problem: blockchain introduces new security challenges - and blind adoption without understanding reduces overall security. In this talk, Melanie Rieback and Klaus Kursawe explain the pitfalls and limits of blockchain, so you can avoid making your applications LESS secure.
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
Networking is a core part of computing in the digital world we inhabit. But, how well do you know how it works? Do you understand all the moving parts of the OSI stack inside your computer, and how the network is actually put together? How can this ever work? This guided safari of layers, standards, protocols, and happenstance will bring us close to the copper wire, and up through the layers of CDMA/CD, ARP, routing and HTTP. We will make a few excursions through patchworks that still work forty years later, and cleverly designed mechanisms that show that simplicity is the only way to last.
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
Performance tests are not only an important instrument for understanding a system and its runtime environment. It is also essential in order to check stability and scalability – non-functional requirements that might be decisive for success. But won't my cloud hosting service scale for me as long as I can afford it? Yes, but… It only operates and scales resources. It won't automatically make your system fast, stable and scalable. This talk shows how such and comparable questions can be clarified with performance tests and how DevOps teams benefit from regular test practise.
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
Sascha will demonstrate the opportunities and challenges of Conversational AI learned from the practice. Both Technology and User Experience will be covered introducing a process finding micro-moments, writing happy paths, gathering intents, designing the conversational flow, and finally publishing on almost all channels including Voice Services and Chatbots. Valuable for enterprises, developers, and designers. All live on stage in just minutes and with almost no code.
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
A key challenge we face at Pacmed is quickly calibrating and deploying our tools for clinical decision support in different hospitals, where data formats may vary greatly. Using Intensive Care Units as a case study, I’ll delve into our scalable Python pipeline, which leverages Pandas’ split-apply-combine approach to perform complex feature engineering and automatic quality checks on large time-varying data, e.g. vital signs. I’ll show how we use the resulting flexible and interpretable dataframes to quickly (re)train our models to predict mortality, discharge, and medical complications.
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
Coolblue is a proud Dutch company, with a large internal development department; one that truly takes CI/CD to heart. Empowerment through automation is at the heart of these development teams, and with more than 1000 deployments a day, we think it's working out quite well. In this session, Pat Hermens (a Development Managers) will step you through what enables us to move so quickly, which tools we use, and most importantly, the mindset that is required to enable development teams to deliver at such a rapid pace.
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
Quantum computers can use all of the possible pathways generated by quantum decisions to solve problems that will forever remain intractable to classical compute power. As the mega players vie for quantum supremacy and Rigetti announces its $1M "quantum advantage" prize, we live in exciting times. IBM-Q and Microsoft Q# are two ways you can learn to program quantum computers so that you're ready when the quantum revolution comes. I'll demonstrate some quantum solutions to problems that will forever be out of reach of classical, including organic chemistry and large number factorisation.
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
Chinese food exploded across America in the early 20th century, rapidly adapting to local tastes while also spreading like wildfire. How was it able to spread so fast? The GY6 is a family of scooter engines that has achieved near total ubiquity in Europe. It is reliable and cheap to manufacture, and it's made in factories across China. How are these factories able to remain afloat? Chinese-American food and the GY6 are both riveting studies in product-market fit, and both are the product of a distributed open source-like development model. What lessons can we learn for open source software?
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
The design space has exploded in size within the last few years and Sketch is one of the most important milestones to represent the phenomenon. But behind the scenes of this growing reality there is a remote team that revolutionizes the design space all without leaving the home office. This talk will present how Sketch has grown to become a modern, product designer's tool.
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
Would you fly in a plane designed by a craftsman or would you prefer your aircraft to be designed by engineers? We are learning that science and empiricism works in software development, maybe now is the time to redefine what “Software Engineering” really means. Software isn't bridge-building, it is not car or aircraft development either, but then neither is Chemical Engineering. Engineering is different in different disciplines. Maybe it is time for us to begin thinking about retrieving the term "Software Engineering" maybe it is time to define what our "Engineering" discipline should be.
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
What is the job of a CTO and how does it change as a startup grows in size and scale? As a CTO, where should you spend your focus? As an engineer aspiring to be a CTO, what skills should you pursue? In this inspiring and personal talk, I describe my journey from early Red Hat engineer to CTO at Bloomon. I will share my view on what it means to be a CTO, and ultimately answer the question: Should the CTO be coding?
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Ricette veloci per Domain-Driven Design by Alberto Brandolini
1. Ricette
veloci per
Domain-
Driven
Design
dal menù di
@ziobrando
venerdì 22 marzo 13
2. About me
In the IT field since ZX Spectrum
Generally in large scale projects (I might be biased)
Strategic IT Consultant
Trainer (Avanscoperta & Skills Matter)
Technical Writer
Blogger: http://ziobrando.blogspot.com
Twitter: @ziobrando
My e-mail: alberto.brandolini@gmail.com
venerdì 22 marzo 13
3. About me
Mi piace risolvere problemi
O scrivere software che li risolva
Blogger: http://ziobrando.blogspot.com
Twitter: @ziobrando
My e-mail: alberto.brandolini@gmail.com
venerdì 22 marzo 13
4. About me
In the IT field since ZX Spectrum
Generally in large scale projects (I might be biased)
Strategic IT Consultant
Trainer (Avanscoperta & Skills Matter)
Technical Writer
Blogger: http://ziobrando.blogspot.com
Twitter: @ziobrando
My e-mail: alberto.brandolini@gmail.com
venerdì 22 marzo 13
5. Aggregates
It is difficult to guarantee the consistency of
changes to objects in a model with complex
associations. Invariants need to be
maintained that apply to closely related
groups of objects, not just discrete objects.
An AGGREGATE is a cluster of associated
objects that we treat as a unit for the purpose of
data changes.
venerdì 22 marzo 13
28. Conceptual CQRS
Command to Domain Model raises
issues
Event
User
Read Model
influences notified to
influences
updates Projection
External
information
Warning! non è architettura...
venerdì 22 marzo 13
29. Qui decide l’utente
Command
issues
User
Read Model
influences influences
External
information
venerdì 22 marzo 13
31. User Steps
- L’utente decide quali comandi
invocare sul sistema sulla base
delle informazioni derivanti
dalla sua esperienza, e da
quanto reso disponibile
dall’applicazione
venerdì 22 marzo 13
32. Examples?
- Timesheet entry
venerdì 22 marzo 13
33. Conceptual CQRS
Command to Domain Model raises
issues
Event
User
Read Model
influences notified to
influences
updates Projection
External
information
venerdì 22 marzo 13
36. Conceptual CQRS
Command to Domain Model raises
issues
Event
User
Read Model
influences notified to
influences
updates Projection
External
information
venerdì 22 marzo 13
37. Aggregates
It is difficult to guarantee the consistency of
changes to objects in a model with complex
associations. Invariants need to be
maintained that apply to closely related
groups of objects, not just discrete objects.
An AGGREGATE is a cluster of associated
objects that we treat as a unit for the purpose of
data changes.
venerdì 22 marzo 13
40. Aggregate History
- Propagazione
- 2004 una generica “comunicazione
asincrona”
venerdì 22 marzo 13
41. Aggregate History
- Propagazione
- 2004 una generica “comunicazione
asincrona”
- 2010 ... Domain Events
venerdì 22 marzo 13
42. Aggregate History
- Propagazione
- 2004 una generica “comunicazione
asincrona”
- 2010 ... Domain Events
- Struttura interna:
venerdì 22 marzo 13
43. Aggregate History
- Propagazione
- 2004 una generica “comunicazione
asincrona”
- 2010 ... Domain Events
- Struttura interna:
- 2004: “Don’t fight your frameworks”
venerdì 22 marzo 13
44. Aggregate History
- Propagazione
- 2004 una generica “comunicazione
asincrona”
- 2010 ... Domain Events
- Struttura interna:
- 2004: “Don’t fight your frameworks”
- ORM / NoSQL / Event Sourcing /
Functional...
venerdì 22 marzo 13
45. Domain Model
Command to Domain Model raises
Event
venerdì 22 marzo 13
46. Domain Model
- Qui è dove è il sistema a
prendere le decisioni.
venerdì 22 marzo 13
47. I dati non sono tutti iguali
Il sistema prenderà una
decisone basandosi su
questi dati
..l’utente si baserà su
questi, ed altro...
venerdì 22 marzo 13
58. Uova al tegame
In presenza di sufficiente calore, l’albume
coagula più rapidamente del tuorlo. che è più
digeribile in forma liquida.
Un UOVO AL TEGAME si ottiene ponendo
l’uovo sgusciato su una superficie piana, calda e
non aderente, per un tempo sufficientemente
lungo da consentire la coagulazione dell’albume,
preservando il tuorlo.
venerdì 22 marzo 13
59. “Metti un po’ di
burro in padella,
apri l’uovo e cuoci”
venerdì 22 marzo 13
63. Invariant
An INVARIANT is a condition that can relied
upon to be true during the execution of a
program.
venerdì 22 marzo 13
64. Invarianti?
Totale = Somma(prezzoUnitario*quantità)
venerdì 22 marzo 13
65. Comandi?
CreateEmpty ItemAddedToCart
to raises
RemoveItem to Cart raises ItemRemovedFromCart
to raises
AddItem CartCreated
Totale = Somma(prezzoUnitario*quantità)
venerdì 22 marzo 13
66. Problema
- Il prezzo degli articoli può
variare.
venerdì 22 marzo 13
68. Quindi?
No, è che ha detto
[nome di uno troppo importante
per parlare con voi] che il prezzo
può cambiare...
venerdì 22 marzo 13
69. Quindi?
No, è che ha detto
[nome di uno troppo importante
per parlare con voi] che il prezzo
può cambiare...
...e va
implementata per
dopodomani.
venerdì 22 marzo 13
70. Quindi?
No, è che ha detto
[nome di uno troppo importante
per parlare con voi] che il prezzo
può cambiare...
...e va Doveva già essere
implementata per così.
dopodomani.
venerdì 22 marzo 13
73. Quindi?
Puoi farmi un
esempio?
venerdì 22 marzo 13
74. Esempio
- Given item stormtrooper clothing is
priced €500 each
- And customer ziobrando added 10
of stormtrooper clothing to cart
- When price for stormtrooper
clothing is updated to €750 each
- Then ???
venerdì 22 marzo 13
78. Ma anche...
Il
comportamento dell’utente
cambia se la variazione di prezzo è
favorevole o sfavorevole: possiamo
applicare immediatamente gli
sconti, e bloccare i rincari per
un giorno.
venerdì 22 marzo 13
79. Ma anche...
Il
comportamento dell’utente
cambia se la variazione di prezzo è
favorevole o sfavorevole: possiamo
applicare immediatamente gli
sconti, e bloccare i rincari per
un per
...ma solo giorno.
alcuni articoli
venerdì 22 marzo 13
84. Bello. Ma oggi...
...aggiorniamo i
prezzi nel carrello
venerdì 22 marzo 13
85. ItemPriceUpdated
to
<<EventHandler>>
<<Service>>
…?
raises CartPriceUpdated
UpdateItemPrice raises
to ItemAddedToCart
CreateEmpty to
raises
Cart raises ItemRemovedFromCart
to
RemoveItem raises
to CartCreated
AddItem
venerdì 22 marzo 13
87. Domain Model
- Qui è dove è il sistema a
prendere le decisioni.
- ...sulla basi di quali
informazioni?
venerdì 22 marzo 13
88. I dati non sono tutti iguali
Il sistema prenderà una
decisone basandosi su
questi dati
..l’utente si baserà su
questi, ed altro...
venerdì 22 marzo 13
90. Solo i dati significativi
per l’esecuzione sono
modellati
CreateEmpty ItemAddedToCart
to raises
RemoveItem to Cart raises ItemRemovedFromCart
to raises
AddItem CartCreated
...tutto il contenuto
informativo è propagato
attraverso gli eventi
venerdì 22 marzo 13
100. Che [*] é umami?
[*] = Colorita espressione regionale
venerdì 22 marzo 13
101. Che [*] é un
invariante?
[*] = Colorita espressione regionale
venerdì 22 marzo 13
102. 3 modelli
- Costruzione
- Esecuzione
- Controllo
venerdì 22 marzo 13
103. ...le invarianti si semplificano
- comportamento differenziato
- condizioni più precise
- possibilità di applicare una
differente semantica: es
warning vs blocker
- fare le domande giuste
venerdì 22 marzo 13
105. Comunque...
geteventstore.com
venerdì 22 marzo 13
106. Domain-Driven Design
Eric Evans
Enterprise Integration
Patterns
Gregor Hohpe, Bobby Woolf
Patterns of Enterprise
Application Architecture
Martin Fowler
Per saperne di più... www.avanscoperta.it
venerdì 22 marzo 13
107. Implementing Domain-Driven Design
Vaughn Vernon
http://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577
Event Centric
Greg Young
http://www.amazon.com/Event-Centric-Simplicity-Addison-Wesley-Signature/dp/0321768221
Per saperne di più... www.avanscoperta.it
venerdì 22 marzo 13