2018 Sessions

CSS in a component-based world

React has caught a lot of criticism for the full mixing of HTML and JS, but it is a large portion of the rising tide of the JS landscape today - and many more websites are componentizing all the parts of the front end. Why are we leaving our CSS behind in giant stylesheets? CSS deserves the improved scope and modular building that we incorporate into today's HTML and JS. The goal of this talk is to approach the pros and cons of several different styles of handling CSS in a modular way, and reveal myths about performance that hold many back, while acknowledging the limitations of all the approaches. While focused on React examples, the core takeaways about modular CSS are not dependent on React, and apply to most component-based UI.

Deliver what the client wants instead of what they ask for! Getting your clients to tell you what they need.

As software developers, our goal is to typically write software that meets the needs of our clients, whether they be internal or external clients. Often times, when we miss the mark, it is due to a communication breakdown between the developer team and the client team on what the actual requirements are.

Communication breakdowns generally occur between people with different communication styles. So how do we bridge that gap and get the information we need from people who communicate differently than we do?

This talk will be an exploration of communication styles and how we can recognize our own communication style as well as easily determine the communication style of others. With this information we can communicate with someone in the style in which they best receive information. When we communicate with others in their learning style, we break down barriers and are more able to accurately get to the pain points that they need a solution for. Once the communication barriers are down, it becomes easier to get the requirements that we are looking for.

View Components and Tag Helpers in .NET Core

View Components were a new feature released as part of .NET Core MVC. They are a great way to create reuseable bits of code that are accessible in your MVC applications. I will walk you through code to create a View Component in an external library and consume it using the Tag Helper syntax in an MVC application

Zen and the Art of Asynchronous JavaScript

Promises. For so long, the sales pitch was "Promises save us from callbacks!" But how? And why? Other than keeping us from having to scroll horizontally, how are Promises solving things?

This session will start with explaining exactly what a Promise is, and how it deals with the shortcomings of callbacks. We'll look at how Promises allow us to do things that aren't really possible with callback code and thus how they really are a game changer. Next, we'll look at how we can use our newfound understanding of Promises to better exploit the power of the new async and await keywords that make asynchronous code look and feel more like synchronous code. We'll see how a deep understanding of what Promises are, and how to work with them are still extremely important when writing code using async and await.

Aurelia: Blazing Fast Web Apps

Aurelia is a JavaScript client framework for web, mobile and desktop that leverages simple conventions to empower your creativity. It's written with next-generation EcmaScript and the framework has no external dependencies. This session is an introduction to this simple to learn, and yet extremely powerful framework that will leave a smile on your face for years.

Twitch Bots and Live Streaming

Have you seen people talking about programming live streams? Are you interested to learn more about them? Then this session from Brendan is for you! In 2015, Brendan started up a programming live stream called DevChatter (https://www.twitch.tv/DevChatter/), but he put it on hold until February of 2018 when he started it up again and has been streaming regularly since.

In this session, Brendan talks about what he has learned so far and wishes he knew when he started about live streaming. Whether you want to live stream or are just interested in it, you will learn about getting started on Twitch using OBS, the hardware and setup needed, and how to keep an audience entertained on a live stream!

This is one session that you won't want to miss!

Making Use of New C# Features

New features are constantly being added to Microsofts flagship language, C#, and the pace of this change is increasing. In the past couple of years, we welcomed C# 6 and C# 7, the last languages release of their size. Microsoft is now releasing updates to the language in point releases, since C# is no longer tightly coupled to Visual Studio. In 2017 and 2018, Microsoft shipped C# versions 7.0, 7.1, 7.2, and 7.3 without any sign of slowing.

Normally, sessions about new language features only happen well before the release of the new language, leaving you with time to forget everything you've learned by the time you're actually able to adopt the new language! In this fast-paced session, Brendan will show you the recent, practical improvements added to C# that you can take back with you and immediately start using to clean up and improve your own code. This is definitely a session you won't want to miss!

Who Needs Visual Studio? A look at .NET Core on Linux

.NET Core promises to remove the shackles from Windows and Visual Studio. What does the development process look like and can you really use a Linux desktop as your daily development driver? Can you really go to production on Linux with your applications?

This talk explores .NET Core and ASP.NET Core from a different angle. What if we start in Linux and stay in Linux? It will explore the daily development life when you are going to be completely outside Visual Studio. This means getting to know the dotnet command line interface a little better. Then we'll explore how you can deploy your applications on Linux, including containers and deployment to the cloud.

This session is perfect for .NET veterans who are brand new to .NET Core and want to see what the brave new world looks and feels like. It’s okay if you’re unfamiliar with Linux, but are interested in having options available to you. And if you're curious what it's like to work in other tools such as Visual Studio Code and Rider, this session is for you.

Simply Containers: For times when Orchestration is Overkill

Kubernetes, Docker Swarm and Mesos are amazing container orchestration platforms. These tools provide a proven platform for container management and resource density. They are also complex distributed applications. We all know that just adding more bits to our stack doesn’t necessarily solve our problems. We’ll cover how to get started with containers in production via manual management and simplified container orchestrations tools, like Azure Container Instances.

Gaining Value from Telemetry

As developers, we know the power of telemetry. Telemetry events and logs provide diagnostic insights of our applications and infrastructure in a detailed, expressive and concise manner. In this talk we’ll navigate which metrics and tooling help us as web application developers, and how these various insights can be leverage across the office. By sharing application-oriented metrics, we can help the business side understand development and application struggles and gain their own insights to power business decisions-- all from those numbers that we already love to see.

Developing ASP.NET Core 2.1 Web APIs for your Web and Mobile Apps

ASP.NET Core 2.1 is a cross-platform web framework that can be deployed to Windows, macOS, Linux or even to Containers! It is the perfect framework to develop the Web APIs which drive the hottest web and mobile apps. The key is to have the right architecture in place to support the many benefits that ASP.NET Core provides.

In this session, we will discuss how using the Hexagonal Architecture (or the Ports and Adapter Pattern) allows your APIs to work more efficiently by allowing a clear decoupling of the API architecture. We will also discuss Data Access (Synthetic or Production) and Data Domain implications and the API endpoints (Controllers) that have no knowledge of the Data Domain. Finally, we’ll discuss how different Data Access technologies can easily be switched out without impacting the Domain or API Endpoints and how this impacts testing.

By using the Hex Architecture, your development story becomes easier, and your end user gets a much more stable API set to consume. We will discuss these concepts and get you started on using these tools with your ASP.NET Core 2.0 Web API projects.

Feed your inner data scientist: JavaScript tools for data visualization and filtering.

It seems like every day a new JavaScript framework is created and it can be overwhelming keeping up with them. This session will discuss some JavaScript libraries that make analyzing and displaying data a snap.

We will discuss D3.js, CrossFilter.js, DC.js and jQuery DataTables.  These are very robust community supported libraries.  Use them in your client application to add interactive visualizations and data analysis tools.

What's new in Visual Studio and C# 7

Visual Studio is a consistently great tool for developing applications on the Windows platform. In this talk we will discuss the productivity improvements added to Visual Studio 2017 that make it even better.

Along with the improvements to Visual Studio, C# was also improved. We will also talk about the new language features introduced in C# 7. Starting in December of 2015, C# 7 was developed in the open with involvement from the community. We will talk about the results of that process.

Dev Oops! Common mistakes implementing DevOps and how to avoid them

If you ask for a definition of DevOps, you are likely to get many different answers. Is DevOps someone's job title? Is it just Developers and Operations team sitting together? Is it automation? Is it yet another buzzword? In this session, we'll get a common understanding of DevOps and cover common mistakes that teams run into as they implement DevOps in their organization.
DevOps encompasses a broad range of mindsets, practices, and tools that build upon organizational agility to take software delivery to the next level of maturity. Applied correctly, these are truly transformative: they accelerate and amplify feedback loops, shorten cycle times, optimize resources, enable quality and consistency, and foster collaboration and creativity throughout your organization.
Some of the challenges that DevOps aims to fix include:
• Limited human and/or technical resources for testing
• Manual, ad-hoc, or inconsistent deployments
• Resolving production issues may be slow and/or highly disruptive
• Deployments are large and take a substantial periods of time to deliver
• High infrastructure costs and/or budget constraints
• Challenges in testing
• Lack of collaboration between organizations such as business, IT, and Development

You will learn about DevOps concepts and the path that an organization should take to implement DevOps practices. We will cover the ways that a company can start transforming their culture and defining the processes that enable DevOps. This session will teach you about the tools that you can use to get started on your DevOps path, including Visual Studio, Team Services, and cloud computing with Azure.

There is a Bot for that: Building chat bots from idea to production

Chat bots are turning up everywhere. Helpdesks, ordering a pizza, ChatOps, everywhere you look there's chat bots being created. How do you create your own successful chat bot?

In this session Geert will explain how to build your own bots using .Net, C#, Azure and the Microsoft Bot Framework. During the session we will cover all areas involved in building a successful production ready bot. Starting from the initial idea to getting a prototype working as fast as possible to actually running it in production on channels such as skype, facebook or telegram.

After this session you'll be fully ready to build your own bot that will conquer the world (if Sarah Connor doesn't stop it)

Dockerize an ASP.NET Core 2.0 Application

Docker is a tool that can package an application and its dependencies in a virtual container to run on any computer. It helps enable flexibility and portability on where the application can run. ASP.NET Core is an open source, cross platform, performant, and scalable web application framework. The modularity and lightweight nature of .NET Core makes it perfect for containers. Today, I am going to give a brief introduction of Docker and show everybody how to run an ASP.NET Core 2.0 Application in Docker containers.

Programming the Blockchain with .NET Core

A Blockchain is a digitized, decentralized, and encrypted database for recording transactions. It becomes one of the technologies that got a lot of attentions this year. People even said that the Blockchain will become “the New Internet”. As software developers, we need to understand Blockchain, try Blockchain, and be ready for the disruption introduced by the Blockchain. I have been learning and trying Blockchain for a while. I founded a Blockchain club at my company. I created Blockchain Applications at Hackathons. Today, I am going to give a brief introduction of Blockchain and show everybody how to programming the Blockchain with .NET Core.

Confessions of an Imposter: You're not alone

Ever feel like you don't belong? Like your work just isn't as good as anyone else's? In this talk, I discuss what it means to be an imposter, something that almost everyone feels at some point in their careers. I discuss best ways I have found that I can manage my imposter syndrome and how I have overcome it at certain points in my career.

Enable IoT with Edge Computing and Machine Learning

The next evolution in cloud computing is a smarter application not in the cloud. As the cloud has continued to evolve, the applications that utilize it have had more and more capabilities of the cloud. This presentation will show how to push logic and machine learning from the cloud to an edge application. Afterward, creating edge applications which utilize the intelligence of the cloud should become effortless.

Building a Serverless Microservice with Microsoft Azure

In this session we will walk through the considerations and thought process for planning and building a serverless microservice using Microsoft Azure Functions. Serverless functions are a great way to quickly build an event driven backend in the cloud that can support the majority of web use cases and provide a potential cost savings for hosting. Attendees will learn about the planning that goes into building a microservice like this and the decisions they need to make for their own implementations and what tools can help them solve problems.

Getting Started with Blazor: the .NET WebAssembly SPA

WebAssembly is a new standard that is currently supported by the major browsers and the W3C, something which will augment JavaScript and allow for new integrations with other languages. Blazor is (currently) an experimental framework being worked on at Microsoft which attempts to, with the help of the Mono WASM runtime, allow developers to write pure client Single Page Applications (SPAs) in C# using .NET Core. In this talk, we will walk through the features of Blazor and how to use it.

.NET Framework Improvements, Tips, and Tricks

There's a lot of talk about the .NET Core framework, but what about the .NET Framework for Windows? With the recent releases of .NET and the Windows 10 Updates, there are lots of improvements that you can use in your existing applications. Join us as we learn about the new features for Windows Forms, and ASP.NET developers in Visual Studio 2017 and Windows.

Build the Realtime Web with SignalR Core and Azure SignalR service

ASP.NET developers have been using SignalR to build real-time web applications since 2013. Now, with ASP.NET Core 2.1, we’re bringing SignalR over to ASP.NET Core so you can build real-time web applications with all the benefits of ASP.NET Core like better performance and cross-platform support. Come learn about the new design and how to take advantage of the infinite scale of the Azure cloud that gives you a much more flexible platform on which to build the future of real-time .NET server applications.

Learn to Love Lambdas (and LINQ, Too!)

Lambda expressions can be confusing the first time you walk up to them. But once you get to know them, you’ll see that they are a great addition to your toolbox. Used properly, they can add elegance and simplicity to your code. And some .NET constructs (such as LINQ and Task) lend themselves to lambda expressions. We’ll take a look at how lambda expressions work and see them in action.

Clean Code: Homicidal Maniacs Read Code, Too!

There's no such thing as a write-once application. The world is constantly changing, and our code needs to change with it. We'll think in small pieces and take a look at some principles and techniques that will keep our code manageable and understandable. Think about the developer who will come after you. Now, imagine that he's a homicidal maniac who knows where you live.

Say Yes to NoSQL for the .NET SQL Developer

NoSQL is not about saying "no" to SQL but "yes" to new possibilities. Learn what key/value, column store, document, and graph databases have to offer compared to traditional relational database models. See hands-on how to create your own databases in seconds that are geo-replicated, highly available and offer guaranteed rates of throughput without purchasing expensive servers or configuring virtual machines by taking advantage of the serverless Azure CosmosDB. Discover for yourself why NoSQL is being widely adopted and used in petabyte sized production databases that need to visualize data fast.

DevOps with Kubernetes and Helm

In this session, we will show you how you can use standard DevOps practices such as infrastructure as code, continuous integration & continuous deployment, automated release and more in conjunction with Kubernetes (AKS) and Helm. For those who don’t know, Helm is a tool that streamlines installing and managing Kubernetes applications; it’s like homebrew for Kubernetes, but it’s also so much more.

By the end of this session, you will understand how key DevOps practices tie right into container orchestration with Kubernetes and Helm.
You will have more confidence and tools in your toolbox when it comes to Kubernetes.
You will have a deeper understanding of what Helm is, how it came to be, and how it correlates to Kubernetes.
After providing a brief, high-level overview of DevOps and Kubernetes/Helm, we will dive into a live demo showcasing how to get started with Kubernetes by deploying a Go app through a full CI/CD pipeline using a pre-configured Helm chart.

Improving code quality with Static Analyzers

How do you keep code consistent across a team or make sure your independent code follows accepted standards, use a Static Analyzer tool. See how to use some of these tools for your .Net, JavaScript, Style sheets, etc. to improve your code as an independent or large team lead.

Whether you're an independent developer that needs assistance reviewing your code, or a member of a large team that wants to keep code consistency among the team, static analyzer tools can help identify and optionally fix issues in your code. Many platforms have their own version to help based on the language, including Roslyn, JsLint, CssLint, SonarQube. FxCop, StyleCop, etc. We'll take a look at some of these tools and explore how they can help identify issues in your code and improve maintainability and decrease errors before you deploy to production. We'll also look at the ability to build your own tool to enforce rules in your specific domain.

Getting pushy with SignalR and Reactive Extensions

As our systems increasingly demand more real-time updates, we need better ways of working with these live streams of information. Traditional pull models fail to provide the real-time responsiveness and scale needs that modern systems expect. Moving to a push model allows us to scale easier and react to new data as it becomes available. SignalR facilitates push notifications over HTTP to a variety of clients. The Reactive Extensions were designed to allow for asynchronous LINQ over push based collections. In this talk, you’ll see how the synergy of these two technologies merge to make otherwise difficult tasks, a push over.

Mocking .NET Without Hurting Its Feelings

Unit testing has become an accepted part of our lives as .NET programmers. To help focus our tests to only the code we want to validate, Mocking Frameworks are a powerful tool in our toolbox. Like many tools, if you have an understanding of how the tool works under the hood, you can bend it to your will (and also know where it'll break if you bend too much).

In this session, you'll learn about the two main types of mocking frameworks: constrained frameworks (like RhinoMocks and Moq) and unconstrained frameworks (such as Typemock Isolator and Telerik JustMock). I'll dig into how the two actually do their magic and we'll discuss the pros, cons, and limits of both. We'll look at examples of how to use the frameworks in your tests, mocking out dependencies from your own code and even third-party logic.

You'll get the most out of this session if you're comfortable reading C# code and have a general understanding of class inheritance in .NET, along with some experience writing and running unit tests. Prior experience using mocking frameworks is not necessary.

Building Better REST APIs in ASP.NET and ASP.NET Core

Web API is the RESTful API framework for ASP.NET, now simply part of the MVC framework in .NET Core. With service layers becoming an increasingly important part of all kinds of different applications, getting better at implementing this layer of an application is becoming a critically important skill.

Join me while I walk you through some of the coolest, most practical and useful things I've learned while developing services using Web API and ASP.NET. We'll look at some useful patters, amazing Nuget packages that save you lots of time and effort, tips, and even some anti-patterns that hold you back. Everyone should walk away with at least a few new things they can use to develop a better service layer in ASP.NET.

Typescript for the Microsoft Developer

Whether you like it or not, if you are building applications for the Web you are going to need to know JavaScript. Sorry, Flash and Silverlight! Unfortunately, JavaScript is not the easiest language to learn or to understand and the tooling for it is not really good. This is where TypeScript comes in. TypeScript is a superset of JavaScript that tries to solve a lot of these problems and make the code more structured, and less error-prone. And it also offers tooling support in a way that JavaScript just can’t.

Look into your Application with Azure Application Insights

Azure Application Insights helps you to detect issues, diagnoses crashes and track your application usage in your application, both web, and mobile.

Let’s see how you can get alerts on performance and availability issues, monitor our applications usage and performance, get telemetry for our application without needing to redeploy the applications, search traces, and exceptions logs to figure out what is wrong. Oh, did I mention we can monitor Android, iOS, Windows Mobile applications as well as ASP.NET applications?

We’ll also take a look at how we can analyze request load, server performance counters and response times across dependencies. Get multi-dimensional analyzes over standard metrics or define your own. Diagnose exceptions, mobile application crashes, and failed requests, correlating with events and traces.

git gone wild: how to recover from common git mistakes.

"Oh no! I just typed something into git and now my work is gone! Ahh!"

Don't panic. Contrary to popular belief, git is one of the most non-destructive version control systems available. When used right, git
never loses any data, and even when misused, chances are very high you can still recover.

This talk will present turn-by-turn directions on how to recover from a wide array of common git mistakes, and also provide some workflows
to minimize them.

Examples include, but are not limited to:
* Changing spelling errors in commit messages.
* Split commits into multiple commits with logical separation.
* Combining multiple commits into one.
* Resetting the base commit when you accidentally branch off of the wrong branch.
* Recovering from merge conflicts.

As well as more advanced topics, such as:
* Extracting parts (e.g. sub-directory) of a repository as a new repository.
* Merging multiple repositories into one while retaining version history.
* Removing confidential data accidentally committed.

OOP, SOLID, and Mixins with TypeScript

TypeScript is a fully OO superset of JavaScript. As a result, it can do everything you'd expect from an OOP language. In this talk, we'll demonstrate those things, including encapsulation, inheritance, polymorphism, the SOLID Principles, and Mixins. All demos will naturally be done in TypeScript.

How Microsoft Does DevOps

Learn how the Visual Studio Team Services (VSTS) team at Microsoft has changed their approach to building software and services by adopting an Agile culture and mindset. Paul Hacker takes you on a journey of contrasting the “old way” with the “new way”, and shares key changes that contributed to the transformation including thoughts on teams, roles, sprints, planning, and learning.

Raising the Value of Your Unit Tests

For any non-trivial application created today, software engineers must not only deliver on application features but also include associated unit tests to improve efficiency, to reduce risk when making code changes, and to improve quality by identifying bugs as early as possible. One may think having unit tests to increase code coverage is the goal but that is missing the mark. Software engineers should be focused on delivering unit tests that have meaningful value to support current and future software development. In this session, you will learn several unit test styles, how identify weaknesses in unit tests, and how increase the value of the unit tests you create.

What can Visual Studio do for Mobile Developers?

So you are a Mobile developer? Looking for sanity amidst a plethora of platforms, frameworks and tooling options? Wondering if Visual Studio is the right IDE for you? Let me convince you why .. let’s talk:

• Visual Studio for Windows & Mac
• Easy getting started experience
• Mobile to Cloud end-to-end tooling
• Emulator/Simulator choices
• Live deployments and device testing
• DevOps with Visual Studio App Center
• Polished UI through Extensions

Visual Studio is the epitome of Microsoft's 'Mobile First, Cloud First' mantra. With rich tooling for mobile developers across Windows and Mac, Visual Studio is paving the way for true cross-platform mobile development from a single rich IDE.

Optimizing ReactJS

ReactJS is a powerful library that makes it easy to build, reason about, and organize HTML user interfaces. The library is very fast and efficient, but you can encounter issues at scale if you don't know what to look out for. In this session, we'll build a simple single page ReactJS app and explore how to use tools and libraries to measure and then optimize performance.

Why loop in JavaScript when you can map, reduce or filter?

Traditionally, when developers see large arrays of data their "go to" tool for parsing and searching has been the for loop. But JavaScript provides a more declarative approach that can help you find what you're looking for in fewer lines of code that is cleaner, easier to read, and maintain. Come see how the map(), reduce(), and filter() functions can help you!

Patterns for Building a Chatbot that doesn’t Suck

To believe the hype today, “Chatbots are the new mobile app” (if you don’t have one, you’re probably some sort of throwback to a bygone age). We’ve all been told that the confluence of the explosion of the number of chat messaging platforms, the increasing amount of attention users give to messaging experiences (at the expense of other experiences), huge improvements in NLP (Natural Language Processing), and the increased efficacy of Artificial Intelligence are all combining to make chatbots “the next frontier in user engagement”. And yet, if all that is true, why is Facebook pulling back on its promotion of Facebook Messenger Chatbots as their own data shows up to 70% of current Facebook chatbots are considered a “failure” by Facebook users?

In this talk, we’ll try to separate the hype from reality about the current (and future) state of chatbots. Through this process, we’ll identify a series of important design considerations that can form the foundation of any successful chatbot project and explore the patterns and techniques that can help you develop a truly useful conversational experience for your users. Using node.js, the Microsoft Bot Framework, and Microsoft Cognitive Services as an example platform, we’ll explore a detailed implementation built using all the principles that can help make your chatbot successful.

AI for the Masses: Democratizing Access to AI with Microsoft Cognitive Services

In all its previous hype-cycles, Artificial Intelligence (AI) repeatedly fell far short of its promises. Computers were underpowered and consuming AI was too complicated, leaving its benefits unapproachable to all but a small group of experts. But now advances in Machine Learning coupled with the scale of the Azure Cloud bring us Microsoft Cognitive Services, a collection of purpose-built capabilities based on AI and Machine Learning that make it possible for developers of all backgrounds to easily enrich their own projects with these powerful capabilities.

In this talk we’ll explore the universe of Microsoft’s Cognitive Services and understand how to use them in your own software projects. We’ll explore services for Facial Recognition, object detection, Natural Language Processing (NLP), as well as Topic Extraction and Sentiment Analysis. We’ll apply these services to various media types from still images to video to text to discover how easy it can be to bring the power of AI and Machine Learning into your own software systems.

Using WebUSB to create modern interfaces for hardware and robotics

The browser’s capibilities have snuck up on us over the years, and it’s turned into a full blown operating system! "But wait," I hear you protest, "it’s not like the browser can talk to stuff I have plugged in to my USB ports!". Ah! But it can!

The new WebUSB spec has arrived, and is already supported in at least one browser today. The previous hacks of connecting browsers to robots and other hardware will soon be a thing of the past. WebUSB as a first class API citizen opens up some great opportunities to create new and delightful experiences with robotics.

I’ll introduce you to the WebUSB API, its history, and compare it to previous ’hacks’ to demonstrate why this is such a big deal for you, as a web developer. There will be real hardware shown on stage ready to inspire you to think outside of the box of what browsers are really meant to be used for.

Living on the Edge with Web Assembly (Blazor and C#)

A peek into the future of web development, what the heck is Web Assembly and why should developers care!. With the introduction of Microsoft experimental web UI framework Blazor its now possible to harness your C#/.Net Skills to build full blown Web Assembly applications. Come learn and discuss the future of web development.

You won’t believe what’s hidden in your data. How visualization transforms how you see information

No one questions that data is vital to your company or organization. The future wellbeing of your business could depend on the clues hidden inside the vast data stores in your data center. Some days, looking at the data opens your eyes to possibilities, yet another day the data is opaque and hard to parse. Often the only difference between these two results is the way the information is visualized and presented to your eyes.
Choosing the correct visual representation of the data becomes vital. Do it wrong and the data is merely wrapped in pretty graphics; do it right and the information emerges in clear and meaningful patterns.

This fast paced and entertaining session starts by looking at how your brain and optical system perceive data. Walt explores the overall visualization concepts that make data easier to grasp, and the best way to show data so that the information is clear and understandable.

34 speakers giving 45 sessions (View all stats)