The document discusses domain modeling approaches in a post-object-oriented world. It outlines issues with traditional OO domain modeling and proposes an alternative approach. This involves:
1. Describing a limited set of domain objects and relationships as an "algebra" rather than a universal ontology.
2. Using existential equality where identity is defined by attributes rather than identity.
3. Building a simple domain model for a toy billing system to demonstrate the approach.
4. Discussing how the domain model can be implemented and improved, including handling errors, deaggregating components, and using internal domain-specific languages.
This document discusses using Ruby for big data applications. It provides an overview of Cassandra for NoSQL storage, Hadoop for batch processing, Solr for indexing, and Storm for real-time processing. It then demonstrates using Ruby to interact with these systems through REST APIs and Java interoperability. Advanced topics discussed include integrating these technologies with Rails applications and combining real-time and batch processing.
This document discusses incorporating probabilistic retrieval knowledge into TFIDF-based search engines. It provides an overview of different retrieval models such as Boolean, vector space, probabilistic, and language models. It then describes using a probabilistic model that estimates the probability of a document being relevant or non-relevant given its terms. This model can be combined with the BM25 ranking algorithm. The document proposes applying probabilistic knowledge to different document fields during ranking to improve relevance.
This document discusses storing and manipulating graphs in HBase. It provides an overview of graph theory concepts and different modeling techniques for storing graphs in HBase, including the adjacency matrix and adjacency list approaches. It also covers techniques for distributed traversal and querying of graphs stored in HBase using MapReduce jobs. Key tips discussed include implementing custom comparators and using utilities like MultiScanTableInputFormat and TableMapReduceUtil.
PyData Amsterdam - Name Matching at ScaleGoDataDriven
Wendell Kuling works as a Data Scientist at ING in the Wholesale Banking Advanced Analytics team. Their projects aim to provide better services to corporate customers of ING, by using innovative techniques from data-science. In this talk, Wendell covers key insights from their experience in matching large datasets based on names. After covering the key algorithms and packages ING uses for name matching, Wendell will share his best-practice approach in applying these algorithms at scale… would you bet on a Cruncher (48-CPU/512 MB RAM machine), a Tesla (Cuda Tesla K80 with 4992 cores, 24GB memory) or a Spark cluster (80 cores/2,5 TB memory)?
Probabilistic information retrieval models & systemsSelman Bozkır
The document discusses probabilistic information retrieval and Bayesian approaches. It introduces concepts like conditional probability, Bayes' theorem, and the probability ranking principle. It explains how probabilistic models estimate the probability of relevance between a document and query by representing them as term sets and making probabilistic assumptions. The goal is to rank documents by the probability of relevance to present the most likely relevant documents first.
scala-gopher: async implementation of CSP for scalaRuslan Shevchenko
This document describes scala-gopher, a Scala library that implements Communicating Sequential Processes (CSP) concepts like Go channels. It allows asynchronous programming using constructs like select.forever that handle input/output between channels. The library builds on Akka and SIP 22 for asynchrony. It includes channels, transputers that connect via ports, and replication capabilities for running processes in parallel. The goal is to provide CSP functionality within the Scala ecosystem as a complementary approach to streams and actors.
This document discusses using Ruby for big data applications. It provides an overview of Cassandra for NoSQL storage, Hadoop for batch processing, Solr for indexing, and Storm for real-time processing. It then demonstrates using Ruby to interact with these systems through REST APIs and Java interoperability. Advanced topics discussed include integrating these technologies with Rails applications and combining real-time and batch processing.
This document discusses incorporating probabilistic retrieval knowledge into TFIDF-based search engines. It provides an overview of different retrieval models such as Boolean, vector space, probabilistic, and language models. It then describes using a probabilistic model that estimates the probability of a document being relevant or non-relevant given its terms. This model can be combined with the BM25 ranking algorithm. The document proposes applying probabilistic knowledge to different document fields during ranking to improve relevance.
This document discusses storing and manipulating graphs in HBase. It provides an overview of graph theory concepts and different modeling techniques for storing graphs in HBase, including the adjacency matrix and adjacency list approaches. It also covers techniques for distributed traversal and querying of graphs stored in HBase using MapReduce jobs. Key tips discussed include implementing custom comparators and using utilities like MultiScanTableInputFormat and TableMapReduceUtil.
PyData Amsterdam - Name Matching at ScaleGoDataDriven
Wendell Kuling works as a Data Scientist at ING in the Wholesale Banking Advanced Analytics team. Their projects aim to provide better services to corporate customers of ING, by using innovative techniques from data-science. In this talk, Wendell covers key insights from their experience in matching large datasets based on names. After covering the key algorithms and packages ING uses for name matching, Wendell will share his best-practice approach in applying these algorithms at scale… would you bet on a Cruncher (48-CPU/512 MB RAM machine), a Tesla (Cuda Tesla K80 with 4992 cores, 24GB memory) or a Spark cluster (80 cores/2,5 TB memory)?
Probabilistic information retrieval models & systemsSelman Bozkır
The document discusses probabilistic information retrieval and Bayesian approaches. It introduces concepts like conditional probability, Bayes' theorem, and the probability ranking principle. It explains how probabilistic models estimate the probability of relevance between a document and query by representing them as term sets and making probabilistic assumptions. The goal is to rank documents by the probability of relevance to present the most likely relevant documents first.
scala-gopher: async implementation of CSP for scalaRuslan Shevchenko
This document describes scala-gopher, a Scala library that implements Communicating Sequential Processes (CSP) concepts like Go channels. It allows asynchronous programming using constructs like select.forever that handle input/output between channels. The library builds on Akka and SIP 22 for asynchrony. It includes channels, transputers that connect via ports, and replication capabilities for running processes in parallel. The goal is to provide CSP functionality within the Scala ecosystem as a complementary approach to streams and actors.
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан...Fwdays
The document discusses domain modeling approaches in a post-object-oriented world. It describes modeling domains using immutable data objects and domain services rather than traditional object-oriented classes. Domain objects represent entities without behavior, while domain services encapsulate functionality without data. This approach uses composition over inheritance and aims to describe limited relationships rather than a universal ontology. It provides examples modeling a small billing domain in this way, including use of a DSL to fluently describe tariff plans.
The document discusses Visual Basic 2010 and object-oriented programming concepts. It covers the system development cycle, programming languages, object-oriented principles like encapsulation, inheritance and polymorphism. It also discusses programming concepts like classes and objects, events and actions, integrated development environments, and tools like buttons, checkboxes and listboxes. The document provides instructions on installing VB 2010 Express and creating basic programs to learn Visual Basic.
Programming Languages: some news for the last N yearsRuslan Shevchenko
This document discusses programming languages and their evolution. It covers topics like syntax, type systems, dependent types, and effects tracking. It suggests that while new academic ideas in programming languages take over a decade on average to see wider adoption, trends in industry include integrating other paradigms into mainstream languages and replacing C++ with alternatives like D or Rust. The document also questions what new academic or open source ideas may become part of industry programming in the future.
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced FeaturesAndrew Liu
Let's talk about how you can get the most out of Azure DocumentDB. In this session we will dive deep into the mechanics of DocumentDB and explain the various levers available to tune performance and scale. From partitioned collections to global databases to advanced indexing and query features - this session will equip you with the best practices and nuggets of information that will become invaluable tools in your toolbox for building blazingly fast large-scale applications.
Speaker:Drew DiPalma
Learn more about MongoDB Stitch, our new Backend as a Service (BaaS) that makes it easy for developers to create and launch applications across mobile and web platforms. Stitch provides a REST API on top of MongoDB with read, write, and validation rules built-in and full integration with the services you love. This talk will cover the what, why, and how of MongoDB Stitch. We'll discuss everything from features to the architecture. You'll walk away knowing how Stitch can kickstart your new project or take your existing application to the next level.
The document discusses emerging trends in software and services including:
1) Software as a Service and cloud computing which allows software to be delivered and consumed "as a service" with service level agreements.
2) The growth of massive data centers which are becoming large physical assets requiring significant capital expenditures.
3) The rise of "Dev-signers" or designer-developers who are combining development and design skills.
4) The integration of software and services will be key as local software interacts with internet services to provide combined capabilities.
Strata Software Architecture NY: The Data DichotomyBen Stopford
Ben Stopford is an engineer and architect working on the Apache Kafka Core Team at Confluent (the company behind Apache Kafka). A specialist in data, both from a technology and an organizational perspective, Ben previously spent five years leading data integration at a large investment bank, using a central streaming database. His earlier career spanned a variety of projects at Thoughtworks and UK-based enterprise companies. He writes at Benstopford.com.
Kafka Summit NYC 2017 - The Data Dichotomy: Rethinking Data and Services with...confluent
The document discusses rethinking data and services using streams. It argues that microservices are about independence but this comes at a cost of data divergence. It proposes using streams as a shared data backbone, with immutable event streams providing a central narrative. This allows services to remain independent while accessing shared data, and for data to be sliced and diced within each service boundary using stream processing. It concludes that embracing shared streaming data can balance the "data dichotomy" between exposing data in databases and hiding it within services.
Big Data Day LA 2016/ Data Science Track - Enabling Cross-Screen Advertising ...Data Con LA
With content now viewed seamlessly across multiple screens, this shift in consumer behavior/consumption has come to a head with the way advertising is sold - separately in TV and online silos - creating an opportunity to make advertising more effective using data and machine learning. This talk explores technological developments at VideoAmp that bring together data from disparate mediums and creates cross-screen audience models using ML methods for cross-screen bid optimization, and graph based audience models for 150 Million users, across over a billion unique device IDs, as well as behavioral insights gleaned from observing such a large variety of data.
Dubbo and Weidian's practice on micro-service architectureHuxing Zhang
Weidian is a mobile app that helps sellers open shops. It has gone through several architectural stages: monolithic, multi-module, and microservices using Dubbo. Challenges in the microservices stage included module splitting, automated deployment, call tracing, monitoring and alarms, flow control, and high availability during data center migration. Solutions involved domain-driven design, DevOps practices like Docker and configuration management, and modifying Dubbo components. Future plans include contributing back to the Dubbo community, supporting multiple languages through agents, and exploring reactive and functional programming approaches.
Scaling DDS to Millions of Computers and DevicesRick Warren
I gave this presentation at an Object Management Group (OMG) workshop in Arlington, VA in March, 2010. It describes some of the concerns that will impact DDS as it is scaled to very large, geographically distributed systems. It also describes possible ways these challenges can be addressed.
Reactive Stream Processing Using DDS and RxSumant Tambe
In this presentation you will see why Reactive Extensions (Rx) is a powerful technology for asynchronous stream processing. RTI Data Distribution Service (DDS) will be used as the source of data and as a communication channel for asynchronous data streams. On top of DDS, we'll use Rx to subscribe, observe, project, filter, aggregate, merge, zip, and correlate one or more data streams (Observables). The live demo will be very visual as bouncing shapes of different colors will be transformed in front of you using C# lambdas, Rx.NET, and Visual Studio. You will also learn about the new Rx4DDS.NET library that integrates RTI DDS with Rx.NET. Rx and DDS are a great match because both are reactive. Rx is based on the subject-observer pattern, which is quite analogous to the publish-subscribe pattern of DDS. When used together they support distributed dataflows seamlessly. If time permits, we will touch upon advanced Rx concepts such as stream of streams (IGroupedObservable) and how it captures DDS "keyed topics". The DDS applications using Rx4DDS.NET dramatically simplify concurrency to the extent that it can be simply configured.
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Flink Forward
Flink Forward San Francisco 2022.
Probably everyone who has written stateful Apache Flink applications has used one of the fault-tolerant keyed state primitives ValueState, ListState, and MapState. With RocksDB, however, retrieving and updating items comes at an increased cost that you should be aware of. Sometimes, these may not be avoidable with the current API, e.g., for efficient event-time stream-sorting or streaming joins where you need to iterate one or two buffered streams in the right order. With FLIP-220, we are introducing a new state primitive: BinarySortedMultiMapState. This new form of state offers you to (a) efficiently store lists of values for a user-provided key, and (b) iterate keyed state in a well-defined sort order. Both features can be backed efficiently by RocksDB with a 2x performance improvement over the current workarounds. This talk will go into the details of the new API and its implementation, present how to use it in your application, and talk about the process of getting it into Flink.
by
Nico Kruber
Developing Dynamic Reports for TMS Using Crystal ReportsChad Petrovay
Like many other institutions, The Morgan Library and Museum utilizes TMS to generate reports using templates prepared in Crystal Reports. But the reports and forms we desire most – loan agreements, condition reports, and exhibition checklists – need to be highly dynamic. Instead of typesetting each block of text or checkbox, the Morgan leverages Crystal Reports’ powerful capabilities to make reports flexible and easy to maintain. This presentation will dissect some of our most complicated reports to look at the underlying structures and formulae, and allow attendees to step up their Crystal Report skills.
Introducing MongoDB Stitch, Backend-as-a-Service from MongoDBMongoDB
Watch this webinar to learn about our new Backend as a Service (BaaS) – MongoDB Stitch.
MongoDB Stitch lets developers focus on building applications rather than on managing data manipulation code, service integration, or backend infrastructure. Whether you’re just starting up and want a fully managed backend as a service, or you’re part of an enterprise and want to expose existing MongoDB data to new applications, Stitch lets you focus on building the app users want, not on writing boilerplate backend logic.
This webinar will cover the what, why, and how of MongoDB Stitch. We’ll cover everything from the features it provides to the architecture that makes it possible. By the end of the session, you should understand how Stitch can kickstart your new project or take your existing application to the next level.
Attendees will learn:
- The basics of MongoDB Stitch and how to use it for new projects or to expose existing data to new applications
- How to control what data and services individual users can access
- How to integrate your favorite services with your MongoDB application without writing extra code
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMManuel Bernhardt
The document discusses the need for reactive and functional programming approaches to build scalable applications that can take advantage of many-core processors and distributed systems. It introduces key concepts like immutability, functions, and declarative programming. Specific frameworks like Scala, Play and Akka are presented as tools that support this reactive, functional style for building web applications that can horizontally scale across multiple cores and nodes. The talk promotes adopting these approaches to build systems that can better handle concurrency, distribution and failure.
The Data Dichotomy- Rethinking the Way We Treat Data and Servicesconfluent
Presenter: Ben Stopford, Engineer, Confluent
Services come with a problem: they’re not well suited to sharing data. This talk will examine the underlying dichotomy we all face as we piece such systems together. One that is not well served today. The solution lies in blending the old with the new and Apache Kafka plays a central role.
introduction to Windows Comunication Foundationredaxe12
The document discusses Windows Communication Foundation (WCF) and provides an overview of its key capabilities. WCF unifies distributed application development on Windows, allows interoperability with other platforms, and maximizes developer productivity. It brings together existing Microsoft distributed technologies and supports WS-* web services standards.
This document introduces Interaction-Driven Design (IDD) and discusses best practices for application structure and testing strategies when using this approach. It recommends starting the design process from the user interactions or actions needed, which will help define domain concepts and emerging entities. The core domain model should be separated from infrastructure implementations. Testing strategies covered include user journey tests at the application level, acceptance tests at the action level, integration tests at boundaries, and unit tests at the class level. Dependencies should be mocked or stubbed at different test levels.
This document discusses Scala 3's support for asynchronous programming using async/await. It begins with reminders about monadic effects and reactivity using effect monads. It then discusses how async/await improves on effect monads by avoiding manual coloring and reducing the number of awaits needed. The document describes how automatic coloring can be achieved using a macro. It also discusses challenges around monad interoperability and optimization of the monadic continuation passing style transformation.
More Related Content
Similar to Behind OOD: domain modelling in post-OO world.
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан...Fwdays
The document discusses domain modeling approaches in a post-object-oriented world. It describes modeling domains using immutable data objects and domain services rather than traditional object-oriented classes. Domain objects represent entities without behavior, while domain services encapsulate functionality without data. This approach uses composition over inheritance and aims to describe limited relationships rather than a universal ontology. It provides examples modeling a small billing domain in this way, including use of a DSL to fluently describe tariff plans.
The document discusses Visual Basic 2010 and object-oriented programming concepts. It covers the system development cycle, programming languages, object-oriented principles like encapsulation, inheritance and polymorphism. It also discusses programming concepts like classes and objects, events and actions, integrated development environments, and tools like buttons, checkboxes and listboxes. The document provides instructions on installing VB 2010 Express and creating basic programs to learn Visual Basic.
Programming Languages: some news for the last N yearsRuslan Shevchenko
This document discusses programming languages and their evolution. It covers topics like syntax, type systems, dependent types, and effects tracking. It suggests that while new academic ideas in programming languages take over a decade on average to see wider adoption, trends in industry include integrating other paradigms into mainstream languages and replacing C++ with alternatives like D or Rust. The document also questions what new academic or open source ideas may become part of industry programming in the future.
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced FeaturesAndrew Liu
Let's talk about how you can get the most out of Azure DocumentDB. In this session we will dive deep into the mechanics of DocumentDB and explain the various levers available to tune performance and scale. From partitioned collections to global databases to advanced indexing and query features - this session will equip you with the best practices and nuggets of information that will become invaluable tools in your toolbox for building blazingly fast large-scale applications.
Speaker:Drew DiPalma
Learn more about MongoDB Stitch, our new Backend as a Service (BaaS) that makes it easy for developers to create and launch applications across mobile and web platforms. Stitch provides a REST API on top of MongoDB with read, write, and validation rules built-in and full integration with the services you love. This talk will cover the what, why, and how of MongoDB Stitch. We'll discuss everything from features to the architecture. You'll walk away knowing how Stitch can kickstart your new project or take your existing application to the next level.
The document discusses emerging trends in software and services including:
1) Software as a Service and cloud computing which allows software to be delivered and consumed "as a service" with service level agreements.
2) The growth of massive data centers which are becoming large physical assets requiring significant capital expenditures.
3) The rise of "Dev-signers" or designer-developers who are combining development and design skills.
4) The integration of software and services will be key as local software interacts with internet services to provide combined capabilities.
Strata Software Architecture NY: The Data DichotomyBen Stopford
Ben Stopford is an engineer and architect working on the Apache Kafka Core Team at Confluent (the company behind Apache Kafka). A specialist in data, both from a technology and an organizational perspective, Ben previously spent five years leading data integration at a large investment bank, using a central streaming database. His earlier career spanned a variety of projects at Thoughtworks and UK-based enterprise companies. He writes at Benstopford.com.
Kafka Summit NYC 2017 - The Data Dichotomy: Rethinking Data and Services with...confluent
The document discusses rethinking data and services using streams. It argues that microservices are about independence but this comes at a cost of data divergence. It proposes using streams as a shared data backbone, with immutable event streams providing a central narrative. This allows services to remain independent while accessing shared data, and for data to be sliced and diced within each service boundary using stream processing. It concludes that embracing shared streaming data can balance the "data dichotomy" between exposing data in databases and hiding it within services.
Big Data Day LA 2016/ Data Science Track - Enabling Cross-Screen Advertising ...Data Con LA
With content now viewed seamlessly across multiple screens, this shift in consumer behavior/consumption has come to a head with the way advertising is sold - separately in TV and online silos - creating an opportunity to make advertising more effective using data and machine learning. This talk explores technological developments at VideoAmp that bring together data from disparate mediums and creates cross-screen audience models using ML methods for cross-screen bid optimization, and graph based audience models for 150 Million users, across over a billion unique device IDs, as well as behavioral insights gleaned from observing such a large variety of data.
Dubbo and Weidian's practice on micro-service architectureHuxing Zhang
Weidian is a mobile app that helps sellers open shops. It has gone through several architectural stages: monolithic, multi-module, and microservices using Dubbo. Challenges in the microservices stage included module splitting, automated deployment, call tracing, monitoring and alarms, flow control, and high availability during data center migration. Solutions involved domain-driven design, DevOps practices like Docker and configuration management, and modifying Dubbo components. Future plans include contributing back to the Dubbo community, supporting multiple languages through agents, and exploring reactive and functional programming approaches.
Scaling DDS to Millions of Computers and DevicesRick Warren
I gave this presentation at an Object Management Group (OMG) workshop in Arlington, VA in March, 2010. It describes some of the concerns that will impact DDS as it is scaled to very large, geographically distributed systems. It also describes possible ways these challenges can be addressed.
Reactive Stream Processing Using DDS and RxSumant Tambe
In this presentation you will see why Reactive Extensions (Rx) is a powerful technology for asynchronous stream processing. RTI Data Distribution Service (DDS) will be used as the source of data and as a communication channel for asynchronous data streams. On top of DDS, we'll use Rx to subscribe, observe, project, filter, aggregate, merge, zip, and correlate one or more data streams (Observables). The live demo will be very visual as bouncing shapes of different colors will be transformed in front of you using C# lambdas, Rx.NET, and Visual Studio. You will also learn about the new Rx4DDS.NET library that integrates RTI DDS with Rx.NET. Rx and DDS are a great match because both are reactive. Rx is based on the subject-observer pattern, which is quite analogous to the publish-subscribe pattern of DDS. When used together they support distributed dataflows seamlessly. If time permits, we will touch upon advanced Rx concepts such as stream of streams (IGroupedObservable) and how it captures DDS "keyed topics". The DDS applications using Rx4DDS.NET dramatically simplify concurrency to the extent that it can be simply configured.
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Flink Forward
Flink Forward San Francisco 2022.
Probably everyone who has written stateful Apache Flink applications has used one of the fault-tolerant keyed state primitives ValueState, ListState, and MapState. With RocksDB, however, retrieving and updating items comes at an increased cost that you should be aware of. Sometimes, these may not be avoidable with the current API, e.g., for efficient event-time stream-sorting or streaming joins where you need to iterate one or two buffered streams in the right order. With FLIP-220, we are introducing a new state primitive: BinarySortedMultiMapState. This new form of state offers you to (a) efficiently store lists of values for a user-provided key, and (b) iterate keyed state in a well-defined sort order. Both features can be backed efficiently by RocksDB with a 2x performance improvement over the current workarounds. This talk will go into the details of the new API and its implementation, present how to use it in your application, and talk about the process of getting it into Flink.
by
Nico Kruber
Developing Dynamic Reports for TMS Using Crystal ReportsChad Petrovay
Like many other institutions, The Morgan Library and Museum utilizes TMS to generate reports using templates prepared in Crystal Reports. But the reports and forms we desire most – loan agreements, condition reports, and exhibition checklists – need to be highly dynamic. Instead of typesetting each block of text or checkbox, the Morgan leverages Crystal Reports’ powerful capabilities to make reports flexible and easy to maintain. This presentation will dissect some of our most complicated reports to look at the underlying structures and formulae, and allow attendees to step up their Crystal Report skills.
Introducing MongoDB Stitch, Backend-as-a-Service from MongoDBMongoDB
Watch this webinar to learn about our new Backend as a Service (BaaS) – MongoDB Stitch.
MongoDB Stitch lets developers focus on building applications rather than on managing data manipulation code, service integration, or backend infrastructure. Whether you’re just starting up and want a fully managed backend as a service, or you’re part of an enterprise and want to expose existing MongoDB data to new applications, Stitch lets you focus on building the app users want, not on writing boilerplate backend logic.
This webinar will cover the what, why, and how of MongoDB Stitch. We’ll cover everything from the features it provides to the architecture that makes it possible. By the end of the session, you should understand how Stitch can kickstart your new project or take your existing application to the next level.
Attendees will learn:
- The basics of MongoDB Stitch and how to use it for new projects or to expose existing data to new applications
- How to control what data and services individual users can access
- How to integrate your favorite services with your MongoDB application without writing extra code
Voxxed Days Vienna - The Why and How of Reactive Web-Applications on the JVMManuel Bernhardt
The document discusses the need for reactive and functional programming approaches to build scalable applications that can take advantage of many-core processors and distributed systems. It introduces key concepts like immutability, functions, and declarative programming. Specific frameworks like Scala, Play and Akka are presented as tools that support this reactive, functional style for building web applications that can horizontally scale across multiple cores and nodes. The talk promotes adopting these approaches to build systems that can better handle concurrency, distribution and failure.
The Data Dichotomy- Rethinking the Way We Treat Data and Servicesconfluent
Presenter: Ben Stopford, Engineer, Confluent
Services come with a problem: they’re not well suited to sharing data. This talk will examine the underlying dichotomy we all face as we piece such systems together. One that is not well served today. The solution lies in blending the old with the new and Apache Kafka plays a central role.
introduction to Windows Comunication Foundationredaxe12
The document discusses Windows Communication Foundation (WCF) and provides an overview of its key capabilities. WCF unifies distributed application development on Windows, allows interoperability with other platforms, and maximizes developer productivity. It brings together existing Microsoft distributed technologies and supports WS-* web services standards.
This document introduces Interaction-Driven Design (IDD) and discusses best practices for application structure and testing strategies when using this approach. It recommends starting the design process from the user interactions or actions needed, which will help define domain concepts and emerging entities. The core domain model should be separated from infrastructure implementations. Testing strategies covered include user journey tests at the application level, acceptance tests at the action level, integration tests at boundaries, and unit tests at the class level. Dependencies should be mocked or stubbed at different test levels.
Similar to Behind OOD: domain modelling in post-OO world. (20)
This document discusses Scala 3's support for asynchronous programming using async/await. It begins with reminders about monadic effects and reactivity using effect monads. It then discusses how async/await improves on effect monads by avoiding manual coloring and reducing the number of awaits needed. The document describes how automatic coloring can be achieved using a macro. It also discusses challenges around monad interoperability and optimization of the monadic continuation passing style transformation.
This document discusses behavior modeling using behavior algebra and Akka actors. It provides an example of modeling a coffee machine as a behavior using behavior algebra equations and then implementing it in Scala with Akka actors. Key points covered include:
- Defining behaviors as labeled transition systems (LTS) with states, actions, and transitions between states via actions
- Composing behaviors using operations like sequential composition, choice composition, and recursion to build larger behaviors from smaller ones
- Modeling a basic coffee machine as a behavior that can accept coins and button presses and dispense coffee
- Expanding the model to add features like accumulating credit from multiple coins and disabling/enabling the machine
- Implementing the coffee machine
Papers We Love / Kyiv : PAXOS (and little about other consensuses )Ruslan Shevchenko
Slides from talk on 'Papers we Love, Kyiv' meetup: 27.07.2018 -- description of Paxos algorithm and friends.
https://www.meetup.com/Papers-We-Love-Kyiv/events/252974063/
This document discusses factors that influence the evolution and adoption of programming languages like Scala. It argues that for a language to be evolutionarily stable, it needs to survive, be adopted by a user base that is more than 1%, and be attractive. Scala's main value proposition is its support for static metaprogramming, but it needs to improve concurrency support, reduce boilerplate code, and simplify its core to lower the learning curve. New developments like Dotty and Squid could help address current issues and support further language evolution.
The document discusses functions and the Liskov substitution principle. It defines functions with signatures like f: A => B, meaning a function f that takes an input of type A and returns an output of type B. It explains function composition using andThen and |>. It also discusses how the Liskov substitution principle states that if S is a subtype of T, then objects of type T may be replaced with objects of type S without altering any desirable properties of that program. This allows subclasses to substitute behavior while preserving contracts with external consumers.
This document discusses various streaming approaches and implementations in different programming languages and frameworks. It covers:
1) Notable streaming implementations like SISAL, Occam, Inferno, Limbo, Go, Orc, and their origins.
2) Scala implementations of streaming including iteratee/enumeratee, scalaz-streams, fs2, akka-streams, gopher, monix.io.
3) Core concepts of streaming including pull-based and push-based approaches, active channels, and how different frameworks implement these concepts using combinators and domain-specific languages.
This document discusses the evolution of programming languages and hardware over time. It covers older languages like FORTRAN, BASIC, and C/C++. It also discusses newer languages like Rust, Go, and Julia. It describes how memory management, concurrency models, and distributed computing have changed. It proposes using techniques like functional interpreters and macros to allow languages to be more easily extended and adapted to new hardware. The document advocates for approaches that can efficiently support both old and new programming ideas.
This document discusses various techniques for working with types in Scala, including:
1. The main alternatives for Scala types including classical OO, algebraic, generic, and structured types. It recommends choosing styles based on use cases and setting guidelines.
2. The differences between run-time and compile-time dispatch and how they are implemented in Scala.
3. Techniques for working with types including tagged types, type aliases, and implicit evidence to provide different behaviors based on types known at compile-time.
4. Resources for learning more about advanced type-level programming in Scala, particularly the Shapeless library.
Why scala is not my ideal language and what I can do with thisRuslan Shevchenko
- The document discusses some of the author's criticisms of Scala, including its use of implicit parameters to configure runtime behavior, and lack of good support for asynchronous programming.
- The author proposes some workarounds, like annotating imports to avoid implicit conflicts, and patching the compiler to add more information to Future exceptions. However, the ideal solution would be language changes or improvements to asynchronous abstractions like Async.
- Overall, the author argues that Scala is not ideal for some use cases like asynchronous programming, but provides some workarounds people can use in the meantime. The best solutions require changes to the language and standard library.
This document provides a dictionary of scala programming concepts including definitions of common jargon like ADT, typeclasses, extension methods, and call-by semantics. It defines ADT as algebraic data types, which were introduced in languages like Algol 60 and ML, and pattern matching which allows decomposing ADT values. Typeclasses are defined as rules for types like equality, with instances providing implementations. Extension methods and implicit conversions add methods to types via implicit parameters. Call-by-name and call-by-need semantics are discussed in relation to lazy evaluation.
This document discusses programming techniques for low-latency Java applications. It begins by explaining what low-latency means and when it is needed. It then covers various techniques including: using concurrent flows and minimizing context switches; exchanging data between threads via queues instead of shared memory; preallocating objects to avoid allocations; and directly accessing serialized data instead of object instances. The document also discusses memory issues like garbage collection pauses and cache line contention. It covers alternatives for accessing native code like JNA, JNI, and shared memory. Critical JNI is presented as a faster option than regular JNI.
This document outlines a presentation about CSP (Communicating Sequential Processes) theory and implementation in Scala using the scala-gopher library. It begins with an introduction to CSP theory, history, and languages like Occam and Limbo that were influenced by it. It then demonstrates how scala-gopher implements key CSP concepts like channels, selectors, and processes in Scala. Examples are shown of writing Fibonacci sequences and broadcasting messages using these primitives. Potential issues with the current scala-gopher implementation are noted.
This document discusses various techniques for integrating R with other programming languages and ecosystems. It begins by asking what to do after building a model in R, such as rewriting the code, integrating R with other languages, or implementing business logic directly in R. The document then covers options for integrating R at the command line, library level, and for calling R from other languages like C++. It also discusses using R for web applications via techniques like rApache, shiny, and openCPU. In the end it argues that R can be effectively used as part of an application infrastructure along with software engineering languages.
The document reviews JavaScript languages that can be compiled to JavaScript, including CoffeeScript, Dart, TypeScript, Traceur, Emscripten, Scala.js, ClojureScript, Kotlin, and others. It discusses their features like static typing, classes, async/await support, and ability to port other language ecosystems to run in the browser. It also covers architectures like Opa and Ur/Web that aim to use a single language across front-end, back-end, and databases.
The document discusses various web application architecture techniques, including:
- Popular frameworks like Sinatra that use REST APIs and MVC patterns on the client-side.
- Reactive frameworks like Shiny that use websockets for real-time updates between the client and server.
- Challenges in building reactive applications, as infrastructure is still maturing to support callbacks without blocking.
- Other approaches to reactivity on the server including actors, channels, and reactive extensions.
- The document concludes that there is no single ideal architecture, as techniques are continually invented and re-invented over time.
This document discusses integrating R and Scala. It provides context on existing packages like jvmr that allow calling Scala from R and Renjin, which implements an R interpreter in the JVM. It notes challenges like running the Scala compiler at runtime when calling Scala from R and issues with Renjin only working on Linux and requiring looking at GCC internals. The author advocates a simple approach of just adding JAR files to allow calling R from Scala but notes it is slow. The conclusion states that living between the two worlds can be funny.
DDS Security Version 1.2 was adopted in 2024. This revision strengthens support for long runnings systems adding new cryptographic algorithms, certificate revocation, and hardness against DoS attacks.
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfUndress Baby
The quest for the best AI face swap solution is marked by an amalgamation of technological prowess and artistic finesse, where cutting-edge algorithms seamlessly replace faces in images or videos with striking realism. Leveraging advanced deep learning techniques, the best AI face swap tools meticulously analyze facial features, lighting conditions, and expressions to execute flawless transformations, ensuring natural-looking results that blur the line between reality and illusion, captivating users with their ingenuity and sophistication.
Web:- https://undressbaby.com/
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsPeter Muessig
The UI5 tooling is the development and build tooling of UI5. It is built in a modular and extensible way so that it can be easily extended by your needs. This session will showcase various tooling extensions which can boost your development experience by far so that you can really work offline, transpile your code in your project to use even newer versions of EcmaScript (than 2022 which is supported right now by the UI5 tooling), consume any npm package of your choice in your project, using different kind of proxies, and even stitching UI5 projects during development together to mimic your target environment.
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
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
Hand Rolled Applicative User ValidationCode KataPhilip Schwarz
Could you use a simple piece of Scala validation code (granted, a very simplistic one too!) that you can rewrite, now and again, to refresh your basic understanding of Applicative operators <*>, <*, *>?
The goal is not to write perfect code showcasing validation, but rather, to provide a small, rough-and ready exercise to reinforce your muscle-memory.
Despite its grandiose-sounding title, this deck consists of just three slides showing the Scala 3 code to be rewritten whenever the details of the operators begin to fade away.
The code is my rough and ready translation of a Haskell user-validation program found in a book called Finding Success (and Failure) in Haskell - Fall in love with applicative functors.
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxrickgrimesss22
Discover the essential features to incorporate in your Winzo clone app to boost business growth, enhance user engagement, and drive revenue. Learn how to create a compelling gaming experience that stands out in the competitive market.
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.
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
Enterprise Resource Planning System includes various modules that reduce any business's workload. Additionally, it organizes the workflows, which drives towards enhancing productivity. Here are a detailed explanation of the ERP modules. Going through the points will help you understand how the software is changing the work dynamics.
To know more details here: https://blogs.nyggs.com/nyggs/enterprise-resource-planning-erp-system-modules/
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
3. Domain modelling.
• Outline typical OOD issues
• Build
• simple domain model for toy billing system.
// scala, can be mapped to java.
• internal DSL
4. Domain modelling
• Traditional OO way: have layer of classes,
which corresponds to domain objects.
• Extensibility via inheritance in some
consistent Universal Ontology
• Intensional Equality [identity != attribute]
• Object instance <=> Entity in real world
5. Traditional OO WAY
• Human is an upright, featherless biped with
broad, flat nails.
6. Traditional OO WAY
• Human is an upright, featherless biped with
broad, flat nails.
Open for extensions close for modifications
7. Traditional OO WAY
• Human is an upright, featherless biped with
broad, flat nails.
Open for extensions close for modifications
8. Traditional OO WAY
• Intensional Equality [ mutability ]
// same identity thought lifecycle
9. Traditional OO WAY
• Object in code <=> Object in real world
class Person {
int getId();
String getName();
int getAge();
Set<Person> getChilds()
}
— thread-safe ?
— persistent updates ?
10. Domain modelling
• Traditional OO way: have layer of classes,
which corresponds to domain objects.
• Extensibility via inheritance in some
consistent Universal Ontology
• Intensional Equality [identity != attribute]
• Object instance <=> Entity in real world
11. Domain modelling
• Traditional OO way: similar to early
philosophy
• Very general
• Idealistic
• Fit to concrete cases may be undefined
12. Domain modelling
• Post OO way: describe limited set of objects
and relationships.
• Algebra instead Ontology
• Existential equality [identity == same
attributes]
• Rules of algebra <=> rules of reality.
13. Domain modelling: where to start.
• Example: description of small billing system
Subscriber
Billing System
Service PaymentPlanuse
in accordance
with
Service is Internet | Telephony
PaymentPlan is Monthly Fee for Quantity Limit and
Overhead cost per Unit
Unit Internet is Gbin
Telephony is Minute
and Bandwidth
14. TariffPlan: Use limit and quantity from service.
sealed trait Service
{
type Limits
def quantity(l:Limits): BigDecimal
}
case object Internet extends Service
{
case class Limits(gb:Int,bandwidth:Int)
def quantity(l:Limits) = l.gb
}
case object Telephony extends Service
{
type Limits = Int
def quantity(l) = l
15. TariffPlan: Price per limit and charge
case class TariffPlan[Limits](
monthlyFee: BigDecimal,
monthlyLimits: Limits,
excessCharge: BigDecimal
)
16. Subscriber ? Service ?
case class Subscriber( id, name, … )
trait BillingService
{
def checkServiceAccess(u:Subscriber,s:Service):Boolean
def rateServiceUsage(u:Subscriber,r:ServiceUsage):Subscriber
def ratePeriod(u:Subscriber, date: DateTime)
def acceptPayment(u:Subscriber, payment: Payment)
}
// Aggregate
// let’s add to Subscriber all fields, what needed.
17. adding fields for Subscriber aggregates.
case class Subscriber(id, name,
serviceInfos:Map[Service,SubscriberServiceInfo],
account: BigDecimal, …..
)
case class SubscriberServiceInfo[S<:Service,L<:S#Limits](
service: S, tariffPlan: tariffPlan[S,L], amountUsed:Double
)
trait BillingService
{
def checkServiceAccess(u:Subscriber,s:Service):Boolean =
u.serviceInfos(s).isDefined && u.account > 0
}
18. adding fields for Subscriber aggregates.
case class Subscriber(id, name,
serviceInfos:Map[Service,SubscriberServiceInfo[_,_]],
account: BigDecimal, …..
)
case class ServiceUsage(service, amount, when)
trait BillingService
{
def rateServiceUsage(u:Subscriber,r:ServiceUsage):Subscriber =
serviceInfo(r.service) match {
case Some(SubscriberServiceInfo(service,plan,amount)) =>
val price = ….
u.copy(account = u.account - price,
serviceInfo = serviceInfo.updated(s,
}
19. adding fields for Subscriber aggregates.
trait BillingService
{
def rateServiceUsage(u:Subscriber,r:ServiceUsage):Subscriber =
serviceInfo(r.service) match {
case Some(SubscriberServiceInfo(service,plan,amount)) =>
val price = ….
u.copy(account = u.account - price,
serviceInfo = serviceInfo.updated(s,
ServiceInfo(service,plan,amount+r.amount))
)
case None =>
throw new IllegalStateException(“service is not enabled”)
}
…………….
}
20. Subscriber aggregates [rate: lastPayedDate]
case class Subscriber(id, name,
serviceInfos:Map[Service,SubscriberServiceInfo[_,_]],
account: BigDecimal,
lastPayedDate: DateTime
)
trait BillingService
{
def ratePeriod(u:Subscriber,date:DateTime):Subscriber =
if (date < u.lastPayedDate) u
else {
val price = …..
subscriber.copy(account = u.account - price,
lastPayedDate = date+1.month)
}
}
21. Subscriber:
case class Subscriber(
id : Long,
name: String,
serviceInfos:Map[Service,SubscriberServiceInfo[_,_]],
account: BigDecimal,
lastPayedDate: DateTime
)
case class SubscriberServiceInfo[S<:Service,L<:S#Limits](
service: S,
tariffPlan: tariffPlan[L],
amountUsed:Double
)
23. From domain model to implementation. [S1]
Subscriber
Service TariffPlan
Domain Data/ Aggregates Services
SubscriberOperations
TariffPlanOperations
….
Repository
DD — contains only essential data
Services — only functionality
Testable.
No mess with implementation.
Service calls — domain events
24. From domain model to implementation. [S1]
Improvements/Refactoring space:
• Errors handling
• Deaggregate
• Fluent DSL
27. Design for failure:
sealed trait Try[+X]
case class Success[X](v:X) extends Try[X]
case class Failure(ex:Throwable) extends Try[Nothing]
when use Try / traditional exception handling?
Try — error recovery is a part of business layers.
(i.e. errors is domain-related)
Exception handling — error recovery is a part of infrastructure layer.
(i. e. errors is system-related)
32. Deaggregation. [S2]
Subscriber
Service TariffPlan
Domain Data/ Aggregates Services
SubscriberOperations
TariffPlanOperations
….
Repository
Interpret
- Not for all cases
- Loss
- generality of repository
- simply logic
- Gain
- simple repository operations
- more efficient data access.
33. DSL: Domain Specific Language.
Idea: fluent syntax for fluent operations.
• Syntax sugar, can be used by non-programmers
• ‘Micro-interpreter/compiler’
• Internal/External
Let’s build simple Internal DSL for our tariff plans.
40. DSL: (100 hrn) montly (1 gb) speed 100 excess ((2 hrn) per (1 gb))
Internal
External
Need some boilerplate code.
Useful when developers need fluent business
domain object notation.
Internally - combination of builder and interpreter patterns
Useful when external users (non-developers) want to describe
domain objects.
Internally - language-mini-interpreter.
// [scala default library include parser combinators]
41. Post-OOD domain modelling
Domain Data Objects
‘OO’ Objects with behavior
• Closed world.
• Different lifecycle can be described by
different types
• Composition over inheritance
Domain Services
• Open world.
• No data, only functionality. Calls can be replayed.
• Traditional inheritance
Infrastructure Services
• Interpreters of ‘domain services’ functions
// phantom types.
42. Thanks for attention.
Fully - implemented ‘tiny’ domain model and DSL:
https://github.com/rssh/scala-training-materials/tree/master/fwdays2015-examples/
Ruslan Shevchenko
Lynx Capital Partners
https://github.com/rssh
@rssh1