Namasté ... come and meet BeauForma, the company you wished you worked for, and while you're at it, get an introduction in how to design, author and test projections for your next DDD/CQRS/ES project, hands-on. Bring a computer and pair up with a buddy.
The document discusses projections in event sourcing, including terminology, designing projections, authoring projections, and testing projections. Projections transform event data stored in an event log into read models optimized for querying. The document covers topics like defining projection handlers, dispatching events to handlers, and testing projections with sample events.
This document provides an overview of design challenges and examples of designing in small domains. Some key points:
1. It discusses common reasons why design fails, such as lack of domain expertise, communication, or time for design up front.
2. It presents examples of designing value objects like GroupId and GroupName to encapsulate behavior and validation related to those concepts.
3. It shows how behaviors can be modeled through modules that handle commands and events related to a domain, like starting a private group.
4. Testing examples demonstrate state-based, event-driven, and scenario-based approaches using fixtures to generate random test data.
5. Overall it promotes designing domains with primitives/
ES3-2020-06 Test Driven Development (TDD)David Rodenas
Basics of TDD. Including why? Why it is discipline. Typical Pitfalls. Kinds of TDD, and a Recipe so anyone can do testing quickly. And lots of examples.
Google App Engine in 40 minutes (the absolute essentials)Python Ireland
This talk covers just the stuff needed to get you up-to-speed with Google App Engine and its associated technologies (based on the Python run-time, of course). In addition to a bit of talking, Paul will also demo a working webapp built and deployed on the App Engine cloud... all in 40 minutes.
Too often we model processes around the myth of Database Transactions, ofter forgetting what a transaction really means in the real world. This talk shows an easy and cheap approach to use together with EventStorming in order to include User Experience into process modelling
The document provides five rules for presenting code in slides: 1) Use a monospaced font for readability, 2) Use large fonts that are visible from the back of the room, 3) Only highlight syntax where needed to avoid walls of text, 4) Use ellipses (...) to remove unnecessary code, and 5) Add annotations to draw attention to specific parts of the code. It then demonstrates these rules by presenting an example of using promises in JavaScript to avoid nested callbacks.
The document discusses the internals of Twig, a templating language for PHP. It provides an overview of key Twig concepts like the lexer, parser, abstract syntax tree, template compilation process, and extensions. The lexer tokenizes template code into a stream of tokens. The parser processes these tokens to build an abstract syntax tree, representing the template's structure. Twig then compiles templates by transforming the abstract syntax tree into PHP code.
Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a wide variety of problems including full-text search, spatial search, autocomplete suggestions, aggregation, and filtering. The document summarizes how to use Elasticsearch with PHP via two main options - using the Elastica client directly or through the FOSElasticaBundle for Symfony projects, which provides integration with Doctrine, Propel and other ORM/ODM libraries. Key features covered include indexing, searching, filtering documents as well as mapping types and fields.
The document discusses projections in event sourcing, including terminology, designing projections, authoring projections, and testing projections. Projections transform event data stored in an event log into read models optimized for querying. The document covers topics like defining projection handlers, dispatching events to handlers, and testing projections with sample events.
This document provides an overview of design challenges and examples of designing in small domains. Some key points:
1. It discusses common reasons why design fails, such as lack of domain expertise, communication, or time for design up front.
2. It presents examples of designing value objects like GroupId and GroupName to encapsulate behavior and validation related to those concepts.
3. It shows how behaviors can be modeled through modules that handle commands and events related to a domain, like starting a private group.
4. Testing examples demonstrate state-based, event-driven, and scenario-based approaches using fixtures to generate random test data.
5. Overall it promotes designing domains with primitives/
ES3-2020-06 Test Driven Development (TDD)David Rodenas
Basics of TDD. Including why? Why it is discipline. Typical Pitfalls. Kinds of TDD, and a Recipe so anyone can do testing quickly. And lots of examples.
Google App Engine in 40 minutes (the absolute essentials)Python Ireland
This talk covers just the stuff needed to get you up-to-speed with Google App Engine and its associated technologies (based on the Python run-time, of course). In addition to a bit of talking, Paul will also demo a working webapp built and deployed on the App Engine cloud... all in 40 minutes.
Too often we model processes around the myth of Database Transactions, ofter forgetting what a transaction really means in the real world. This talk shows an easy and cheap approach to use together with EventStorming in order to include User Experience into process modelling
The document provides five rules for presenting code in slides: 1) Use a monospaced font for readability, 2) Use large fonts that are visible from the back of the room, 3) Only highlight syntax where needed to avoid walls of text, 4) Use ellipses (...) to remove unnecessary code, and 5) Add annotations to draw attention to specific parts of the code. It then demonstrates these rules by presenting an example of using promises in JavaScript to avoid nested callbacks.
The document discusses the internals of Twig, a templating language for PHP. It provides an overview of key Twig concepts like the lexer, parser, abstract syntax tree, template compilation process, and extensions. The lexer tokenizes template code into a stream of tokens. The parser processes these tokens to build an abstract syntax tree, representing the template's structure. Twig then compiles templates by transforming the abstract syntax tree into PHP code.
Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a wide variety of problems including full-text search, spatial search, autocomplete suggestions, aggregation, and filtering. The document summarizes how to use Elasticsearch with PHP via two main options - using the Elastica client directly or through the FOSElasticaBundle for Symfony projects, which provides integration with Doctrine, Propel and other ORM/ODM libraries. Key features covered include indexing, searching, filtering documents as well as mapping types and fields.
Get Soaked - An In Depth Look At PHP StreamsDavey Shafik
The document provides an in-depth overview of PHP streams, including stream basics, input/output, filters, wrappers, transports, contexts, and examples of using streams for HTTP requests, FTP operations, and a hypothetical Twitter client. It explains how streams allow modification of data in-flight and provides built-in and custom wrappers for various protocols.
This document provides an overview of Phing, an open source build tool based on Apache Ant. Phing allows users to automate tasks like configuration, packaging, deployment, testing and more through PHP scripts. It is cross-platform and supports features like running tasks in parallel, filtering files, transforming data and extending functionality through custom tasks and extensions. The document demonstrates how to write Phing build scripts and utilize core tasks and functionality like file selection, property handling, conditionals and more.
PHP 5.5 is the latest version of PHP that includes new features like a password hashing API, generators syntax, and a finally keyword for exceptions. It also includes performance improvements and integration with the OPcache for opcode caching. Some changes in PHP 5.5 include deprecating the mysql extension and preg_replace /e modifier.
PHP generators allow functions to behave like iterators by yielding values one at a time rather than building and returning an array all at once. Generators are automatically created when the yield keyword is used in a function. They implement the Iterator interface and can be used in foreach loops. Data and control flow can be passed into generators using the send() method to influence their behavior.
The quest for global design principles (SymfonyLive Berlin 2015)Matthias Noback
If you’re a programmer you make design decisions every second. You need to think, and often think hard, about everything. Luckily there are many useful design principles and patterns that you can apply. But some of them merely expose code smells. Others only help you design your classes. And some are applicable to packages only. Wouldn’t it be nice to have some more general, always useful, invariably applicable, foundational design principles? In this talk we’ll look at software from many different perspectives, and while we’re zooming in and out, we’ll discover some of the deeper principles that form the basis of proper object-oriented design. After attending this talk you will be able to make better design decisions by reflecting on the stream of messages that is flowing from object to object, and from application to application.
1) Tips for optimizing MySQL performance include properly configuring variables like the buffer pool size, log file size, and using hardware like SSDs, RAM, and multiple CPU cores.
2) The presentation covered optimizing the database configuration, hardware, and database design.
3) Additional tips included finding and addressing bottlenecks through monitoring and testing, using technologies like NoSQL and MySQL Cluster for high volume workloads, and sharding with MySQL Fabric.
Replacing dependents with doubles is a central part of testing that every developer has to master. This talk goes over the different types of doubles and explains their place in testing, how to implement them in a mainstream mocking framework, and which strategies or doubles to use in different message exchange scenarios between objects. After this talk you will have moved a step forward in your understanding of testing in the context of object oriented programming.
Marcello reflects over the craftsmanship manifesto and its elements to uncover some interesting insights regarding the application of the underlying principles in real life projects and in the context of organisations and communities struggling to live up to the expectations it creates.
Writing infinite scalability web applications with PHP and PostgreSQLGabriele Bartolini
PostgreSQL 9.2 introduced native support for the JSON data type, as well as V8/Javascript and Coffeescript procedural languages.
Learn how you can write web applications in PHP using an intelligent and horizontally sharded cluster of PostgreSQL databases, bringing you infinite scalability and parallel processing.
This talk will guide you through the development lifecycle of the application, focusing on architecture, technologies, testing and deployment.
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Bruno Boucard
Si Michel-Ange avait été développeur quels auraient été ses secrets. Quelle était la posture de cet artiste ? Quelle place occupent nos modèles mentaux lorsque nous développons ? La notion de design émergent qui accompagne les approches test-first (TDD, BDD,…) peut rendre plus d’une personne sceptique. En effet, comment concilier nos intuitions et projections mentales avec cette approche a priori minimaliste et contre-intuitive ?
L'ABC du BDD (Behavior Driven Development)Arnauld Loyer
Une introduction au Behavior Driven Development, avec plein d'idées pour tout de suite! et applicable à tout projet. Il sera question:
* de passer de l'incompréhension à savoir qu'on ne sait pas
* des westerns spaghetti aux Three Amigos,
* de reléguer le Comment au second plan pour laisser sa place au Pourquoi!
* de rendre des spécifications exécutables
* de découvrir qu'un concombre n'est pas qu'un Cucurbitacée aux feuilles tri-lobées
* d'automatisation comme outil de non-regression
Au cours de cette session, nous expliquerons ce qu'est le BDD. Nous verrons qu'il n'est pas question d'outils ou de tests, mais de collaboration et de discussion entre les différentes parties prenantes: du métier aux développeurs en passant par les testeurs. Cette presentation s'adresse à l'ensemble de ces populations en expliquant l'importance qu'il y a à se comprendre, et qu'il n'est pas nécessaire d'avoir des outils sophistiqués pour avoir des bénéfices immédiats.
Nous verrons quelques pratiques de discussion qui permettent d'arriver à une meilleure compréhension et à une description du besoin. Nous verrons aussi comment des exemples concrets permettent de s'assurer d'une compréhension commune et comment ils permettent de construire un langage unique et non ambigu. Nous verrons comment rendre ces spécifications executables en réutilisant les exemples construits précédemment et en les automatisant. Ceux-ci viendront renforcer les tests d'acceptance et devenir des tests de non regressions. Enfin, nous verrons que cette démarche nous permettra d'avoir une documentation vivante et toujours à jour de notre système.
Idées pour tout de suite
Communication, Clarification par des Exemples concrets, Spécifications exécutables
The document discusses the current state of Behat and its upcoming version 3.0 release. It notes that Behat has over 468,000 installs and is used by several open source projects. Version 3.0 includes improvements like parallel test execution, actor-based context definitions using multiple context classes, simplified regular expression matching using placeholders, expanded step output formatting, and error handling customization. Continuous integration is supported via TravisCI and Scrutinizer. The full release of Behat 3.0 is targeted for April 20, 2014.
PhpSpec is a SpecBDD tool that enables you to use a TDD workflow that can transform the way you write PHP. In this session we will look at the TDD workflow and see how PhpSpec can be used to speed up your development; add regression safety, and improve your object-oriented design.
This document discusses caching in HTTP and provides examples of using HTTP caching headers like Cache-Control, Expires, ETag, and Last-Modified to improve performance. It explains how browsers, proxies, and other intermediaries can cache responses to reduce server load. Expiration headers indicate how long a response can be cached, while validation headers allow checking if content has changed to return 304 responses instead of full 200 responses when a cached response is still fresh.
The Wonderful World of Symfony ComponentsRyan Weaver
The document provides an overview of the Symfony components and how they can be used independently of Symfony frameworks. It discusses how the components like HttpFoundation, HttpKernel, EventDispatcher and Routing can be used to build a basic framework. It encourages developers to learn about these components and leverage them to build applications and share code across different PHP projects.
What should you test with your unit tests? Some people will say that unit behaviour is best tested through it's outcomes. But what if communication between units itself is more important than the results of it? This session will introduce you to two different ways of unit-testing and show you a way to assert your object behaviours through their communications.
Get Soaked - An In Depth Look At PHP StreamsDavey Shafik
The document provides an in-depth overview of PHP streams, including stream basics, input/output, filters, wrappers, transports, contexts, and examples of using streams for HTTP requests, FTP operations, and a hypothetical Twitter client. It explains how streams allow modification of data in-flight and provides built-in and custom wrappers for various protocols.
This document provides an overview of Phing, an open source build tool based on Apache Ant. Phing allows users to automate tasks like configuration, packaging, deployment, testing and more through PHP scripts. It is cross-platform and supports features like running tasks in parallel, filtering files, transforming data and extending functionality through custom tasks and extensions. The document demonstrates how to write Phing build scripts and utilize core tasks and functionality like file selection, property handling, conditionals and more.
PHP 5.5 is the latest version of PHP that includes new features like a password hashing API, generators syntax, and a finally keyword for exceptions. It also includes performance improvements and integration with the OPcache for opcode caching. Some changes in PHP 5.5 include deprecating the mysql extension and preg_replace /e modifier.
PHP generators allow functions to behave like iterators by yielding values one at a time rather than building and returning an array all at once. Generators are automatically created when the yield keyword is used in a function. They implement the Iterator interface and can be used in foreach loops. Data and control flow can be passed into generators using the send() method to influence their behavior.
The quest for global design principles (SymfonyLive Berlin 2015)Matthias Noback
If you’re a programmer you make design decisions every second. You need to think, and often think hard, about everything. Luckily there are many useful design principles and patterns that you can apply. But some of them merely expose code smells. Others only help you design your classes. And some are applicable to packages only. Wouldn’t it be nice to have some more general, always useful, invariably applicable, foundational design principles? In this talk we’ll look at software from many different perspectives, and while we’re zooming in and out, we’ll discover some of the deeper principles that form the basis of proper object-oriented design. After attending this talk you will be able to make better design decisions by reflecting on the stream of messages that is flowing from object to object, and from application to application.
1) Tips for optimizing MySQL performance include properly configuring variables like the buffer pool size, log file size, and using hardware like SSDs, RAM, and multiple CPU cores.
2) The presentation covered optimizing the database configuration, hardware, and database design.
3) Additional tips included finding and addressing bottlenecks through monitoring and testing, using technologies like NoSQL and MySQL Cluster for high volume workloads, and sharding with MySQL Fabric.
Replacing dependents with doubles is a central part of testing that every developer has to master. This talk goes over the different types of doubles and explains their place in testing, how to implement them in a mainstream mocking framework, and which strategies or doubles to use in different message exchange scenarios between objects. After this talk you will have moved a step forward in your understanding of testing in the context of object oriented programming.
Marcello reflects over the craftsmanship manifesto and its elements to uncover some interesting insights regarding the application of the underlying principles in real life projects and in the context of organisations and communities struggling to live up to the expectations it creates.
Writing infinite scalability web applications with PHP and PostgreSQLGabriele Bartolini
PostgreSQL 9.2 introduced native support for the JSON data type, as well as V8/Javascript and Coffeescript procedural languages.
Learn how you can write web applications in PHP using an intelligent and horizontally sharded cluster of PostgreSQL databases, bringing you infinite scalability and parallel processing.
This talk will guide you through the development lifecycle of the application, focusing on architecture, technologies, testing and deployment.
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Bruno Boucard
Si Michel-Ange avait été développeur quels auraient été ses secrets. Quelle était la posture de cet artiste ? Quelle place occupent nos modèles mentaux lorsque nous développons ? La notion de design émergent qui accompagne les approches test-first (TDD, BDD,…) peut rendre plus d’une personne sceptique. En effet, comment concilier nos intuitions et projections mentales avec cette approche a priori minimaliste et contre-intuitive ?
L'ABC du BDD (Behavior Driven Development)Arnauld Loyer
Une introduction au Behavior Driven Development, avec plein d'idées pour tout de suite! et applicable à tout projet. Il sera question:
* de passer de l'incompréhension à savoir qu'on ne sait pas
* des westerns spaghetti aux Three Amigos,
* de reléguer le Comment au second plan pour laisser sa place au Pourquoi!
* de rendre des spécifications exécutables
* de découvrir qu'un concombre n'est pas qu'un Cucurbitacée aux feuilles tri-lobées
* d'automatisation comme outil de non-regression
Au cours de cette session, nous expliquerons ce qu'est le BDD. Nous verrons qu'il n'est pas question d'outils ou de tests, mais de collaboration et de discussion entre les différentes parties prenantes: du métier aux développeurs en passant par les testeurs. Cette presentation s'adresse à l'ensemble de ces populations en expliquant l'importance qu'il y a à se comprendre, et qu'il n'est pas nécessaire d'avoir des outils sophistiqués pour avoir des bénéfices immédiats.
Nous verrons quelques pratiques de discussion qui permettent d'arriver à une meilleure compréhension et à une description du besoin. Nous verrons aussi comment des exemples concrets permettent de s'assurer d'une compréhension commune et comment ils permettent de construire un langage unique et non ambigu. Nous verrons comment rendre ces spécifications executables en réutilisant les exemples construits précédemment et en les automatisant. Ceux-ci viendront renforcer les tests d'acceptance et devenir des tests de non regressions. Enfin, nous verrons que cette démarche nous permettra d'avoir une documentation vivante et toujours à jour de notre système.
Idées pour tout de suite
Communication, Clarification par des Exemples concrets, Spécifications exécutables
The document discusses the current state of Behat and its upcoming version 3.0 release. It notes that Behat has over 468,000 installs and is used by several open source projects. Version 3.0 includes improvements like parallel test execution, actor-based context definitions using multiple context classes, simplified regular expression matching using placeholders, expanded step output formatting, and error handling customization. Continuous integration is supported via TravisCI and Scrutinizer. The full release of Behat 3.0 is targeted for April 20, 2014.
PhpSpec is a SpecBDD tool that enables you to use a TDD workflow that can transform the way you write PHP. In this session we will look at the TDD workflow and see how PhpSpec can be used to speed up your development; add regression safety, and improve your object-oriented design.
This document discusses caching in HTTP and provides examples of using HTTP caching headers like Cache-Control, Expires, ETag, and Last-Modified to improve performance. It explains how browsers, proxies, and other intermediaries can cache responses to reduce server load. Expiration headers indicate how long a response can be cached, while validation headers allow checking if content has changed to return 304 responses instead of full 200 responses when a cached response is still fresh.
The Wonderful World of Symfony ComponentsRyan Weaver
The document provides an overview of the Symfony components and how they can be used independently of Symfony frameworks. It discusses how the components like HttpFoundation, HttpKernel, EventDispatcher and Routing can be used to build a basic framework. It encourages developers to learn about these components and leverage them to build applications and share code across different PHP projects.
What should you test with your unit tests? Some people will say that unit behaviour is best tested through it's outcomes. But what if communication between units itself is more important than the results of it? This session will introduce you to two different ways of unit-testing and show you a way to assert your object behaviours through their communications.
UI5con 2024 - Bring Your Own Design SystemPeter Muessig
How do you combine the OpenUI5/SAPUI5 programming model with a design system that makes its controls available as Web Components? Since OpenUI5/SAPUI5 1.120, the framework supports the integration of any Web Components. This makes it possible, for example, to natively embed own Web Components of your design system which are created with Stencil. The integration embeds the Web Components in a way that they can be used naturally in XMLViews, like with standard UI5 controls, and can be bound with data binding. Learn how you can also make use of the Web Components base class in OpenUI5/SAPUI5 to also integrate your Web Components and get inspired by the solution to generate a custom UI5 library providing the Web Components control wrappers for the native ones.
Top 9 Trends in Cybersecurity for 2024.pptxdevvsandy
Security and risk management (SRM) leaders face disruptions on technological, organizational, and human fronts. Preparation and pragmatic execution are key for dealing with these disruptions and providing the right cybersecurity program.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
Mobile app Development Services | Drona InfotechDrona Infotech
Drona Infotech is one of the Best Mobile App Development Company In Noida Maintenance and ongoing support. mobile app development Services can help you maintain and support your app after it has been launched. This includes fixing bugs, adding new features, and keeping your app up-to-date with the latest
Visit Us For :
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
How Can Hiring A Mobile App Development Company Help Your Business Grow?ToXSL Technologies
ToXSL Technologies is an award-winning Mobile App Development Company in Dubai that helps businesses reshape their digital possibilities with custom app services. As a top app development company in Dubai, we offer highly engaging iOS & Android app solutions. https://rb.gy/necdnt
15. TERMINOLOGY
Event: a fact, something that happened, a message, a
datastructure
Stream: a sequence of events, partitioned by something
Event store: a collection of streams (simplified)
Disclaimer: not authoritive, just my take
21. TERMINOLOGY
ProjectionHandler: a function that projects an event
Projection: a collection of handlers that form a unit
Projector: a function that dispatches an event or a batch
of events to the matching handler(s)
[Optional] ProjectionHandlerResolver: a function that
returns the handlers that match an event
Disclaimer: not authoritive, just my take
41. OBSERVATIONS
Not all events are useful,
Information might be missing from events,
Not all data is for viewing
Events challenge the datastructure
What about your observations?
50. RECIPE?
define message types in code (for statically typed
languages)
define and implement projection handlers for each
message type
define and implement a dispatcher to those projection
handlers
test drive in the program's main