How to: - Design a clean domain model - Model your application's use cases as application services - Connect those well-designed layers to the world outside Protecting your high quality domain model can be accomplished by applying a so-called ports & adapters or hexagonal architecture. Some of the keywords for this talk: aggregate design, domain events, application services, commands, queries and events, layered architecture, ports & adapters, hexagonal architecture.
Ember.js is a JavaScript framework for building web applications. It provides features like routing, single page application support, an MVC framework, data access through REST services, reusable components, and testing. Core concepts include routes, controllers, templates, models, and the router which drives the application. Ember uses conventions like MVC and provides tools like Ember CLI to generate code and build/test applications.
For a long time It's rather common to see the words “.NET” and “microservices” in a single sentence. Statements like “.NET is Windows only” surprise us and the only reaction is “are you really a .NET developer?”. Everyone makes microservices, runs them in Kubernetes and clouds and that all looks good. However after a closer look at the code most of that coolness disappears. After some zooming microservices become micro monoliths. Practices and approaches put into the heads of young developers by dotnet veterans (who remember stuff like Remoting or COM / DCOM) don’t give up. The result is monstrous overcomplicated (micro)services that don’t necessarily work fine. For some reason, the area of speed and resilience very often is uncovered. During this session Serhii will show typical errors making services vulnerable to unexpected conditions. We will break services then fix them, slow down, speed up, stabilise and so on. Visit this session – its going to be fun. And maybe you’ll recognize your own services among our examples and will fix them proving that .NET can be used to build fast and recilillent solutions.
The document summarizes the development of a new parser tool called the FlexConnector Wizard that improves upon existing logfile parsing methods. It provides an easy to use interface for users to parse logfiles into a Common Event Format readable by ArcSight software. The tool allows users to save and reuse parsing rules, offers a more intuitive layout than existing regex-based tools, and includes features like token filtering testing and import/export functionality. The document also outlines the developer's contributions, including token filtering logic and base regex tokenization, and explains some key terminology used in logfile parsing.
Reactive programming is quite a popular topic these days. For a long time, reactive programming was constrained to interactive user interface designs. With the advancement of hardware (multi-core CPU’s) and the internet, the scale, complexity, and responsiveness of software began to rise which led to reactive programming being regarded as a major programming paradigm. Read more from here: https://blog.lftechnology.com/introduction-to-reactive-programming-part-1-5b7c63685586 By: Subash Poudel (Software Engineer @ Leapfrog Technology, Inc.)
Reaktor is a Finnish company that provides mobile development services. They developed a single page application using React for the mobile site of a large Finnish retailer to improve performance. React allows rendering content on both the server and client sides, avoiding challenges of traditional progressive enhancement approaches. By sharing component code and state between server and client, React ensures synchronization and avoids bugs while reducing testing needs. Initial load and search engine indexing are also improved with this approach.
This document discusses several enterprise design patterns including transaction patterns, concurrency patterns, and distributed architecture patterns. It provides details on ACID principles for transactions and concurrency patterns including Active Object, Half-Sync/Half-Async, Leader/Followers, and Thread-Specific Storage. The Active Object pattern decouples method execution from invocation using a proxy, client, and servant. The Half-Sync/Half-Async pattern uses asynchronous and synchronous layers with a queue. Leader/Followers uses a thread pool to share event sources. Thread-Specific Storage allows thread-local objects without locking overhead.
The document provides guidance on writing high-quality code and functions. It recommends that functions should have a single well-described purpose, use meaningful naming conventions, limit their size and number of parameters, and handle errors. It also emphasizes the importance of testing code through test cases to ensure it works as intended.
A summary of Reactive topics. Mostly based on whitepaper: "Reactive Programming versus Reactive Systems Landing on a set of simple Reactive design principles in a sea of constant confusion and overloaded expectations". (By Jonas Bonér and Viktor Klang, Lightbend Inc)
The document discusses application architecture and describes layers, ports and adapters, and different types of testing. It explains that layered architecture helps define dependency rules and placement of components. Layers should only depend on deeper layers according to the dependency inversion principle. Ports define interfaces that external entities interact with, while adapters translate between ports and infrastructure. The document also outlines unit, integration, acceptance, and system tests and how to balance testing at different levels.
This document discusses Symfony2 and REST APIs. It provides an overview of REST including its history and core concepts like requests, responses, and URLs to identify resources. It also discusses best practices for building REST APIs with Symfony2, including using a wrapper class, error handling guidelines, and documentation/monitoring goals.
The Active Object pattern decouples method execution from method invocation by allowing objects to reside in their own threads of control. A proxy handles method invocations from clients and dispatches method requests to a scheduler. The scheduler then handles executing the methods on a servant object asynchronously based on guards and an activation list. Clients can retrieve results asynchronously through futures associated with each method request. This pattern is commonly used in distributed and multi-threaded systems to simplify synchronized access to objects.
Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure
Reactive programming has been touted as one of the most important new programming paradigms in recent history. The idea of designing software as asynchronous streams of data is compelling, as evidenced by the growing popularity of reactive programming and the frameworks based on it. In this session we’ll explore what it is, where it came from, and look at its implementation in the Reactive Extensions API.
This document discusses various software architectural patterns. It begins by defining architectural patterns as general and reusable solutions to common software architecture problems within a given context. It then outlines 10 common patterns: layered, client-server, master-slave, pipe-filter, broker, peer-to-peer, event-bus, model-view-controller, blackboard, and interpreter. For each pattern, it briefly describes the pattern and provides examples of its usage. The document aims to provide a quick understanding of architectural patterns.
CouchDB is a document-oriented database that is built for the web, open source, and written in Erlang. It has no schema, uses HTTP as its protocol, supports eventual consistency through multiversion concurrency control, and models transactions through documents. CouchDB is designed for crash-only recovery, allows for automated replication between distributed nodes, and enables long-polling queries through requests that can remain open indefinitely.
In this talk, you will discover how the 15k LOC codebase was implemented with spec so you don't have to (but probably should). Validation; testing; destructuring; composable “data macros” via conformers; we’ve tried spec in all its multifaceted glory. You will discover a distillation of lessons learned interspersed with musing on how spec alters development flow and one’s thinking.
We instrumented 15k LOC codebase with spec so you don't have to (but probably should). Validation; testing; destructuring; composable "data macros" via conformers; we've tried spec in all its multifaceted glory. This talk is a distillation of lessons learned interspersed with musing on how spec alters development flow and one's thinking. Presented at EuroClojure 2016
This document provides an overview of the MEAN stack and demonstrates how to build a sample application with it. It begins with defining each component of the MEAN stack: MongoDB as the database, Express as the web application framework, AngularJS for the frontend framework, and Node.js as the runtime environment. It then demonstrates setting up a basic Express app, integrating authentication with Passport, and interacting with MongoDB using Mongoose. The document also discusses key concepts like asynchronous I/O in Node.js and model-view-controller patterns in AngularJS. Overall, it serves as a high-level introduction to the technologies that make up the MEAN stack.
A quick presentation about ReactJS and its benefits - with some discussion of the Flux pattern/architecture at the end. Follow me: https://twitter.com/marcacyr https://github.com/marcacyr
Presented at NDC Sydney, August 2016 Thanks to organisations like Netflix, and the need to develop solutions that scale well in the cloud, microservices have become the hot new topic. Yet, for all the talk, there are few practical examples of how you actually build a microservice in .NET. It's time to fix that little oversight as we show you how you can build a microservices based solution using .NET, and a number of open source tools (EventStore, RabbitMq and Redis to name a few). You'll also get to understand the pros and cons of a microservices solution and consider how a microservices approach might impact how you and your team relate to your customers.
Stateful apps are considered hard and unpractical. The truth is the opposite! With the correct technology, you can develop a thick client SPA with state entirely controlled on the server. Forget writing countless lines of glue code and the callback hell. Welcome to the DRY world of JSON-Patch and PuppetJS!
Microservices architecture is a very powerful way to build scalable systems optimized for speed of change. To do this, we need to build independent, autonomous services which by definition tend to minimize dependencies on other systems. One of the tenants of microservices, and a way to minimize dependencies, is “a service should own its own database”. Unfortunately this is a lot easier said than done. Why? Because: your data. We’ve been dealing with data in information systems for 5 decades so isn’t this a solved problem? Yes and no. A lot of the lessons learned are still very relevant. Traditionally, we application developers have accepted the practice of using relational databases and relying on all of their safety guarantees without question. But as we build services architectures that span more than one database (by design, as with microservices), things get harder. If data about a customer changes in one database, how do we reconcile that with other databases (especially where the data storage may be heterogenous?). For developers focused on the traditional enterprise, not only do we have to try to build fast-changing systems that are surrounded by legacy systems, the domains (finance, insurance, retail, etc) are incredibly complicated. Just copying with Netflix does for microservices may or may not be useful. So how do we develop and reason about the boundaries in our system to reduce complexity in the domain? In this talk, we’ll explore these problems and see how Domain Driven Design helps grapple with the domain complexity. We’ll see how DDD concepts like Entities and Aggregates help reason about boundaries based on use cases and how transactions are affected. Once we can identify our transactional boundaries we can more carefully adjust our needs from the CAP theorem to scale out and achieve truly autonomous systems with strictly ordered eventual consistency. We’ll see how technologies like Apache Kafka, Apache Camel and Debezium.io can help build the backbone for these types of systems. We’ll even explore the details of a working example that brings all of this together.
The document provides an overview of the Meteor platform for building web applications. It discusses that Meteor uses JavaScript on the client, server and database, promotes reactivity through its data publication and subscription system, and aims to provide a simple yet powerful platform for building "next-gen" web apps. Advanced topics like application structure, reactivity, and deployment are also covered at a high-level.
This document provides steps to create a SOAP web service API that acts as an abstraction layer for a database. It describes configuring a Mule application with a CXF component using a WSDL, adding a database connector to query data, and transforming the response to the SOAP message format. The API decouples front-end applications from changes in the backend database.
This document summarizes a presentation about Finagle, Twitter's microservices technology stack. It discusses how Finagle addresses challenges with microservices like service discovery, load balancing, and request tracing across services. It presents Finagle's core abstractions like Futures, Services, and Filters. Services represent both clients and servers, and Filters can add functionality like retries and timeouts. The document also mentions Twitter Server, a framework for building Finagle-based servers that handles flags, logging, metrics and admin interfaces. Finally, it briefly introduces Finatra, which builds on Finagle and Twitter Server and adds features like dependency injection and routing.
This document provides an overview of topics that will be covered at a Microsoft Dev Camp in 2015. The topics include introductions to ASP.NET, Visual Studio web tools, ASP.NET Web API, building real-time web applications with SignalR, and Azure services. Sessions will cover web front-end development, ASP.NET updates, consuming and building Web APIs, and real-world scenarios for scaling, updating, and deploying applications on Azure.
ASP.NET MVC is a framework that allows developers to apply the MVC pattern to ASP.NET applications. This separates the application into three components - the Model, View, and Controller. The Controller handles requests and interacts with the Model, which contains business logic. The View displays the user interface and data from the Model. This separation of concerns allows for better reusability and easier testing compared to the standard ASP.NET web forms model.
Angular provides a framework for building client-side web applications. It enhances HTML with directives, data binding, and dependency injection to allow web applications to be developed with MVC architecture. The key concepts of Angular include directives, modules, scopes, and data binding which allow building dynamic views that update automatically based on changes to the underlying model/data.
This document summarizes a presentation about building a structured streaming connector for continuous applications using Azure Event Hubs as the streaming data source. It discusses key design considerations like representing offsets, implementing the getOffset and getBatch methods required by structured streaming sources, and challenges with testing asynchronous behavior. It also outlines issues contributed back to the Apache Spark community around streaming checkpoints and recovery.
My presentation from the Ruby Hoedown on cloud computing and how Ruby developers can take advantage of cloud services to build scalable web applications.
Meteor is an open-source platform for building mobile and web applications using JavaScript. It uses a reactive programming model and Distributed Data Protocol (DDP) for real-time data synchronization between client and server. Key features include live data updates, shared code between client and server, and latency compensation through local caching of data on the client. Meteor provides a full-stack solution with support for front-end templating, routing, and transparent reactivity as well as backend services through integration with MongoDB.
This document summarizes new features in .NET Framework 4.5, including improvements to WeakReferences, streams, ReadOnlyDictionary, compression, and large objects. It describes enhancements to server GC, asynchronous programming, the Task Parallel Library, ASP.NET, Entity Framework, WCF, WPF, and more. The .NET 4.5 update focuses on performance improvements, support for asynchronous code and parallel operations, and enabling modern app development patterns.
1. The document discusses various optimizations that can be made to an ASP.NET MVC application to improve performance, including compiled LINQ queries, URL caching, and data caching. 2. Benchmark results show that optimizing partial view rendering, LINQ queries, and URL generation improved performance from 8 requests/second to 61.5 requests/second. Additional caching of URLs, statistics, and content improved performance to over 400 requests/second. 3. Turning off ASP.NET debug mode also provided a significant performance boost, showing the importance of running production sites in release mode.
The document discusses the MVC architecture pattern and how it is commonly implemented using Java technologies like Servlets, JSPs, and frameworks like Struts. It describes the core components of MVC - the Model, View, and Controller layers. The Model contains the business logic and data access code. The View is responsible for presentation and user interface. The Controller accepts user input and interfaces with the Model to handle requests. Frameworks like Struts provide libraries and utilities to simplify building applications using the MVC pattern.
How do Microservices and Trading Systems overlap? How can one area learn from the other? How can we test components of microservices? Is there a library which helps us implement and test these services?
Slides from my presentation about Shopzilla's concurrency strategies to the Pasadena Java User's Group on April 26, 2010. This is essentially the same material as covered by my colleague Rodney Barlow in an earlier presentation http://www.slideshare.net/rodneypbarlow/shopzilla-on-concurrency, with a few minor tweaks.
Struts is an open-source MVC framework that makes it easier to develop Java web applications by providing common functionality out of the box. While the Model 2 pattern provides a basic structure, frameworks like Struts standardize development and provide features like validation, tag libraries, and simplified configuration. For large applications, frameworks save development time compared to manually implementing common functionality in each application. Struts uses the Model 2 pattern with interceptors, actions, and results to simplify request processing and forwarding.
This document summarizes a fireside chat about the Rector tool for refactoring PHP code. It introduces Rector as a PHP command line tool that can understand code, improve entire codebases at once, and be fine-tuned or extended for specific needs. Rector can help with continuous improvement, code coaching, and the future of refactoring PHP applications without creating technical debt from migrations. The chat then transitions to a demo by Tomas and discusses a book about how to use and extend Rector.
Of course, you should read all you can about SOLID, Design patterns, Patterns of Enterprise Application Architecture, etc. Once you have a basic understanding of these topics you still have to write that code though, and write it well too! What is good code? Are there some guidelines, or rules of thumb, which you can follow while making your everyday coding decisions? In this talk I’ll cover many of these coding guidelines, which aren’t usually covered by patterns or principles books. They should help you write better code and give you a richer vocabulary for reviewing other people’s code. Some of the subjects that we’ll discuss are: state, mutability, CQS, one-method objects, domain-first, API-driven, functional programming influences, object boundaries, (de)serialization, and many more!
Of course, you should read all you can about SOLID, Design patterns, Patterns of Enterprise Application Architecture, etc. Once you have a basic understanding of these topics you still have to write that code though, and write it well too! What is good code? Are there some guidelines, or rules of thumb, which you can follow while making your everyday coding decisions? In this talk Matthias will cover many of these coding guidelines, which aren’t usually covered by patterns or principles books. They should help you write better code and give you a richer vocabulary for reviewing other people’s code. Some of the subjects that we’ll discuss are: state, mutability, CQS, one-method objects, domain-first, API-driven, functional programming influences, object boundaries, (de)serialization, and more!
Working effectively with legacy code isn’t all about creating test harnesses before refactoring algorithms. The “safety first” strategy doesn’t always apply. Not if the code you’re looking at is LYING IN YOUR FACE anyway. In this talk I’ll show you what brutal refactoring is. I’ll show you the red glowy eyes of the Churn. And I’ll hold up some big warning signs that should prevent you from producing legacy code today. Table flips allowed.
The document discusses object-oriented design principles and patterns. It covers design patterns like abstract factory, mediator, proxy, builder, and others. It also discusses design principles like SOLID principles, package design principles, and tactical domain-driven design patterns. It emphasizes that while knowing patterns and principles is important, the key is applying them correctly. It provides guidance on writing good object-oriented code by focusing on object cohesion, encapsulation, defensive programming, and using composition over inheritance.
The much hyped "Microservice Architecture" tells us to design our services to be autonomous. Let's find out what this means and how we can achieve it. In this talk I will guide you through the fascinating world of asynchronous communication, event-driven systems and distributed data.
Docker allows for isolation of applications into lightweight containers that can be linked together and share resources. Containers are run from images that act as templates containing the files, configuration, and dependencies for an application. Images are built from Dockerfiles that define the build process and layers, and can be pulled from or pushed to a registry for distribution. Docker uses a client-server model with daemons managing containers on each host.
This document introduces Docker Swarm and its key features. It discusses running Docker daemons in Swarm mode to create a cluster, using tools like docker-machine to provision nodes. It explains how Swarm provides service discovery, load balancing and networking between nodes. The document also covers best practices for building Docker images like using official base images and optimizing layers.