Building Concurrent Systems with Akka.NET

Building concurrent systems is challenging. Code that is innocuous when run on a single thread can require a tangle of locking when running on multiple threads. One way to address this problem is leveraging the actor model. Akka.NET implements the actor model and is ideal for developing concurrent, scalable, and fault tolerant applications in .NET. In this session, you will see code to create actors, send messages to actors, and handle messages within actors. You will also learn about advanced capabilities of Akka.NET including routing, location transparency, persistence, and clustering. You will leave with ideas of how you might use Akka.NET in your own projects and resources to continue your exploration.

You can find the slides and sample code on GitHub.

Stir Trek, May 2017

Creating Eloquent Code

If you've been programming long, you've had the experience of looking at your own code and struggling to understand it. Worse yet is trying to understand other people's code. Every piece of code you write not only instructs the computer, it also informs human readers. What is it telling them? In this session, you will learn to listen to what your code is saying. You will see how choices about scope, visibility, coupling, and cohesion reveal themselves in your code. You will learn principles and practices for creating eloquent code. Examples will be in C#, but will be applicable to any object oriented language. You will come away with new ideas to make your code speak clearly and inspiration to be more mindful while writing code.

You can find the slide deck on SlideShare.

Code PaLOUsa, March 2016
CodeStock, July 2016
Cincy.Develop(), July 2017

Attack of the Clones: Eliminating Duplicate Code in .NET

Code duplication threatens the agility and maintainability of software. Literally repeated code can be easily remedied, but there are other more subtle and insidious kinds of code duplication. What about code that's the same except for type, or code that needs to be applied in many locations? In this session, you will learn about tools to help find duplicate code. After identifying problem code, you will learn how to eradicate it with software design techniques and .NET framework features. Specifically, you will see how to apply generics, delegates, extension methods, and attributes to quash repeated code. You will leave with ideas and techniques to reduce duplicated code in your development.

You can find the slide deck and sample code at this GitHub Repository.

CodeMash, January 2015

Generics in .NET

All .NET developers have used generics, but too few utilize their full power. Most developers who use generics think of them only for collections, when they are valuable in any situation where code is the same except for type. This session is a deep dive into generic classes, interfaces, methods, and delegates. You will learn how to increase the power of generics by applying constraints, and will see examples drawn from real applications. You will leave with ideas about how to apply generics in your development and understanding the .NET features necessary to realize those ideas.

You can find the slide deck and sample code at this GitHub Repository.

CodeMash, January 2015

Pivot and the Silverlight PivotViewer Control

Pivot is a technology that makes it easy to explore massive amounts of data in a visually compelling way. In this session, we will discuss the Pivot technology and introduce the tools and techniques needed to build both static and dynamic Pivot collections. We will also look at using the Silverlight PivotViewer control to make your Pivot collections accessible on the web.

You can download the presentation files here. You can view the Pivot collection for the presentation here.

Indianapolis .NET Developer Association, April 2011
St. Louis Day of .NET, August 2010

Introduction to Continuous Integration with TeamCity

Continuous Integration (CI) is a valuable software development process, yet many teams do not practice CI. In this presentation, we will talk about the benefits of continuous integration and how TeamCity makes it easy to get started. We will also examine build configurations inspired by real world requirements that show how to build code, run tests, and prepare code for deployment. By the end of this presentation, you will be able to start doing continuous integration with TeamCity.

You can download the presentation and supporting files here.

CodeStock, June 2010

Anatomy of an E-Commerce Site

In this presentation, we will examine the technical components supporting the Chefs Catalog web site and the choices and challenges created when integrating third party systems into an ASP.NET web form site. We will look at systems for order processing (CommercialWare), search (IBM OmniFind Discovery Edition, Baynote Social Search), recommendations (Baynote Product Recommendations), product ratings (Bazaarvoice), international shipping (FiftyOne E4X) and others. In examining these components, we will discuss design ideas you may use in your own development and integration pitfalls to avoid. We will also talk about ASP.NET technical concerns including caching and asynchronous tasks.

See the presentation on Prezi here.

CodePaLOUsa, March 2011
CodeMash, January 2011
DevLink, August 2010
CodeStock, June 2010
Central Ohio Day of .NET, June 2010

XAML Basics

An introduction to XAML and its use in Silverlight. You can download the presentation here.

Silverlight Firestarter, Cincinnati, March 2009

WPF 101

Introduction to Windows Presentation Foundation (WPF) for .NET University. You can download the presentation and samples here.

.NET University, Columbus, November 2008

WPF for Developers

You've seen the sizzle, but what about the steak? In this presentation I will describe Windows Presentation Foundation (WPF) for developers. No reflected images. No animated page flipping transitions. No Expression Blend. No Silverlight. Just Visual Studio 2008 and code to actually do stuff. I'll cover the WPF fundamentals, including XAML, dependency properties, data binding, commands, validation, and styles. Then I'll talk about how to use these features to create desktop applications and describe some of the challenges I encountered creating my first WPF applications.

The presentation and demo source code can be downloaded here.

Cleveland Day of .NET, May 2008
Indianapolis Code Camp April 2008

Pragmatic Software Architecture and the Role of the Architect

What is software architecture? What is the role of the architect? Is architecture relevant to agile development? What does this have to do with developers? This presentation will answer these questions and more. It will help you bring an architectural mindset to your development by identifying architectural techniques you can use in your daily development. If you’re interested in architecture, being an architect, or just want to think about software development in a new way, join us for this exploration of architecture and the architect.

To see resources from the presentation click here.

For the newest version of the presentation on Prezi click here.

The PowerPoint presentation can be downloaded here.

CodePaLOUsa, March 2011
St. Louis Day of .NET, August 2010
Indianapolis .NET User Group (IndyNDA), May 2010
Cincinnati Programmers' Guild, May 2008
West Michigan Day of .NET, May 2008
Greater Lansing User Group .NET, March 2008

Practical Caching in ASP.NET

Caching has been part of ASP.NET since its inception. Pages, page fragments, and arbitrary data elements can all be cached to increase performance. This session goes beyond the basics to demonstrate caching in a real web application. I show how to use post-cache substitution in a real application (to display more than the current time like most demos!). The presentation shows how to cache pages based on a custom attribute for the logged in user. Lastly, we I show one way to design a business tier to take advantage of data caching while remaining loosely coupled to the UI.

Presentation and supporting files can be downloaded here.

Cincinnati Programmers' Guild, October 2007
Dayton-Cincinnati Code Camp, March 2007

Real World Continuous Integration

Dan Hounshell and I did a joint presentation on our experience introducing continuous integration at Tellus. Presentation and supporting files can be downloaded here.

Software Architecture of Chef's Catalog

This presentation was a case study describing the architecture for the Chef's Catalog web site developed at Tellus. The web site integrated order processing from CommercialWare through the use of IBM MQ Queues. The site also integrated advanced search through iPhrase.

Cincinnati Programmers' Guild, January 2006

Earlier Presentations

Creating Extensible Applications in C#: Applying Object-Oriented Design and Using Code Dynamically

Cincinnati Programmers' Guild, November 2003

Presentation showing a design aproach to extend .NET applications without recompiling. Source and presentation can be downloaded here

Creating Extensible Applications

Dayton Microcomputer Association, Software Development SIG, November 2003

Presentation showing how to extend both C# and Delphi applications without recompiling. Similar to presentation at Cincinnati Programmers' Guild. Code and presentation can be download here.

Creating Extensible Applications

Dayton Microcomputer Association, Software Development SIG, July 2003

Initial presentation of how to extend applications, both in C# and Delphi. Served as a seed for other presentations on the subject, and the article for Visual Studio .NET Developer. I intended to publish parallel articles showing how to use this techniquie both in .NET and Delphi. Sadly, the last issue of Delphi developer was published as I was writing the article. Code and presentation can be download here.

Introduction to UML (Unified Modeling Language)

Cincinnati Programmers' Guild, August 2002

In this presentation, I introduced the fundamental aspects of UML. Presentation is available here.

Incremental Search Edit Box

Dayton Microcopmuter Association, Software Development SIG, August 2001

In this brief presentation, I showed an Delphi edit box component I created that is appropriate for incremental search. Instead of firing an event on every keystroke, it fires an event after a defined amount of pause time. Presentation and source is available for download.

My First Presentation - Clipper Row Locking

Dayton Clipper User Group, 1990ish

The first user group presentation I did was for the newly forming Clipper user group some time in the 1989-1990 time frame. The meeting was at MTC (Modern Technologies Corporation) who was leading the creation of the Clipper group in Dayton. Nantucket had been at the previous meeting describing all of the upcoming features of Clipper 5.0. The Nantucket meeting drew probably close to 200 attendees, which was quite a crowd in the room; luckily MTC was in a building that had been an elementary school, and the gymnasium made a great location for a meeting that large. There had to be more than a hundred people at the presentation I did on row locking, which to this day was probably the largest number of attendees at one of my presentations.

Since that first one, I've done many user group presentations for the Clipper user group, Delphi user group, and most recently for .NET user groups. I would highly recommend it to anyone looking to expand their professional horizons. First of all, it is a fairly safe environment to hone your presentation skills; most user groups are fairly forgiving audiences (as long as you don't step on their toes technically, in which case, you just get an entertaining conversation). And there is no better way to understand any topic than to have to explain it to other people; I always feel like I learn when creating presentations. And finally, it is a good way to establish a reputation as an "authority" amongst your peers.

Facebook RSS View Joe Wirtley's profile on LinkedIn