Bob Crowley

Information & Communications Technology

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

Portland, Maine, United States

Bob Crowley

Sr. Software Developer, .Net

Bob Crowley is a Senior Software Developer in Portland Maine where he builds solutions in the .Net and Azure ecosystems. He has been writing bugs for over (DateTime.Now.Year - 2004) years, mostly in the financial industry despite (or because?) still not knowing the difference between a debit and a credit.

In his free time he likes to make the most of both weeks of Maine's summer out on the water either in a kayak or saltwater fishing.

Find Bob on twitter @contrivedex or contrivedexample on LinkedIn

Current sessions

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! 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.


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 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.

This session has been well received: https://twitter.com/hutchcodes/status/1112496377009979394


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.

Once the competition opens you can check it out here: https://gsccctf.azurewebsites.net/


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.

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 untested segment of your codebase.

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 an 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. In this presentation you will learn 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.


Past and future events

Granite State Code Camp 2021

6 Nov 2021
Manchester, New Hampshire, United States

NH Cybersecurity Symposium by MCC

23 Mar - 25 Mar 2021

Granite State Code Camp 2020

14 Nov 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
8 Jun - 11 Jun 2020
Las Vegas, Nevada, United States

CodeMash 2020

6 Jan - 10 Jan 2020
Sandusky, Ohio, United States

TechBash 2019

12 Nov - 15 Nov 2019
East Stroudsburg, Pennsylvania, United States

Granite State Code Camp 2019

2 Nov 2019
Manchester, New Hampshire, United States

Code Camp NYC 2019

12 Oct 2019
New York City, New York, United States

Vermont Code Camp 11 (2019)

28 Sep 2019
Burlington, Vermont, United States

Casco Bay .NET User Group

Lightning talk - The Alfond Leaders Award
27 Aug 2019
Portland, Maine, United States

Global Azure Boot Camp

Lab facilitator
27 Apr 2019
Yarmouth, Maine, United States

Boston Code Camp 31

I've got a secret (and I don't even know what it is)
6 Apr 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)
27 Mar 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)
26 Mar 2019
Burlington, Massachusetts, United States

CodeMash 2019

7 Jan - 11 Jan 2019
Sandusky, Ohio, United States

The Portland Maine Web Developer Group

Debug Like Its Your Job
17 Dec 2018
Portland, Maine, United States

Boston Code Camp 30

Debug Like It's Your Job
17 Nov 2018
Burlington, Massachusetts, United States

Granite State Code Camp 2018

3 Nov 2018
Manchester, New Hampshire, United States

Vermont Code Camp 2018

15 Sep 2018
Burlington, Vermont, United States

Boston Code Camp 29

For the Dot Noobs! Things you are doing wrong or can do better
7 Apr 2018
Burlington, Massachusetts, United States

Casco Bay .NET User Group

API Testing - A Deep Dive into Postman
18 Jan 2018
Portland, Maine, United States

Boston Code Camp 28

API Testing - A Deep Dive Into Postman
18 Nov 2017
Burlington, Massachusetts, United States

The Portland Maine Web Developer Group

API Testing - A Deep Dive Into Postman
13 Nov 2017
Portland, Maine, United States

Vermont Code Camp 9

Modular ASP.NET MVC
16 Sep 2017
Burlington, Vermont, United States

Casco Bay .NET User Group

Using HTTP Client Correctly (Lightning Talk)
20 Jul 2017
Portland, Maine, United States

Global Azure Bootcamp

Azure CDN: Serving Static Content
22 Apr 2017
Portland, Maine, United States

Boston Code Camp 27

Visual Studio Add In (vsix) Development To Accept User Input
25 Mar 2017
Burlington, Massachusetts, United States

Boston Code Camp 26

Managing Databases in Visual Studio with SQL Server Data Tools
19 Nov 2016
Burlington, Massachusetts, United States

Casco Bay .NET User Group

Getting Started with Package Management (Lightning Talk)
16 Nov 2016
Portland, Maine, United States

Vermont Code Camp 8

Managing Databases in Visual Studio with SQL Server Data Tools
17 Sep 2016
Burlington, Vermont, United States

Casco Bay .NET User Group

Sql Server Unit Testing (Lightning Talk)
17 Aug 2016
Portland, Maine, United States

Casco Bay .NET User Group

Managing Databases in Visual Studio with SQL Server Data Tools
8 Jun 2016
Portland, Maine, United States