В 2017 году мы начали активно использовать F# для построения high-load push-based queryable API, а также обработки больших потоков данных (stateful stream processing). На тот момент времени никто в наших командах не имел предыдущего опыта по внедрению и применению F# но мы решили попробовать. На этом докладе я расскажу о нашем опыте внедрения F#, его проблемах и недостатках, о том как мы его научились готовить, где имеет смысл его применять и как подружить C#/OOP с F#/FP в одном проекте.
Данный доклад нацелен на аудиторию не имеющую предыдущего опыта с FP/F#.
Agenda:
- Why did we choose F# over C#?
- A high-level overview of the architecture of our push-based queryable API.
- Adopting F# for C#/OOP developers (inconveniences, C# interoperability, code style, DDD, TDD)
This document discusses Python functions. It explains that there are built-in functions provided as part of Python and user-defined functions. User-defined functions are created using the def keyword and can take parameters and return values. The body of a function is indented and runs when the function is called. Functions allow code to be reused and organized in a modular way. Examples are provided to demonstrate defining and calling functions with different parameters and return values.
The document provides a recap of Python programming concepts like conditions and statements, while loops, for loops, break and continue statements, and working with strings. It also introduces regular expressions as a way to match patterns in strings using a formal language that can be interpreted by a regular expression processor.
[SUMMARY
There are many popular stream libraries for Scala developers, including Akka Streams, scalaz-stream, fs2, plus others in the Java ecosystem. While all excellent choices for building reactive Scala applications, their reliance on effects makes them particularly difficult to test and reason about. In this talk, long-time Scala functional programmer John A. De Goes takes to the stage to demonstrate a new approach to modeling streams that requires less machinery and has more reasoning power, composability, flexibility, and testability than many other approaches. By attending the talk, you'll learn how the best stream library may be the one you get for (co)free!
The document provides an overview of a presentation about adopting F# for C#/OOP developers. It discusses:
- Why F# was chosen, including better tooling support and community growth.
- Some advantages of F# compared to C#, like recursive modules, better code style and purity.
- Challenges in adopting F#, like different programming paradigms and culture between OOP and FP.
- Examples showing F# code that is more concise and readable compared to equivalent C# code.
This document summarizes a presentation about Norikra, an open source SQL stream processing engine written in Ruby. Some key points:
- Norikra allows for schema-less stream processing using SQL queries without needing to restart for new queries. It supports windows, joins, UDFs.
- Example queries demonstrate counting events by field values over time windows. Nested fields can be queried directly.
- Norikra is used in production at LINE for analytics like API error reporting and a Lambda architecture with real-time and batch processing.
- It is built on JRuby to leverage Java libraries and Ruby gems, and can handle 10k-100k events/sec on typical hardware. The
This document discusses using RxJava to handle asynchronous and concurrent processes. It provides an example of using RxJava to stream tweets from Twitter APIs, retrieve user profiles concurrently, and find the most popular tweet by a user. Key strengths of RxJava highlighted are that it is functional, reactive, allows controlling execution threads, and is easy to compose and integrate workflows. Some pitfalls mentioned are that the API is large, it can be hard to debug, and back pressure must be managed.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1DXFg0h.
Ben Christensen summarizes why the Rx programming model was chosen and demonstrates how it is applied to a variety of use cases. Filmed at qconsf.com.
Ben Christensen is a software engineer on the Netflix Edge Services Platform team responsible for fault tolerance, performance, architecture and scale while enabling millions of customers to access the Netflix experience across more than 1,000 different device types.
This document discusses Python functions. It explains that there are built-in functions provided as part of Python and user-defined functions. User-defined functions are created using the def keyword and can take parameters and return values. The body of a function is indented and runs when the function is called. Functions allow code to be reused and organized in a modular way. Examples are provided to demonstrate defining and calling functions with different parameters and return values.
The document provides a recap of Python programming concepts like conditions and statements, while loops, for loops, break and continue statements, and working with strings. It also introduces regular expressions as a way to match patterns in strings using a formal language that can be interpreted by a regular expression processor.
[SUMMARY
There are many popular stream libraries for Scala developers, including Akka Streams, scalaz-stream, fs2, plus others in the Java ecosystem. While all excellent choices for building reactive Scala applications, their reliance on effects makes them particularly difficult to test and reason about. In this talk, long-time Scala functional programmer John A. De Goes takes to the stage to demonstrate a new approach to modeling streams that requires less machinery and has more reasoning power, composability, flexibility, and testability than many other approaches. By attending the talk, you'll learn how the best stream library may be the one you get for (co)free!
The document provides an overview of a presentation about adopting F# for C#/OOP developers. It discusses:
- Why F# was chosen, including better tooling support and community growth.
- Some advantages of F# compared to C#, like recursive modules, better code style and purity.
- Challenges in adopting F#, like different programming paradigms and culture between OOP and FP.
- Examples showing F# code that is more concise and readable compared to equivalent C# code.
This document summarizes a presentation about Norikra, an open source SQL stream processing engine written in Ruby. Some key points:
- Norikra allows for schema-less stream processing using SQL queries without needing to restart for new queries. It supports windows, joins, UDFs.
- Example queries demonstrate counting events by field values over time windows. Nested fields can be queried directly.
- Norikra is used in production at LINE for analytics like API error reporting and a Lambda architecture with real-time and batch processing.
- It is built on JRuby to leverage Java libraries and Ruby gems, and can handle 10k-100k events/sec on typical hardware. The
This document discusses using RxJava to handle asynchronous and concurrent processes. It provides an example of using RxJava to stream tweets from Twitter APIs, retrieve user profiles concurrently, and find the most popular tweet by a user. Key strengths of RxJava highlighted are that it is functional, reactive, allows controlling execution threads, and is easy to compose and integrate workflows. Some pitfalls mentioned are that the API is large, it can be hard to debug, and back pressure must be managed.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1DXFg0h.
Ben Christensen summarizes why the Rx programming model was chosen and demonstrates how it is applied to a variety of use cases. Filmed at qconsf.com.
Ben Christensen is a software engineer on the Netflix Edge Services Platform team responsible for fault tolerance, performance, architecture and scale while enabling millions of customers to access the Netflix experience across more than 1,000 different device types.
This document summarizes the key changes and new features in Swift 3. It discusses the removal of C-style loops and increment/decrement operators. It introduces the new Sequence.first(where:) method to find the first element matching a predicate. It covers updates to consistent label behavior for function parameters and the use of keywords in member references. The document also provides an overview of the Swift Package Manager for distributing and managing Swift code dependencies.
The document describes a lawyer's journey learning web development and building their first two web applications in Go. It outlines how they learned HTML, CSS, and JavaScript from May to July 2014 before learning Go in mid-July 2014. By mid-August 2014, they had deployed their first application - a CRUD app using MySQL for persistence. By the end of August 2014, they deployed their second application - an API client that retrieved photos from Flickr and weather data for a random city. The document provides details on the structure, libraries, data structures, database functions, handler functions, and main function used in developing the applications.
Swift is a powerful new language, with a rapidly growing user base—which now includes Linux server-side developers. This presentation is a briief overview of the current Swift web server frameworks, as well as a highlight of the best features that Swift has to offer.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1ZW7TDL.
Richard Dallaway shows an example of what Scala looks like when using pattern matching over classes, how to encode an idea into types and use advanced features of Scala without complicating the code. Filmed at qconlondon.com.
Richard Dallaway is a partner at Underscore -- a consultancy specializing in Scala, especially the type-driven and functional aspects of Scala. He works on client projects writing software and helping teams deliver software with Scala. His focus is on the web, machine learning, and code review. He's the co-author of "Essential Slick" (Underscore), and author of the "Lift Cookbook" (O'Reilly).
An Architecture for Agile Machine Learning in Real-Time ApplicationsJohann Schleier-Smith
Presented at KDD, August 11, 2015.
Abstract of the paper:
Machine learning techniques have proved effective in recommender systems and other applications, yet teams working to deploy them lack many of the advantages that those in more established software disciplines today take for granted. The well-known Agile methodology advances projects in a chain of rapid development cycles, with subsequent steps often informed by production experiments. Support for such workflow in machine learning applications remains primitive.
The platform developed at if(we) embodies a specific machine learning approach and a rigorous data architecture constraint, so allowing teams to work in rapid iterative cycles. We require models to consume data from a time-ordered event history, and we focus on facilitating creative feature engineering. We make it practical for data scientists to use the same model code in development and in production deployment, and make it practical for them to collaborate on complex models.
We deliver real-time recommendations at scale, returning top results from among 10,000,000 candidates with sub-second response times and incorporating new updates in just a few seconds. Using the approach and architecture described here, our team can routinely go from ideas for new models to production-validated results within two weeks.
Swift: Apple's New Programming Language for iOS and OS XSasha Goldshtein
The document discusses Apple's new programming language Swift. It provides an overview of Swift's key features such as variables, constants, strings, arrays, dictionaries, optional types, functions, classes, enums, extensions and generics. It also discusses how Swift aims to be a modern, type-safe language that is cleaner than Objective-C and seamlessly interoperates with existing iOS apps. The presentation concludes that Swift fixes many issues with Objective-C and most iOS developers are excited about its potential.
This document discusses transitioning from .NET/XAML development to web development using HTML, JavaScript, and TypeScript. It covers choosing TypeScript and a MVVM framework like Knockout to leverage existing skills in data binding, object-oriented programming, and requirements handling. The document demonstrates TypeScript features like classes, inheritance, interfaces and generics. It also shows how to implement the MVVM pattern in Knockout through data binding, commands, and iterating over collections.
Marcel Prasetya (Software Engineer, Google Wave APIs Team) talks about "Google Wave API: Now and Beyond" as part of San Francisco Java User Group's November 10th, 2009 meetup event held in San Francisco, CA at Google Inc.
http://www.sfjava.org/calendar/11573532/
Sponsored By: TEKsystems Inc., Marakana Inc., Packt Publishing Ltd., and JetBrains Inc.
Organized and Recorded By: Marakana Inc.
This document discusses connecting IoT devices and systems to the FIWARE Lab ecosystem. It provides an overview of the FIWARE IoT proposal and community. It then describes the most common scenarios for connecting IoT providers and consumers to the FIWARE Context Broker using the IDAS/SBC Ultralight 2.0 protocol. Step-by-step instructions are provided for registering models and devices and sending measurements and commands. Additional options for connecting IoT systems like MQTT and LWM2M are also mentioned.
Monitoring as an entry point for collaborationJulien Pivotto
This document summarizes a talk on using monitoring as an entry point for collaboration. It discusses using the Prometheus monitoring system to collect metrics and expose them using exporters. Grafana is then used to visualize the metrics and create dashboards focused on business metrics like requests, errors, and durations. These metrics provide observability across teams and enable alerting when business services are impacted.
The document discusses the major changes and improvements in Swift 3.0, which is expected to be released in late 2016. It outlines proposals like removing var from function parameters, distinguishing single-tuple from multiple-argument function types, and applying API design guidelines to the standard library. It also covers changes to the Foundation framework like dropping the NS prefix and making value types non-mutable by default. The goal is to enhance the Swift language, development experience, and source compatibility between versions.
Anatoly Sharifulin presents on developing apps using Perl. He discusses creating an app called DLTTR that allows users to delete tweets in bulk using asynchronous queues and APIs. The app was built with Mojolicious, uses a server API, and stores data in MySQL. It has been successful with over 1 million tweets deleted and thousands of users. The talk highlights how Perl helped enable the creation of this cross-platform app that deletes tweets quickly and appropriately.
Generating Unified APIs with Protocol Buffers and gRPCC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2k1eZ00.
Chris Roche and Christopher Burnett discuss how they extended the Protocol Buffer (PB) IDL to create unified APIs and data models. From validation logic to automatic logging and statistics, PBs allows them to speed up development across Go, Python, and PHP stacks. They also show how they leverage the Envoy proxy to transparently upgrade HTTP/1.1 services to speak gRPC on the wire. Filmed at qconnewyork.com.
Chris Roche is a Core Libraries Engineer at Lyft focused on enriching the tools to create distributed systems. Christopher Burnett is Lead Core Libraries Engineer at Lyft, where he designs software for distributed systems.
The Istio service mesh provides a highly extensible platform to connect, manage, and secure microservices. Istio’s highly extensible nature is one of the main selling points as it allows you to enforce your own organization-specific policies across large fleets of microservices. At the same time, new technology always has a learning curve, and with all this extensibility and generality the task can be quite daunting.
In this talk, Limin Wang (Software Engineer at Google) and Torin Sandall (Technical Lead of the Open Policy Agent project) explain how Istio’s Mixer works and lead a deep dive into Mixer Adapter development. The talk shows (with demos) how the Mixer Adapter model enables custom policy enforcement and how the model is used to integrate third party policy engines like the Open Policy Agent.
This talk is targeted at platform engineers interested in using the Istio service mesh to enforce custom policies in their microservices. The talk also provides new ideas about the kinds of policies that can be enforced in Istio today.
WSO2 Complex Event Processor (CEP) 4.0 provides real-time analytics capabilities. Some key features of CEP 4.0 include a re-architecture of the CEP server, improvements to the Siddhi query engine (version 3.0), scalable distributed processing using Apache Storm, and better high availability support. CEP 4.0 also offers a domain specific execution manager, real-time dashboards, improved usability, and pluggable event receivers and publishers. It can execute queries in a distributed manner across multiple nodes for scalability.
The document discusses The Guardian's open platform and API. It provides a brief history of The Guardian's website and outlines how developers can build applications that retrieve and display Guardian content and metadata through URL hacking, RSS feeds, and combiners. It then introduces The Guardian's Content API and Data Store, which allow programmatic access to over 10 years of content and metadata in order to power third-party applications. Examples are given of how the expenses API was built and how the Guardian content can be displayed on other sites.
PyTorch is an open-source machine learning library for Python. It is primarily developed by Facebook's AI research group. The document discusses setting up PyTorch, including installing necessary packages and configuring development environments. It also provides examples of core PyTorch concepts like tensors, common datasets, and constructing basic neural networks.
People using your web app also use many other online services. You'll often want to pull data from those other services into your app, or publish data from your app out to other services. In this talk, Randy will explain the terminology you need to know, share best practices and techniques for integrating, and walk through two real-world examples. You'll leave with code snippets to help you get started integrating.
.NET Fest 2019. Николай Балакин. Микрооптимизации в мире .NETNETFest
Что делать, если все, что можно уже закэшировано, а код всё ещё тормозит? В этом докладе мы обсудим, как работают некоторые низкоуровневые механизмы .NET и как мы с их помощью можем выиграть драгоценные секунды, когда счет идет на отдельные такты процессора.
.NET Fest 2019. Сергей Калинец. Efficient Microservice Communication with .NE...NETFest
The move to microservice infrastructure exposes new challenges, that are not typical for classic monolithic applications. Deployment, security, monitoring -- this list is far from complete.
In this talk Serhiy will speak about how to establish a fast and reliable communication channels between microservices. What patterns, protocols and data formats are available. How to enforce a backwards compatibility and strict contract between services and their clients. When we should use sync or async communication style, and so on.
Come to this session and hopefully you will come out with new ideas of how to build your stuff even better.
More Related Content
Similar to .NET Fest 2018. Антон Молдован. One year of using F# in production at SBTech
This document summarizes the key changes and new features in Swift 3. It discusses the removal of C-style loops and increment/decrement operators. It introduces the new Sequence.first(where:) method to find the first element matching a predicate. It covers updates to consistent label behavior for function parameters and the use of keywords in member references. The document also provides an overview of the Swift Package Manager for distributing and managing Swift code dependencies.
The document describes a lawyer's journey learning web development and building their first two web applications in Go. It outlines how they learned HTML, CSS, and JavaScript from May to July 2014 before learning Go in mid-July 2014. By mid-August 2014, they had deployed their first application - a CRUD app using MySQL for persistence. By the end of August 2014, they deployed their second application - an API client that retrieved photos from Flickr and weather data for a random city. The document provides details on the structure, libraries, data structures, database functions, handler functions, and main function used in developing the applications.
Swift is a powerful new language, with a rapidly growing user base—which now includes Linux server-side developers. This presentation is a briief overview of the current Swift web server frameworks, as well as a highlight of the best features that Swift has to offer.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1ZW7TDL.
Richard Dallaway shows an example of what Scala looks like when using pattern matching over classes, how to encode an idea into types and use advanced features of Scala without complicating the code. Filmed at qconlondon.com.
Richard Dallaway is a partner at Underscore -- a consultancy specializing in Scala, especially the type-driven and functional aspects of Scala. He works on client projects writing software and helping teams deliver software with Scala. His focus is on the web, machine learning, and code review. He's the co-author of "Essential Slick" (Underscore), and author of the "Lift Cookbook" (O'Reilly).
An Architecture for Agile Machine Learning in Real-Time ApplicationsJohann Schleier-Smith
Presented at KDD, August 11, 2015.
Abstract of the paper:
Machine learning techniques have proved effective in recommender systems and other applications, yet teams working to deploy them lack many of the advantages that those in more established software disciplines today take for granted. The well-known Agile methodology advances projects in a chain of rapid development cycles, with subsequent steps often informed by production experiments. Support for such workflow in machine learning applications remains primitive.
The platform developed at if(we) embodies a specific machine learning approach and a rigorous data architecture constraint, so allowing teams to work in rapid iterative cycles. We require models to consume data from a time-ordered event history, and we focus on facilitating creative feature engineering. We make it practical for data scientists to use the same model code in development and in production deployment, and make it practical for them to collaborate on complex models.
We deliver real-time recommendations at scale, returning top results from among 10,000,000 candidates with sub-second response times and incorporating new updates in just a few seconds. Using the approach and architecture described here, our team can routinely go from ideas for new models to production-validated results within two weeks.
Swift: Apple's New Programming Language for iOS and OS XSasha Goldshtein
The document discusses Apple's new programming language Swift. It provides an overview of Swift's key features such as variables, constants, strings, arrays, dictionaries, optional types, functions, classes, enums, extensions and generics. It also discusses how Swift aims to be a modern, type-safe language that is cleaner than Objective-C and seamlessly interoperates with existing iOS apps. The presentation concludes that Swift fixes many issues with Objective-C and most iOS developers are excited about its potential.
This document discusses transitioning from .NET/XAML development to web development using HTML, JavaScript, and TypeScript. It covers choosing TypeScript and a MVVM framework like Knockout to leverage existing skills in data binding, object-oriented programming, and requirements handling. The document demonstrates TypeScript features like classes, inheritance, interfaces and generics. It also shows how to implement the MVVM pattern in Knockout through data binding, commands, and iterating over collections.
Marcel Prasetya (Software Engineer, Google Wave APIs Team) talks about "Google Wave API: Now and Beyond" as part of San Francisco Java User Group's November 10th, 2009 meetup event held in San Francisco, CA at Google Inc.
http://www.sfjava.org/calendar/11573532/
Sponsored By: TEKsystems Inc., Marakana Inc., Packt Publishing Ltd., and JetBrains Inc.
Organized and Recorded By: Marakana Inc.
This document discusses connecting IoT devices and systems to the FIWARE Lab ecosystem. It provides an overview of the FIWARE IoT proposal and community. It then describes the most common scenarios for connecting IoT providers and consumers to the FIWARE Context Broker using the IDAS/SBC Ultralight 2.0 protocol. Step-by-step instructions are provided for registering models and devices and sending measurements and commands. Additional options for connecting IoT systems like MQTT and LWM2M are also mentioned.
Monitoring as an entry point for collaborationJulien Pivotto
This document summarizes a talk on using monitoring as an entry point for collaboration. It discusses using the Prometheus monitoring system to collect metrics and expose them using exporters. Grafana is then used to visualize the metrics and create dashboards focused on business metrics like requests, errors, and durations. These metrics provide observability across teams and enable alerting when business services are impacted.
The document discusses the major changes and improvements in Swift 3.0, which is expected to be released in late 2016. It outlines proposals like removing var from function parameters, distinguishing single-tuple from multiple-argument function types, and applying API design guidelines to the standard library. It also covers changes to the Foundation framework like dropping the NS prefix and making value types non-mutable by default. The goal is to enhance the Swift language, development experience, and source compatibility between versions.
Anatoly Sharifulin presents on developing apps using Perl. He discusses creating an app called DLTTR that allows users to delete tweets in bulk using asynchronous queues and APIs. The app was built with Mojolicious, uses a server API, and stores data in MySQL. It has been successful with over 1 million tweets deleted and thousands of users. The talk highlights how Perl helped enable the creation of this cross-platform app that deletes tweets quickly and appropriately.
Generating Unified APIs with Protocol Buffers and gRPCC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2k1eZ00.
Chris Roche and Christopher Burnett discuss how they extended the Protocol Buffer (PB) IDL to create unified APIs and data models. From validation logic to automatic logging and statistics, PBs allows them to speed up development across Go, Python, and PHP stacks. They also show how they leverage the Envoy proxy to transparently upgrade HTTP/1.1 services to speak gRPC on the wire. Filmed at qconnewyork.com.
Chris Roche is a Core Libraries Engineer at Lyft focused on enriching the tools to create distributed systems. Christopher Burnett is Lead Core Libraries Engineer at Lyft, where he designs software for distributed systems.
The Istio service mesh provides a highly extensible platform to connect, manage, and secure microservices. Istio’s highly extensible nature is one of the main selling points as it allows you to enforce your own organization-specific policies across large fleets of microservices. At the same time, new technology always has a learning curve, and with all this extensibility and generality the task can be quite daunting.
In this talk, Limin Wang (Software Engineer at Google) and Torin Sandall (Technical Lead of the Open Policy Agent project) explain how Istio’s Mixer works and lead a deep dive into Mixer Adapter development. The talk shows (with demos) how the Mixer Adapter model enables custom policy enforcement and how the model is used to integrate third party policy engines like the Open Policy Agent.
This talk is targeted at platform engineers interested in using the Istio service mesh to enforce custom policies in their microservices. The talk also provides new ideas about the kinds of policies that can be enforced in Istio today.
WSO2 Complex Event Processor (CEP) 4.0 provides real-time analytics capabilities. Some key features of CEP 4.0 include a re-architecture of the CEP server, improvements to the Siddhi query engine (version 3.0), scalable distributed processing using Apache Storm, and better high availability support. CEP 4.0 also offers a domain specific execution manager, real-time dashboards, improved usability, and pluggable event receivers and publishers. It can execute queries in a distributed manner across multiple nodes for scalability.
The document discusses The Guardian's open platform and API. It provides a brief history of The Guardian's website and outlines how developers can build applications that retrieve and display Guardian content and metadata through URL hacking, RSS feeds, and combiners. It then introduces The Guardian's Content API and Data Store, which allow programmatic access to over 10 years of content and metadata in order to power third-party applications. Examples are given of how the expenses API was built and how the Guardian content can be displayed on other sites.
PyTorch is an open-source machine learning library for Python. It is primarily developed by Facebook's AI research group. The document discusses setting up PyTorch, including installing necessary packages and configuring development environments. It also provides examples of core PyTorch concepts like tensors, common datasets, and constructing basic neural networks.
People using your web app also use many other online services. You'll often want to pull data from those other services into your app, or publish data from your app out to other services. In this talk, Randy will explain the terminology you need to know, share best practices and techniques for integrating, and walk through two real-world examples. You'll leave with code snippets to help you get started integrating.
.NET Fest 2019. Николай Балакин. Микрооптимизации в мире .NETNETFest
Что делать, если все, что можно уже закэшировано, а код всё ещё тормозит? В этом докладе мы обсудим, как работают некоторые низкоуровневые механизмы .NET и как мы с их помощью можем выиграть драгоценные секунды, когда счет идет на отдельные такты процессора.
.NET Fest 2019. Сергей Калинец. Efficient Microservice Communication with .NE...NETFest
The move to microservice infrastructure exposes new challenges, that are not typical for classic monolithic applications. Deployment, security, monitoring -- this list is far from complete.
In this talk Serhiy will speak about how to establish a fast and reliable communication channels between microservices. What patterns, protocols and data formats are available. How to enforce a backwards compatibility and strict contract between services and their clients. When we should use sync or async communication style, and so on.
Come to this session and hopefully you will come out with new ideas of how to build your stuff even better.
В сентябре 2019 года выходит новая версия .NET Core 3. Я расскажу о преимуществах .NET Core перед .NET Framework, о том, что нового становится доступным в последней версии .NET Core и о планах Майкрософт по поводу будущего всех .NET фреймворков.
.NET Fest 2019. Оля Гавриш. Машинное обучение для .NET программистовNETFest
А Вы знали, что практически для каждого проекта можно применить машинное обучение? И теперь для этого не нужно изучать новый язык программирования (как Python или R) и осваивать численные методы. В этом докладе я расскажу об основах машинного обучения и о том, как легко начать использовать его в своих .NET проектах с помощью ML.NET и других решений от Microsoft.
In these days, automation is the key to reduce the effort in governing complex system. Also, it reduces mistakes of manual, repetetive, operations. Despite the standardization of common approaches using text-based Infrastructure-as-code definitions, as YAML or JSON, I will suggest to write your provisioning templates using C# and .NET, against Microsoft Azure.
In this demo-only session, we'll see the Azure Fluent Management Libraries in action to create a multi-tenant environment with strong-typed objects and compile-type-safe provisioning code.
.NET Fest 2019. Halil Ibrahim Kalkan. Implementing Domain Driven DesignNETFest
“Domain Driven Design is an approach to software development for complex needs by connecting the implementation to an evolving model.”
While there are many resources on the web about the DDD, they are generally theoretical rather than useful practical guides. One reason is that a DDD implementation quite varies depending on your domain and culture. However, it is still possible to provide some explicit rules those can help you while designing your code base.
This talk starts by introducing the DDD and providing a layering model based on the DDD and the Clean Architecture. It then introduces the core building of an application built on the DDD principles.
In the second part of the talk, it shows some strict coding rules for the core building blocks with real code examples and suggestions. These rules are essential to build a large scale application implements DDD patterns & practices.
While the solution structure and code samples are based on .NET and C#, the talk is useful for developers and architects working with any server side technology.
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at WirexNETFest
Я розповім про еволюцію фіча тоглів у компанії та наш досвід їх використання. Пройдемось покроково в їх розвитку:
Від файлу конфігурації зі звичайним kill-switch для ввімкнення меінтенансу, який вмикав/вимикав доступ до сервісів одразу всім користувачам. До гнучкої системи з набору правил з пріоритетами з гранулярністю від країни, штату до окремого користувача.
Від редагування через базу даних до панелі адміністратора та автоматизованих змін залежно від подій в системі.
А також розповім про actions - комбінацію фіча тоглів та правил бізнес-логіки для динамічного інтерфейсу клієнтів на основі доступних дій користувачу.
.NET Fest 2019. Michael Staib. Hot Chocolate: GraphQL Schema Stitching with A...NETFest
GraphQL is a great way to expose your APIs and it has changed the way we think about consuming data over HTTP. With GraphQL we want to have one schema that provides all the data to us in a consistent way, enabling us to drill into the graph and fetch with one request what we actually want instead of having to issue multiple requests.
In the real world, however, we more often build small services that serve certain use cases. Simpler services are easier to maintain and can be deployed more rapidly. Moreover, we often also want to use external services that are not built by us. Ultimately, we will end up with multiple APIs again.
The solution for this dilemma is schema stitching. This talk will explore the schema stitching capabilities on ASP.Net Core with Hot Chocolate. We will show how you can set up a Hot Chocolate GraphQL gateway in under 5 minutes and move on to the various stitching scenarios.
This talk introduces simple auto-stitching scenarios and goes on to demonstrate how you can rewrite your GraphQL APIs into something truly new.
.NET Fest 2019. Андрей Литвинов. Async lifetime tests with xUnit and AutoFixtureNETFest
В этом выступлении Андрей расскажет о внутренностях базового сервиса, написанного с использованием паттерна CQS, который обрабатывает входящие запросы команд и публикует события, описывающие переходы состояния системы. После этого он опишет общие способы тестирования такого сервиса и объяснит плюсы и минусы существующих подходов. Затем он расскажет про AutoFixture и покажет, как она может сделать тесты намного чище, а конфигурацию - более удобной, путем инъекции параметров в метод теста, объяснит существующие проблемы с инициализацией и очистке данных в асинхронных тестах и покажет, как с этим справляться с помощью некоторой легковесной интеграции между xUnit и AutoFixture.
.NET Fest 2019. Анатолий Колесник. Love, Death & F# TestsNETFest
.NET developers who want to learn some more programming techniques usually come to F# world. But then find it hard to use it in day-to-day work. I will show how you can utilize F# language without risks of putting something new and not-so-reliable directly to production.
.NET Fest 2019. Алексей Голуб. Монадные парсер-комбинаторы в C# (простой спос...NETFest
Все когда-либо писали парсеры, но многие так и не знают как спарсить HTML без регулярных выражений. Очень длительное время концепция парсинга языков с рекурсивной грамматикой для меня была черной магией, а люди которые занимаются разработкой компиляторов и предметно-ориентированных языков вовсе казались волшебниками. Но это оказалось не так и сложно. В моем докладе я хочу вам рассказать о том что такое парсеры в целом, зачем они нужны и какие они бывают, а самое главное -- покажу как перейти от традиционных методик их написания к более удобному и понятному функциональному способу. В ходе презентации мы также напишем рабочий JSON парсер в качестве proof of concept.
.NET Fest 2019. Roberto Freato. Azure App Service deep diveNETFest
Believing it is the most powerful PaaS service of the entire public cloud, I will share with you all the most interesting features of App Service and the good tips from the field, to see how to properly use it in production and focus on applications, instead of governance.
I will dig into the architecture, the deployment options, the runtimes, the secrets management, logging and troubleshooting and into some advanced high-scale scenarios. If you never used this, you will say ""ok, how did I survive without it?"".
.NET Fest 2019. Леонид Молотиевский. DotNet Core in productionNETFest
Во время доклада, я поделюсь с Вами опытом, который мы получили, используя микросервисы в прод K8S кластере. Также, обозначу основные проблемы, с которыми столкнулась наша команда на этапе их диагностики. И, самое главное - что мы сделали чтобы избежать их в будущем. Отвечу на вопросы: Почему мы мигрировали в облако? Почему dotNet Core 2.2 вызвал кучу проблем? Данный доклад сохранит сотни часов вашим разработчикам и DevOps команде, жизнь которой может напоминать кошмар.
.NET Fest 2019. Александр Демчук. How to measure relationships within the Com...NETFest
The majority of companies are struggling with an issue of growth where they started from handful group of people and reached 1000+ employees. In case of small groups the relationships remind family’s connections so everyone knows each other personally and the atmosphere is warm and charm whereas starting from 500+ to 1k keep it as family is tough and most of the companies come up with processes on one hand and culture on other. There ain’t no silver bullet how to manage it and in the end of the day they are balancing working a lot about good atmosphere in company and setting up relationships between teams. The issue isn’t new however tools and approaches evolved a lot this is where .NET Core and ML.Net comes in handy. These days AI/ML take over the world and bots as one of implementations are already a part of our life therefore our entuthiastic team created a bot using latest .NET Bot Framework v4 who helps managers to “measure” atmosphere in teams and crucial to socialize teams leveraging the power of ML.NET.
.NET Fest 2019. Anna Melashkina та Philipp Bauknecht. Dragons in a Mixed Real...NETFest
This document discusses mixed reality and the use of spatial anchors. It begins with an introduction to spatial anchors and cloud spatial anchors, which provide a common frame of reference to place digital content in physical locations across devices. The rest of the document demonstrates how to create spatial anchors using Azure Spatial Anchors and Unity, provides examples of how spatial anchors can be used for collaborative design reviews, wayfinding and IoT applications, and concludes with information on resources and a question period.
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystemNETFest
You must have noticed how Docker and containers is playing a more and more important part in .NET development. Docker support is everywhere, so it should be easy to build solutions based on container technology, right? But, it takes a bit more to architect and create a .NET solution that use Docker at its core. Many questions arise: How do you design a solution architecture that fits well with containers? Would I use .NET or .NET Core? What is a proper way to migrate to such an architecture? What changes in the .NET implementation from pre-Docker solutions with micro-services? Where do container orchestrators fit in and how do I build and deploy my solutions on a Docker container cluster, such as Azure Kubernetes Service?
These and many other questions will be answered in this session. You will learn how to design and architect your .NET solutions and get a flying start to create, build and run Docker-based containerized applications.
.NET Fest 2019. Stas Lebedenko. Practical serverless use cases in Azure with ...NETFest
Serverless technology is trending, but in-depth details are missing. How does it fit with non-serverless components? What are the practical use cases? Should you fight vendor lock-in? And what about limits and pitfalls with Azure? I will answer those questions, share a few tricks and short demo.
I'll cover serverless usage scenarios with Azure, what problems can be solved, and what is a viable adoption strategy. Then I'm going to talk about technology shortcomings, when to omit it and how to rip all benefits. There are circumstances when a cloud-agnostic approach is beneficial, so I discuss serverless frameworks too and why vendor lock is not that bad. Finally, we'll look at a short demo that illustrates why you have to use specific serverless patterns.
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...NETFest
Do you recall those buzz words like TDD, BDD? Yep, but we know their problems as well!
TDD is too granular. BDD is too coarse-grained.
Unit tests are too chatty. BDD is too abstract.
TDD requires knowledge of implementation details. BDD does not care about implementation at all.
What is in the middle? Integration tests. Let's be Integration driven then! OK, then how to build infrastructure to run Integration tests? Should we start with IaaS first? How to speed up the development and take into account non-foundational requirements like scaling, security borders, isolation, etc. from the very beginning? To answer the questions, we would combine Integration test-based development with serverless (AWS) to solve a typical business task. Based on the example, we would show how to create a solid foundation for further refactoring/refining of the overall solution and concreting it with Unit tests.
Acceptance tests would be left for home exercise ;)
.NET Fest 2019. Сергей Корж. Natural Language Processing in .NETNETFest
This document contains the slides for a presentation on natural language processing (NLP) with .NET. The presentation introduces common NLP tasks like analysis, transformation, and generation. It discusses NLP concepts like bag-of-words, TF-IDF, n-grams, and word embeddings. Tools for NLP with .NET are presented, including ML.NET, Catalyst, and Microsoft Recognizers libraries. Demonstrations of text summarization and document tagging using these tools are described. The presentation concludes that NLP for basic tasks is possible with .NET libraries, though features are still limited compared to other languages.
.NET Fest 2019. Eran Stiller. Create Your Own Serverless PKI with .NET & Azur...NETFest
This document discusses creating a serverless PKI (public key infrastructure) using .NET and Azure Key Vault. It covers generating a root certificate on Key Vault, signing certificate requests with the root certificate, and issuing certificates to device subscribers. Code examples are provided for generating certificate signing requests, signing certificates with the root key, and storing certificates with private keys. The PKI can then be used to securely communicate with IoT devices by provisioning certificates and sending data to IoT Hub.
Temple of Asclepius in Thrace. Excavation resultsKrassimira Luka
The temple and the sanctuary around were dedicated to Asklepios Zmidrenus. This name has been known since 1875 when an inscription dedicated to him was discovered in Rome. The inscription is dated in 227 AD and was left by soldiers originating from the city of Philippopolis (modern Plovdiv).
Main Java[All of the Base Concepts}.docxadhitya5119
This is part 1 of my Java Learning Journey. This Contains Custom methods, classes, constructors, packages, multithreading , try- catch block, finally block and more.
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...PECB
Denis is a dynamic and results-driven Chief Information Officer (CIO) with a distinguished career spanning information systems analysis and technical project management. With a proven track record of spearheading the design and delivery of cutting-edge Information Management solutions, he has consistently elevated business operations, streamlined reporting functions, and maximized process efficiency.
Certified as an ISO/IEC 27001: Information Security Management Systems (ISMS) Lead Implementer, Data Protection Officer, and Cyber Risks Analyst, Denis brings a heightened focus on data security, privacy, and cyber resilience to every endeavor.
His expertise extends across a diverse spectrum of reporting, database, and web development applications, underpinned by an exceptional grasp of data storage and virtualization technologies. His proficiency in application testing, database administration, and data cleansing ensures seamless execution of complex projects.
What sets Denis apart is his comprehensive understanding of Business and Systems Analysis technologies, honed through involvement in all phases of the Software Development Lifecycle (SDLC). From meticulous requirements gathering to precise analysis, innovative design, rigorous development, thorough testing, and successful implementation, he has consistently delivered exceptional results.
Throughout his career, he has taken on multifaceted roles, from leading technical project management teams to owning solutions that drive operational excellence. His conscientious and proactive approach is unwavering, whether he is working independently or collaboratively within a team. His ability to connect with colleagues on a personal level underscores his commitment to fostering a harmonious and productive workplace environment.
Date: May 29, 2024
Tags: Information Security, ISO/IEC 27001, ISO/IEC 42001, Artificial Intelligence, GDPR
-------------------------------------------------------------------------------
Find out more about ISO training and certification services
Training: ISO/IEC 27001 Information Security Management System - EN | PECB
ISO/IEC 42001 Artificial Intelligence Management System - EN | PECB
General Data Protection Regulation (GDPR) - Training Courses - EN | PECB
Webinars: https://pecb.com/webinars
Article: https://pecb.com/article
-------------------------------------------------------------------------------
For more information about PECB:
Website: https://pecb.com/
LinkedIn: https://www.linkedin.com/company/pecb/
Facebook: https://www.facebook.com/PECBInternational/
Slideshare: http://www.slideshare.net/PECBCERTIFICATION
Chapter wise All Notes of First year Basic Civil Engineering.pptxDenish Jangid
Chapter wise All Notes of First year Basic Civil Engineering
Syllabus
Chapter-1
Introduction to objective, scope and outcome the subject
Chapter 2
Introduction: Scope and Specialization of Civil Engineering, Role of civil Engineer in Society, Impact of infrastructural development on economy of country.
Chapter 3
Surveying: Object Principles & Types of Surveying; Site Plans, Plans & Maps; Scales & Unit of different Measurements.
Linear Measurements: Instruments used. Linear Measurement by Tape, Ranging out Survey Lines and overcoming Obstructions; Measurements on sloping ground; Tape corrections, conventional symbols. Angular Measurements: Instruments used; Introduction to Compass Surveying, Bearings and Longitude & Latitude of a Line, Introduction to total station.
Levelling: Instrument used Object of levelling, Methods of levelling in brief, and Contour maps.
Chapter 4
Buildings: Selection of site for Buildings, Layout of Building Plan, Types of buildings, Plinth area, carpet area, floor space index, Introduction to building byelaws, concept of sun light & ventilation. Components of Buildings & their functions, Basic concept of R.C.C., Introduction to types of foundation
Chapter 5
Transportation: Introduction to Transportation Engineering; Traffic and Road Safety: Types and Characteristics of Various Modes of Transportation; Various Road Traffic Signs, Causes of Accidents and Road Safety Measures.
Chapter 6
Environmental Engineering: Environmental Pollution, Environmental Acts and Regulations, Functional Concepts of Ecology, Basics of Species, Biodiversity, Ecosystem, Hydrological Cycle; Chemical Cycles: Carbon, Nitrogen & Phosphorus; Energy Flow in Ecosystems.
Water Pollution: Water Quality standards, Introduction to Treatment & Disposal of Waste Water. Reuse and Saving of Water, Rain Water Harvesting. Solid Waste Management: Classification of Solid Waste, Collection, Transportation and Disposal of Solid. Recycling of Solid Waste: Energy Recovery, Sanitary Landfill, On-Site Sanitation. Air & Noise Pollution: Primary and Secondary air pollutants, Harmful effects of Air Pollution, Control of Air Pollution. . Noise Pollution Harmful Effects of noise pollution, control of noise pollution, Global warming & Climate Change, Ozone depletion, Greenhouse effect
Text Books:
1. Palancharmy, Basic Civil Engineering, McGraw Hill publishers.
2. Satheesh Gopi, Basic Civil Engineering, Pearson Publishers.
3. Ketki Rangwala Dalal, Essentials of Civil Engineering, Charotar Publishing House.
4. BCP, Surveying volume 1
বাংলাদেশের অর্থনৈতিক সমীক্ষা ২০২৪ [Bangladesh Economic Review 2024 Bangla.pdf] কম্পিউটার , ট্যাব ও স্মার্ট ফোন ভার্সন সহ সম্পূর্ণ বাংলা ই-বুক বা pdf বই " সুচিপত্র ...বুকমার্ক মেনু 🔖 ও হাইপার লিংক মেনু 📝👆 যুক্ত ..
আমাদের সবার জন্য খুব খুব গুরুত্বপূর্ণ একটি বই ..বিসিএস, ব্যাংক, ইউনিভার্সিটি ভর্তি ও যে কোন প্রতিযোগিতা মূলক পরীক্ষার জন্য এর খুব ইম্পরট্যান্ট একটি বিষয় ...তাছাড়া বাংলাদেশের সাম্প্রতিক যে কোন ডাটা বা তথ্য এই বইতে পাবেন ...
তাই একজন নাগরিক হিসাবে এই তথ্য গুলো আপনার জানা প্রয়োজন ...।
বিসিএস ও ব্যাংক এর লিখিত পরীক্ষা ...+এছাড়া মাধ্যমিক ও উচ্চমাধ্যমিকের স্টুডেন্টদের জন্য অনেক কাজে আসবে ...
LAND USE LAND COVER AND NDVI OF MIRZAPUR DISTRICT, UPRAHUL
This Dissertation explores the particular circumstances of Mirzapur, a region located in the
core of India. Mirzapur, with its varied terrains and abundant biodiversity, offers an optimal
environment for investigating the changes in vegetation cover dynamics. Our study utilizes
advanced technologies such as GIS (Geographic Information Systems) and Remote sensing to
analyze the transformations that have taken place over the course of a decade.
The complex relationship between human activities and the environment has been the focus
of extensive research and worry. As the global community grapples with swift urbanization,
population expansion, and economic progress, the effects on natural ecosystems are becoming
more evident. A crucial element of this impact is the alteration of vegetation cover, which plays a
significant role in maintaining the ecological equilibrium of our planet.Land serves as the foundation for all human activities and provides the necessary materials for
these activities. As the most crucial natural resource, its utilization by humans results in different
'Land uses,' which are determined by both human activities and the physical characteristics of the
land.
The utilization of land is impacted by human needs and environmental factors. In countries
like India, rapid population growth and the emphasis on extensive resource exploitation can lead
to significant land degradation, adversely affecting the region's land cover.
Therefore, human intervention has significantly influenced land use patterns over many
centuries, evolving its structure over time and space. In the present era, these changes have
accelerated due to factors such as agriculture and urbanization. Information regarding land use and
cover is essential for various planning and management tasks related to the Earth's surface,
providing crucial environmental data for scientific, resource management, policy purposes, and
diverse human activities.
Accurate understanding of land use and cover is imperative for the development planning
of any area. Consequently, a wide range of professionals, including earth system scientists, land
and water managers, and urban planners, are interested in obtaining data on land use and cover
changes, conversion trends, and other related patterns. The spatial dimensions of land use and
cover support policymakers and scientists in making well-informed decisions, as alterations in
these patterns indicate shifts in economic and social conditions. Monitoring such changes with the
help of Advanced technologies like Remote Sensing and Geographic Information Systems is
crucial for coordinated efforts across different administrative levels. Advanced technologies like
Remote Sensing and Geographic Information Systems
9
Changes in vegetation cover refer to variations in the distribution, composition, and overall
structure of plant communities across different temporal and spatial scales. These changes can
occur natural.
Communicating effectively and consistently with students can help them feel at ease during their learning experience and provide the instructor with a communication trail to track the course's progress. This workshop will take you through constructing an engaging course container to facilitate effective communication.
हिंदी वर्णमाला पीपीटी, hindi alphabet PPT presentation, hindi varnamala PPT, Hindi Varnamala pdf, हिंदी स्वर, हिंदी व्यंजन, sikhiye hindi varnmala, dr. mulla adam ali, hindi language and literature, hindi alphabet with drawing, hindi alphabet pdf, hindi varnamala for childrens, hindi language, hindi varnamala practice for kids, https://www.drmullaadamali.com
How to Make a Field Mandatory in Odoo 17Celine George
In Odoo, making a field required can be done through both Python code and XML views. When you set the required attribute to True in Python code, it makes the field required across all views where it's used. Conversely, when you set the required attribute in XML views, it makes the field required only in the context of that particular view.
Leveraging Generative AI to Drive Nonprofit InnovationTechSoup
In this webinar, participants learned how to utilize Generative AI to streamline operations and elevate member engagement. Amazon Web Service experts provided a customer specific use cases and dived into low/no-code tools that are quick and easy to deploy through Amazon Web Service (AWS.)
4. - Biggest provider in sport offering
- Supports a lot of regulated markets
- About 1000 microservices (200 distinct types)
- 5 datacenters maintained fully by SBTech
- About 500 concurrent live events at pick time
- On average we handle about 100K+ RPS
8. If we have sexy C#
class Person
{
public string FirstName; // Not null
public string? MiddleName; // May be null
public string LastName; // Not null
}
9. If we have sexy C#
switch (shape)
{
case Circle c:
WriteLine($"circle with radius {c.Radius}");
break;
case Square s when (s.Length == s.Height):
WriteLine($"{s.Length} x {s.Height} square");
break;
case Rectangle r:
WriteLine($"{r.Length} x {r.Height} rectangle");
break;
}
10. If we have sexy C#
public (string, string) LookupName(long id)
{
// some code..
return (first, middle);
}
var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");
13. Story of a new C# project
Get("/api/bets", async request =>
{
var result = Validator.Validate(request); // unit testable
if (result.IsOk)
{
var response = await _httpClient.Call(request);
return BetsMapper.MapResponse(response); // unit testable
}
else return Errors.MapError(result); // unit testable
});
16. public class BetsProviderService : IBetsProviderService
{
readonly IOpenBetsRepository _openBetsRepository;
readonly ISettledBetsRepository _settledBetsRepository;
public BetsProviderService(IOpenBetsRepository openBetsRepository,
ISettledBetsRepository settledBetsRepository)
{
_openBetsRepository = openBetsRepository;
_settledBetsRepository = settledBetsRepository;
}
}
Story of a new C# project
23. Recursive modules
type Plane() = member x.Start() = PlaneLogic.start(x)
// types and modules can't currently be mutually
// referential at all
module private PlaneLogic =
let start (x: Plane) = ...
29. Community growth
• To begin, F# has grown to be bigger than ever, at least as far as
we can measure, through product telemetry, twitter activity,
GitHub activity, and F# Software Foundation activity.
• Active unique users of F# we can measure are in the tens of
thousands.
• Measured unique users of Visual Studio Code
with Ionide increased by over 50% this year, to become far larger
than ever.
• Measured unique users of Visual Studio who use F# increased by
over 20% since last year to be larger than ever, despite quality
issues earlier in the year that we believe have inhibited growth.
• Much of the measured growth coincides with the release of .NET
Core 2.0, which has shown significant interest in the F#
community.
34. I need an API
to build
unique UI
The Problem
Oops?!
35. The Problem
Oops?!
1. well defined contracts (Event, Market, Selection)
2. flexible way to query data and subscribe on changes
3. push updates notifications about changes
4. near real time change delivery (1 sec delay)
We need to provide:
40. Subscribers
type NodeName = string
type LastHeartBeat = DateTime
type NodeSubscribers = Map<NodeName, LastHeartBeat>
type FeedStatus =
| ReadyForDeactivation
| HasSubscribers
| NoSubscribers
type ChangeFeed = {
Id: FeedId
View: FeedView
ChangeLog: ChangeLog
Subscribers: NodeSubscribers
Query: Query
Status: FeedStatus
}
Query
Feed View
2:2
1:0 Chelsea - Milan
Milan - Liverpool
Change Feed
Change Log
41. module ChangeFeed
let getSnapshot (feed: ChangeFeed, fastPreloadAmount: uint32) = ...
let getUpdates (feed: ChangeFeed, lastOffset: uint32) = ...
let getLatestUpdate (feed: ChangeFeed) = ...
let subscribe (feed: ChangeFeed, name: NodeName, currentTime: DateTime) = ...
let subscribeByOffset (feed: ChangeFeed, name: NodeName, lastOffset: uint32) = ...
let unsubscribe (feed: ChangeFeed, name: NodeName) = ...
let getInactiveNodes (feed: ChangeFeed, currentTime: DateTime, inactivePeriod: TimeSpan) = ...
let reloadView (feed: ChangeFeed, queryResults: QueryResult seq) = ...
42. Feed View
2:2
1:0 Chelsea - Milan
Milan - Liverpool
type PartialView = {
EntityType: EntityType
Entities: IEntity seq
}
type FeedView = {
OrderType: EntityType
OrderIds: string seq
OrderFilter: FilterFn option
Views: Map<EntityType, PartialView>
}
let tryCreate (queryResults: QueryResult seq, orderType: EntityType,
orderFilter: FilterFn option) =
match queryResults with
| NotMatchFor orderType -> fail <| Errors.OrderTypeIsNotMatch
| Empty -> ok <| { OrderType = orderType; OrderIds = Seq.empty
OrderFilter = orderFilter; Views = views }
| _ -> ok <| ...
43. [<Property>]
let ``empty ChangeLog should start with offset 0 and requested maxSize`` (maxSize: uint32) =
let changeLog = ChangeLog.create(maxSize)
Assert.Equal(0u, changeLog.Offset)
Assert.Equal(maxSize, changeLog.MaxSize)
[<Property(Arbitrary=[|typeof<Generators.Generator>|])>]
let ``all changes in changeLog.stream should have UpdateType.Update`` (payloads: Payload array) =
let mutable changeLog = ChangeLog.create(5u)
for p in payloads do
changeLog <- ChangeLog.append(changeLog, p)
let result = changeLog.Stream.All(fun change -> change.Type = UpdateType.Update)
Assert.True(result)
TDD without Mocks
44. We have our own frontend
but
we need a Data
The Next Challenge
Oops?!
49. Applied at the heart of the system
Zero Null Reference exceptions
Domain errors instead of exceptions
DDD with types (strong determinism)
Dependency Rejection
TDD without mocks (property based testing)
51. - Technology agnostic
(no dependency on HTTP, WebSockets, SSE)
- Very simple API
(to test Pull and Push scenarios)
- CI/CD integration
52. - Technology agnostic
(no dependency on HTTP, WebSockets, SSE)
- Very simple API
(to test Pull and Push scenarios)
- CI/CD integration
53. - Technology agnostic
(no dependency on HTTP, WebSockets, SSE)
- Very simple API
(to test Pull and Push scenarios)
- CI/CD integration
54. - Technology agnostic
(no dependency on HTTP, WebSockets, SSE)
- Very simple API
(to test Pull and Push scenarios)
- CI/CD integration
55. type Step =
| Request of RequestStep // to model Request-response pattern
| Listener of ListenerStep // to model Pub/Sub pattern
| Pause of TimeSpan // to model pause in your test flow
type TestFlow = {
FlowName: string
Steps: Step[]
ConcurrentCopies: int
}
type Scenario = {
ScenarioName: string
TestInit: Step option
TestFlows: TestFlow[]
Duration: TimeSpan
}
56. let execStep (step: Step, req: Request, timer: Stopwatch) = task {
timer.Restart()
match step with
| Request r -> let! resp = r.Execute(req)
timer.Stop()
let latency = Convert.ToInt64(timer.Elapsed.TotalMilliseconds)
return (resp, latency)
| Listener l -> let listener = l.Listeners.Get(req.CorrelationId)
let! resp = listener.GetResponse()
timer.Stop()
let latency = Convert.ToInt64(timer.Elapsed.TotalMilliseconds)
return (resp, latency)
| Pause time -> do! Task.Delay(time)
return (Response.Ok(req), 0L)
}
57. type TestFlowRunner(flow: TestFlow) =
let createActors (flow: TestFlow) =
flow.CorrelationIds
|> Set.toArray
|> Array.map(fun id -> TestFlowActor(id, flow))
let actors = createActors(flow)
member x.Run() = actors |> Array.iter(fun x -> x.Run())
member x.Stop() = actors |> Array.iter(fun x -> x.Stop())
member x.GetResult() = actors
|> Array.collect(fun actor -> actor.GetResults())
|> TestFlowStats.create(flow)
58. // C# example
var flow = new TestFlow(flowName: "READ Users",
steps: new[] {step1, step2, step3},
concurrentCopies: 10);
new ScenarioBuilder(scenarioName: "Test MongoDb")
.AddTestFlow(flow)
.Build(duration: TimeSpan.FromSeconds(10))
.RunInConsole();
69. F# vNext
Structural Type System
type User() =
member this.GetName() = "test user"
type Car() =
member this.GetName() = "test car"
let inline printName (x: ^T when ^T : (member GetName: unit -> string)) =
x.GetName()
|> Console.WriteLine