Most Active Speaker

Bob Crowley

Bob Crowley

Software Engineer, .NET

Portland, Maine, United States

Bob Crowley is a Software Engineer near Portland Maine where he builds solutions in the .NET ecosystem. He has been writing bugs for over 20 years. He is on the organization committee for New Hampshire's Granite State Code Camp where he builds and operates a Capture the Flag competition for attendees.

In his free time he likes to make the most of both weeks of Maine's summer either fishing out on the ocean or throwing discs at trees.

Find Bob on LinkedIn as contrivedexample

Awards

  • Most Active Speaker 2023

Area of Expertise

  • Information & Communications Technology

Topics

  • .net
  • .net core
  • ASP.NET
  • Visual Studio / .NET
  • SQL Server Data Tools
  • sql server
  • Power Apps
  • Power Automate
  • Microsoft Teams

Imposters! faking endpoints over-the-wire

Faking remote services can be very useful. Maybe you need to build against a service that isn't created yet, mock micro service dependencies, test against an API that only has a production instance or validate a large number of data scenarios that would be difficult to achieve with a "real" instance.

For these reasons and more, Mountebank is the best free, cross platform tool for the job. With it, you can spin up your imposter services and have them respond over-the-wire, just like the real thing.
These imposter endpoints can be instantiated from a configuration file, on the fly based on business logic of an executing test, from any tool that can make a POST or any combination of them.

It works by exposing stubs filtered by predicates that dynamically match a request with a response based on properties you define in the URL, headers, body content, etc. It can even be configured to respond in multiple ways per predicate in a round-robin fashion.

And its not just for HTTP. Mountebank supports TCP, SMTP and other community contributed protocols.

This session shows you how easy it is to harness the power of Mountebank to create and use imposters. We demonstrate starting the tool, spinning up imposters via code or http tool (like postman), employing security, viewing the logs, capturing and validating responses and tearing down when done.

By the end of this session you will have the knowledge to begin leveraging imposters in your testing workflow to gain more confidence in your software.

Modern Web Automation Testing

Modern web applications require a modern tool for automated testing. Something that can handle both mobile and desktop, async operations, shadow DOM, all the browsers and much more.

Enter Playwright. Designed for all the needs of modern applications, Playwright checks all the boxes.

This session is all about getting to know how Playwright works and seeing its features in action. Features like Codegen to generate tests by recording user actions, the Inspector which allows you to step through detailed history, the Trace Viewer that captures detailed execution information, recording videos and screenshots and an overview of the API.

Demos will use Typescript, but this cross platform tool also supports javascript, Python, .NET and Java.

So ditch those flaky tests, grab a tool that has all-inclusive features and enjoy reliable end-to-end testing for building robust web UI's.

For the DotNoobs! Leveling Up Your C#

So you have some C# experience but you're still a little green. Chances are you are making common mistakes without realizing it. This session will accelerate your experience level in just one hour by pointing out things you will never do wrong again, and do so in an easy to understand way.
We'll cover as many mini-topics as we can in 60 minutes, including:
* What a reference type really is and what it means to pass by reference.
* Using HttpClient correctly.
* Async/Await mistakes.
* Exception Handling.
* Dependency Injection
* Unit Testing
* Visual Studio features you should use.
And more, time permitting !

psst, even experienced programmers might pick up a thing or two...

Debug Like It's Your Job

Being a developer is not just about writing code - that code has to actually work and figuring out why it doesn't is a different mindset than writing it. Debugging is not a prescribed recipe, it is a necessary skill for any developer. While this ability is inevitably gained through experience, there are tips, tricks and techniques you can learn to level up your effectiveness as a programmer right now.

For the novice, student or new-grad, this session takes you through the most common things you don't know yet.

- how to use breakpoints effectively (there's more to it than you think)
- what the heck step-into, step-over and step-out do
- how to view and manipulate runtime state
- how to use your environment's interactive terminal to interrogate your program
- what the stack is and how it contains a wealth of information
- the importance of Known Good Values (KGVs)
- being a good investigator

This session saves you from all of those stackoverflow.com downvotes and "did you even debug this?" comments. Bring a laptop and play along! Your browser tools are sufficient to try out many of the presented concepts.

Postman Delivers! A Deep Dive into API Testing.

Whether you are a tester or a developer of HTTP API’s, chances are you are already using Postman to some degree. Chances are also that you are missing out on some of the advanced goodness. Using only features of the free version, this session introduces you to effective use of these features to save time, reduce errors and share your work.

You learn how to :

- unclutter your collections with environments
- create dynamic requests with the powerful scripting environment
- chain requests (never run a separate utility to generate auth tokens again!)
- data drive an entire suite of tests with just a few clicks.
- backup and share your work
- automate the whole shebang from the command line, optionally with reports
- much more...

Ditch the click/wait/verify/repeat cycle! Many concepts presented here apply to API testing in general, whether you use another tool or test with code only. Save time and gain confidence in your software.

This is an updated version of a presentation that has been well received at various meetups, code camps and conferences. Here is a link to a (free) Pluralsight recording from CodeMash 2020.

Leveling up your C#

A programming language is more than syntax. Behavior and use are idiomatic; to be effective you need to know the nuances of the language. In this session you learn how to easily avoid some of the most common C# mistakes that really make a difference in the quality of your software. Whether you are a junior(ish) developer or you’re coming from another language, there are several common things often done incorrectly, or that could be done better. Some things you will never do wrong again include:

- Async/Await basics: possible duplicate of async/await basics
- Encryption Mistakes: TMI
- Parameters in ADO.Net: What is your quest? “To seek the index”
- Exception Handling: Don’t throw the stack out with the bath water
- By ref Reference Type arguments: I object!
- IDisposable: Knowing when it’s time to let go

Presented previously at Boston and Vermont Code Camps.

Debug Like It's Your Job

Being a developer is not just about writing code - that code has to actually work and figuring out why it doesn't is a different mindset than writing it. Debugging is not a prescribed recipe, it is a necessary skill for any developer. While this ability is inevitably gained through experience, there are tips, tricks and techniques you can learn to level up your effectiveness as a programmer right now.

For the novice, student or new-grad, this session takes you through the most common things you don't know yet.

- how to use breakpoints effectively (there's more to it than you think)
- what the heck step-into, step-over and step-out do
- how to view and manipulate runtime state
- how to use your environment's interactive terminal to interrogate your program
- what the stack is and how it contains a wealth of information
- the importance of Known Good Values (KGVs)
- being a good investigator

This session saves you from all of those stackoverflow.com downvotes and "did you even debug this?" comments. Bring a laptop and play along! Visual Studio will be the main focus but the topics apply to any modern IDE and even the browser dev tools.

A more Visual Studio focused version of the same session I have/will present at Granite State Code Camp, Boston Code Camp and Code Mash 2019.

I've Got a Configuration Secret (and I don't even know what it is)

Keeping secrets safe and out of source code has always been challenging. De-coupling sensitive information like connection strings, certificates and passwords keeps these secrets out of source control where it is all to easy to expose them unintentionally.
This session focuses mostly on .Net Core Configuration and also provides an overview of how to leverage Azure App Service Settings, KeyVault and Managed Identities for Azure Resources to help alleviate this long-standing problem. Additionally we will see how to consume configuration even when you, the developer, don't have access to production secrets.
Demonstrated are three application scenarios - A non-Azure-hosted app, An Azure-hosted app and local debugging.
Time permitting, we will also see some techniques for managing secrets in full-framework applications that typically rely on web.config files.
This presentation gives you the basic knowledge to keep secrets out of source code while still assuring correct production configuration.

60 minutes. Will try to compensate for lack of Internet but ideally should have a strong connection. This session has been well received: https://twitter.com/hutchcodes/status/1112496377009979394

For the DotNoobs! Leveling up your c# (part 2)

So you have some C# experience but you're still a little green. Chances are you are making common mistakes without realizing it. This session will accelerate your experience level in just one hour by pointing out things you will never do wrong again, and do so in an easy to understand way.

If you attended my DotNoobs session before, this is completely new content. If you haven't, each topic stands on it's own and no prior knowledge is assumed or required.

We'll cover as many mini-topics as we can in 60 minutes:

Initialization and execution order of properties, fields and constructors.

Gotchas, behavior and guidance of method overloading.

Why you can't make encryption secure if your app has access to keys. If your app can decrypt, then so can your user!

Working with databinding instead of against it.

What it really means to close an ADO.Net database connection and why you should not try to manipulate the connection pool.

Why Path.Combine() exists and why you should always use it.

Deferred vs. immediate execution of Linq queries and the implications on performance.

Why GUIDs typically make a terrible database primary key.

The myth of Disposable and memory leaks. You are not really leaking memory unless you are writing to unmanaged memory or you are using a poorly written library that does.

Target audience: New(ish) to c#. Applies to developers experienced in other languages.

Azure Dev Ops - An Intro to Build and Release Pipelines

Whether you’ve never taken a look at Azure Dev Ops, or you are confused by the terms Agent, Build, Release, Task, Job, Artifact, etc., this session introduces you to techniques to take control of your software deployments.
Starting with an overview of Azure Dev Ops, we progress through an entire build and release pipeline, learning specifics along the way like defining the Build and adding Tasks to pull the source code, build it and test it. Next, we create an associated Release pipeline and deploy to targets like Dev, QA and Production.
Getting started, even for commercial use, is free for up to 5 users, and it is not just for Microsoft’s Team Foundation Version Control! Dev Ops supports 7 different repository sources including GitHub and supports any language, any project. The demonstration project will be sourced in GitHub and deployed to an Azure App Service live on the Internet.
Attendees walk away with an understanding of how to create basic end-to-end build and release pipelines that eliminate human error and achieve stable, repeatable software releases.

Requires Internet access.

Keeping Configuration Secrets Out Of Source Code

Keeping secrets safe and out of source code has always been challenging. De-coupling sensitive information like connection strings, certificates and passwords keeps these secrets out of source control where it is all to easy to expose them unintentionally.
This session focuses mostly on .NET Configuration and also provides an overview of how to leverage Azure App Service Settings, KeyVault and Managed Identities for Azure Resources to help alleviate this long-standing problem. Additionally we will see how to consume configuration even when you, the developer, don't have access to production secrets.
Demonstrated are three application scenarios - A non-Azure-hosted app, An Azure-hosted app and local debugging.
This presentation gives you the basic knowledge to keep secrets out of source code while still assuring correct production configuration.

Presented at Code Camp NYC 2019 and Vermont Code Camp 11

The Land of az - Azure automation with Powershell and the Azure CLI

The Azure portal is great for reviewing details of your resources and one-time operations. But when it comes to repetitive tasks, you can save time and reduce errors by executing a tested, repeatable process. This session dives into the scriptibility of Azure through the Azure Command Line Interface and the Azure Powershell cmdlets.
We’ll quickly go over installation and general use, including how to accept input from users and other sources like KeyVault. In the case of the Azure CLI, we’ll see how to parse output with JMESPath queries for formatting and for using the results in subsequent commands. Then we’ll see how to execute these commands and scripts from a terminal, the Azure Cloud Shell, Automation Runbooks and even the Azure Android app! Finally, we will introduce Bicep, the new domain specific language for coding ARM templates.
Whether you simply want to have a virtual machine automatically started every morning and stopped every night, or you need to provision complex multi-tenant resource deployments, automation scripting is the solution. This session will give you the knowledge to get started automating Azure right away. If you have an Azure subscription, bring your laptop or mobile device and hack along with me.

Power Apps Component Framework

Don't let Citizen Developers have all the fun! There is a place for pro devs in the Power Platform too. This session introduces the Power Apps Component Framework, which allows you to build code components for model and canvas apps. What are code components? Code Components are user interface objects that you build yourself with custom logic, implemented with typescript. Imagine if the Power Platform lacked a gallery component. You could build that! In this session we will demonstrate a real world component implementation that you can download and use today.

To lay the ground work, we will briefly review the concept of solutions, then we will dive right into the Power Apps command line interface to generate a componet project. We will go over the project assets and the typescript implementation of a custom component that you can use in your apps and even share on AppSource. Finally, we will import this component into a Power App and see how it is used along side all the other UI elements you are already familiar with.

Other conferences include Code Mash, Tech Bash, Agile+DevOps West, as well as numerous code camps and meetups. This session is designed for a 60 minute time slot.

Capture the Flag Challenges Explained

Come join me for this session where we go over the solutions to the Capture the Flag challenges. Whether you've been working on them all week or this is the first you hear of it, we're going to have some fun figuring out the answers to these security-related puzzles. You'll see a little cryptography, a little hacking and a little nonsense.
Even if programming is not your forte, come get a look at what sneaky things can be done with simple tools a little perseverance.

Unit Testing T-SQL with Visual Studio SQL Server Data Tools

The Data storage and processing workload for Visual Studio includes SQL Server Data Tools which is now fairly well known as a way to develop and source-control your database. Not so well-known are the unit testing tools you get access to with this feature.

Applicable to anyone using MS SQL Server that is looking for improving quality and reliability, this session explores how to build unit tests against your stored procedures, functions, triggers and any other T-SQL code. The test project is a standard MS Test project, but the test building experience is much different. You'll see how to generate the project and automatically stub out the T-SQL code to test your database objects. Each of the built-in test conditions will be explained and demonstrated; they include things like validating data set checksum, scalar values, execution time, schema, row count and more. Additionally, how to create your own custom conditions in C# will be demonstrated with a real-world example.

At the end of this session you will have the knowledge to create and use SQL Unit Tests, allowing greater confidence in a traditionally under-tested segment of your code base.

This is a significant re-vamp of a years-old presentation

Getting started with Mountebank : over-the-wire test doubles

Mountebank is the best testing tool you've never heard of. It is a free, open source and cross platform tool for multi-protocol test doubles over the wire. When your code calls HTTP(s) endpoints (or TCP or SMTP and more), Mountebank can stand in for the actual service, allowing you to effectively recreate scenarios that are difficult or even impossible when using an actual running service. These "imposters" are created at any point in your pipeline by sending a request to the locally executing Mountebank service that defines the parameters, predicates and responses to return. This means behaviors can be scripted at runtime and be based on any business logic you define. When your tests are done, simply tear down the imposters. It's OK, because your service fakes are defined as JSON and can be source controlled and stood up in milliseconds for the next run.

Don't spend hours or days standing up an API specifically for testing. Don't wait around for someone else to get an API stood up so you can move ahead with your project. Fake it until you make it!

Building 2D games with Construct

Construct is a low-code, in-browser development environment for creating 2D games. Contrary to what you might expect, the browser based IDE has extreme power and top notch user experience. It is an all-inclusive suite of tools for creating sophisticated games with as much, or as little coding as you desire.

This session will build a simple game from scratch that demonstrates the core features of the platform including movement, animations, sound, scripting and expressions. Even if you are a tried-and-true coder, the event sheet, which provides a code-less interface for defining all of the actions taking place 60 times per second, is a great way to build a complex game quickly.

We will also see how to debug, share and publish games to various platforms. Bring your device along and help me test the game in real time!

Unit Testing Concepts for Beginners

Unit testing gives you confidence in the correctness of the code that you ship and allows you to perform maintenance, add features and do refactoring with lower risk. In order to attain that confidence, you must be adept at building effective tests. Targeting developers that are making the transition from just writing code to taking quality seriously, this presentation will show you what it means to have "covering" tests, the difference between unit tests and integration tests, what dependency injection (DI) is, how DI applies to testing, how to effectively mock dependencies and finally, see an example of automated tests in a build pipeline.
Demos will use C# .NET and Azure DevOps but concepts will be explained in a general way.
Also, there will be a Chuck Norris meme.

CodeMash 2024 Sessionize Event

January 2024 Sandusky, Ohio, United States

CodeMash 2023 Sessionize Event

January 2023 Sandusky, Ohio, United States

Granite State Code Camp 2022 Sessionize Event

November 2022 Manchester, New Hampshire, United States

2022 NH Cybersecurity Symposium Sessionize Event

March 2022 Manchester, New Hampshire, United States

Granite State Code Camp 2021 Sessionize Event

November 2021 Manchester, New Hampshire, United States

NH Cybersecurity Symposium by MCC Sessionize Event

March 2021

Granite State Code Camp 2020 Sessionize Event

November 2020 Manchester, New Hampshire, United States

Agile DevOps West

I've Got a Secret (and I Don't Even Know What it is) - a half-day tutorial workshop that explores various ways of keeping software secrets safe and out of source control.
The Land of Az: Azure Automation with Powershell and the Azure CLI - an introduction into automating Microsoft Azure

June 2020 Las Vegas, Nevada, United States

CodeMash 2020 Sessionize Event

January 2020 Sandusky, Ohio, United States

TechBash 2019 Sessionize Event

November 2019 East Stroudsburg, Pennsylvania, United States

Granite State Code Camp 2019 Sessionize Event

November 2019 Manchester, New Hampshire, United States

Code Camp NYC 2019 Sessionize Event

October 2019 New York City, New York, United States

Vermont Code Camp 11 (2019) Sessionize Event

September 2019 Burlington, Vermont, United States

Casco Bay .NET User Group

Lightning talk - The Alfond Leaders Award

August 2019 Portland, Maine, United States

Global Azure Boot Camp

Lab facilitator

April 2019 Yarmouth, Maine, United States

Boston Code Camp 31

I've got a secret (and I don't even know what it is)

April 2019 Burlington, Massachusetts, United States

Casco Bay .Net User Group March 2019

I've got a secret (and I don't even know what it is)

March 2019 Yarmouth, Maine, United States

North Boston Azure Cloud User Group

I've got a secret (and I don't even know what it is)

March 2019 Burlington, Massachusetts, United States

CodeMash 2019 Sessionize Event

January 2019 Sandusky, Ohio, United States

The Portland Maine Web Developer Group

Debug Like Its Your Job

December 2018 Portland, Maine, United States

Boston Code Camp 30

Debug Like It's Your Job

November 2018 Burlington, Massachusetts, United States

Granite State Code Camp 2018 Sessionize Event

November 2018 Manchester, New Hampshire, United States

Vermont Code Camp 2018 Sessionize Event

September 2018 Burlington, Vermont, United States

Boston Code Camp 29

For the Dot Noobs! Things you are doing wrong or can do better

April 2018 Burlington, Massachusetts, United States

Casco Bay .NET User Group

API Testing - A Deep Dive into Postman

January 2018 Portland, Maine, United States

Boston Code Camp 28

API Testing - A Deep Dive Into Postman

November 2017 Burlington, Massachusetts, United States

The Portland Maine Web Developer Group

API Testing - A Deep Dive Into Postman

November 2017 Portland, Maine, United States

Vermont Code Camp 9

Modular ASP.NET MVC

September 2017 Burlington, Vermont, United States

Casco Bay .NET User Group

Using HTTP Client Correctly (Lightning Talk)

July 2017 Portland, Maine, United States

Global Azure Bootcamp

Azure CDN: Serving Static Content

April 2017 Portland, Maine, United States

Boston Code Camp 27

Visual Studio Add In (vsix) Development To Accept User Input

March 2017 Burlington, Massachusetts, United States

Boston Code Camp 26

Managing Databases in Visual Studio with SQL Server Data Tools

November 2016 Burlington, Massachusetts, United States

Casco Bay .NET User Group

Getting Started with Package Management (Lightning Talk)

November 2016 Portland, Maine, United States

Vermont Code Camp 8

Managing Databases in Visual Studio with SQL Server Data Tools

September 2016 Burlington, Vermont, United States

Casco Bay .NET User Group

Sql Server Unit Testing (Lightning Talk)

August 2016 Portland, Maine, United States

Casco Bay .NET User Group

Managing Databases in Visual Studio with SQL Server Data Tools

June 2016 Portland, Maine, United States

Bob Crowley

Software Engineer, .NET

Portland, Maine, United States

Please note that Sessionize is not responsible for the accuracy or validity of the data provided by speakers. If you suspect this profile to be fake or spam, please let us know.

Jump to top