David Hoerster, a 5-time C# MVP, is a recovering corporate financial analyst and has been working with the Microsoft.NET Framework since the early 1.0 betas. He is the Sr. Solutions Architect for Confluence, a managed investments software product company. David is the conference chair of Pittsburgh TechFest, the leader of the Pittsburgh Reactive Systems user group (http://meetup.com/reactive), the former president of the Pittsburgh .NET User’s Group (PGHDOTNET) and is also a regular speaker at Pittsburgh and regional user group and community conference events. David can be found rarely blogging at http://blog.agileways.com and tweets occasionally at @DavidHoerster.
Sold OutDistributed applications are becoming more popular with the increasing popularity of microservices (however you want to define that term). But the principles of distributed application development are key if you want to build a system that is resilient, responsive, elastic and maintainable. In this workshop, we’ll review the principles of CQRS and the Reactive Manifesto, and how they complement each other. We’ll build an application that can handle a large stream of data, and allow users to still have a responsive experience while interacting with real-time and near-real-time data.
We’ll look at Akka.NET as the workhorse inside your services, and how the principles of CQRS can help with your service-to-service communications.
We’ll also look at how Event Sourcing can aid in managing your domain state, and how an event stream can be used to project data for your system for a number of different uses. We’ll build our own simple event store, but also look at commercially available stores, too.
This session will focus on using Akka.NET along with a few other tools and technologies, such as EventStore and MongoDB. The concepts learned in this session will be applicable to a number of different tools, technologies and languages.
You like baseball, you like MongoDB and you like .NET. Why not put them all together and achieve a zen-like state of being completely in touch with your data! This session will walk through some familiar and not-so-familiar baseball statistics and how you can crunch them using MongoDB’s aggregation pipeline. We’ll talk about MongoDB’s aggregation pipeline, the different components of the pipeline, and how they can be used together to calculate some SABR metric statistics. This talk will be mostly code and will alternate between the MongoDB shell and code using the C# driver.
This talk is updated from last year’s with the latest MongoDB 2.0 C# driver along with updated stats and some new calculations. If time permits, we’ll also look at some offline processing in order to calculate some of the more complicated statistics.
Oftentimes, we see workflow driven applications as a series of long running processes that just wait. Sometimes we see threads being put to sleep and awoken after several minutes to see if things have changed. Usually, in these situations, we end up being dependent on the order of items in our system and we end up spending much of our time programming for the situations where these items occur “out of order”. Event-driven systems take a lot of that “out of order” complexity away and treat events happening in our system as always “being in order” and our application ends up managing the overall state. In this talk, we’ll look at the pros and cons to this approach to system architecture and design and how we can build a simple event driven system using a messaging framework/toolset like, but not only, Akka.NET.
Over the past decade and a half, the way .NET developers have accessed data has gone from a pretty loose pattern of data readers and data sets (remember those???) to a more formal and patterned repository approach with complex ORMs like Entity Framework and nHibernate. But the pendulum is swinging back towards a simpler approach to data access, and this talk will focus on using a MicroORM (like Dapper.NET) in your .NET application. We’ll look at what a MicroORM is all about, how to get started with Dapper and how you can get up and running with Dapper with a full-featured but simple demo application. Learn how to keep your data access simple yet extremely powerful with this session!
Building a core data management service for your applications and systems is incredibly useful as it can provide a central hub of data management throughout your organization. But how do you expose that data and what protocol do you follow for querying, filtering and modifying your data service? Microsoft pioneered the OData protocol (now an OASIS standard) and has incorporated the standard into Web API 2. In this session, we’ll learn about the OData protocol, how it is enabled in Web API 2, and how you can extend data services to your data repository using OData….and you won’t even have to depend on the Entity Framework! We’ll also see how you can use OData with your data context of choice (even home-rolled!).
The general thinking is that when you create a new application, your data will be persisted into an RDBMS like SQL Server. But with the advent of NoSQL solutions, document databases, key-value stores and other options, do you really need an RDBMS for your application? In this session we’ll look at some alternatives to your persistence solution by looking at utilizing NoSQL solutions like Mongo, search services like Solr, key-value stores and other approaches to data persistence. By the end of this session, you’ll rethink how your applications will store data in the future.
You like baseball, you like Mongo and you like .NET. Why not put them all together and achieve a zen-like state of being completely in touch with your data! This session will walk through some familiar and not-so-familiar baseball statistics and how you can crunch them using Mongo’s aggregation pipeline. We’ll talk about Mongo’s aggregation pipeline, the different components of the pipeline, and how they can be used together to calculate some SABR metric statistics. This talk will be mostly code and will alternate between the Mongo shell and code using the C# driver.
You’ve designed your application, built it up, and it’s working great. One of the last features to implement is searching and reporting. You think you can get away with just implementing some SQL LIKE statements for an initial search, but you need to search across many fields or perform complexed grouped searches (like in Amazon that shows search counts by subcategory). You’ve put it off because you really don’t want to deal with SQL Server Full-Text Indexing – maybe it’s not your cup of tea or maybe it’s just intimidating or maybe you’re not using something other than SQL Server. But there are alternatives to Full-Text Indexing that can be just as powerful and fairly simple. Solr is one such open source tool to help you with your application’s searching needs. We’ll take a look at the Solr project, how you can get it up and running very easily, how you can install it as a Windows Service (as opposed to a command window), and how you can use program against it RESTfully and using Solrnet. We’ll look at basic searches along with some cool features like faceting, highlighting and rankings. If time permits, we can also look at how Solr can also complement a NoSQL environment. You won’t believe how easy incorporating Solr into your application can be!
As developers and architects, we use patterns regularly to provide consistency to our applications. But as patterns become popular, so do anti-patterns – those practices and habits that may seem productive, sensible or efficient, but end up causing problems down the road. We’ll explore a number of these misconceptions and bad practices (such as “Make Everything Multi-Threaded”, “WET” and more) along with a touch of humor. The anti-patterns and misconceptions will each be presented as a separate module with separate code examples.
You have the dream situation – the ability to create a brand new product from the ground up. You want it to be scalable, performant and easily updatable (since you’re building in an incremental fashion). But since you’re a start-up, you don’t want to deal with the headache and costs of hosting. Well, one possibility is taking advantage of cloud platforms (Windows Azure, for instance) and architecting your system using a CQRS-style pattern. See how you can create a system patterned on CQRS in the cloud. We can take a look at a product I created (BrainCredits) and also see how others would take advantage of Azure services to create CQRS-patterned systems.