BenchmarkMockNet: Benchmarking .NET Mocking Libraries

Analysis on the latest results from my tongue-twister benchmarking library

About a year and a half ago, I was trying to figure out what mocking library to use for testing an app I was writing. I had been burned in the past by an enterprise system with thousands of unit tests, where the mocking library used was the bottleneck in the test runs, causing them to take several minutes to run.

Setting out to determine the fastest library to avoid this problem, I created the mouthful BenchmarkMockNet to benchmark those which worked with .NET Core, leveraging BenchmarkDotNet under the hood (hence the name).

"ImageResizer" is now "dotnet srcset"

Updating my responsive image CLI to a .NET global tool

A few years ago, I created a CLI tool that helped create responsive image sets for the web. If you're not familiar with the concept, it's an easy way to maximize image quality while minimizing page weight, and you can learn more about it here.

As a good dogfooder, all of the images on this site are created using this project, and now that .NET global tools are all the rage, I've updated (and renamed) this project to use this new technology.

Building a .NET Core Robot with SimpleGPIO 1.1

New release! New features! Real-world examples!

A couple months ago, I published the initial production-ready release of SimpleGPIO, my new .NET Standard OSS IoT library. Since then, I've been busy working on new features, which were included in two real-life projects I demo'd to a live audience last week.

I realize that the extensive intro and proof-of-concept examples last time around didn't garner much attention, but I'm hoping that these real-world uses might pique more interest. So without further ado, check out what I built with SimpleGPIO 1.1!

Creating a .NET Core Global Tool In <10 Minutes

Upgrading the "dotnet libyear" CLI tool

Last year, I created a .NET Core CLI tool called dotnet libyear to help keep track of how far behind your apps' dependencies are.

A year before that, I performed a live-coding blind speedrun upgrading this site to .NET Core 1.0 RTM.

Introducing SimpleGPIO

Accelerating Time to Love At First Blink

TL;DR: Check out my new .NET Standard IoT library, SimpleGPIO!

A few years ago, I saw a video on the Internet. Perhaps you've seen it, too...

I am async, and I have opinions!

To suffix, or not to suffix: that is the question

A recent discussion on Twitter got me thinking again about this naming convention in .NET that I'm not a fan of. Since my most recent contract just ended (hint hint) and my DevOpsDays PDX talk has been presented (also hint hint) I finally have some time to blog again!

This all started out a couple days ago with an innocent question:

Testing Internals in C#

What's a developer to do?

I've seen this come up on Twitter a couple times, and just hit it myself, so I'll jot some things down while I'm thinking of it.

Say I have the following:

Happy LibYear!

A dotnet CLI tool for managing dependency freshness

Fellow Ithaca NY developer, and local meetup co-host Jared Beck recently came up with a great way to quantify a much-ignored but easily-resolvable facet of technical debt: managing outdated dependencies.

Like NDepend's new "Smart Technical Debt Estimation" feature, libyear provides a simple, calculated number to help contextualize the cost of well-maintained software.

.NET Core on ARM

Announcing nightly builds of the .NET Core Runtime for Ubuntu 16.04 on ARM!

TL;DR: Nightly builds of the .NET Core Runtime for Ubuntu 16.04 on ARM are available here. These are "Hello World" tested on my Raspberry Pi 2 and Chromebook. Nightly builds of the SDK are expected in the next week or so.

Also, should probably have a disclaimer: these are unofficial builds using the master branch of the dotnet code repositories. This is about as rare / raw / blue as you can get!

Using NDepend to Help Improve Architecture

Or, "how a static analysis tool can help you write better apps"

Long time, no see! I've been busy these past few months after having jumped right into self-employment and software consulting, and obviously have let this blog slide a little. But worry not: exciting things are ahead, starting right now!

A couple weeks ago, I received an email from Patrick Smacchia of NDepend, asking if I would like to give their product a try. In case you're not familiar with it, NDepend is a static analysis tool for .NET. I had used a trial at a previous job a couple major versions ago and found it immediately useful, so I jumped at the chance. I'm also a big fan and daily user of ReSharper, so I was interested to be able to compare and contrast these tools.

Zero Downtime Deployments

Here's how I keep the site up while new versions are built

Many months ago, I posted about switching to Kestrel (the official ASP.NET Core server) and that doing so made it super easy to perform blue-green deployments. I even said I'd share the details, and now I'm finally fulfilling that promise!

I'm also going to introduce another one of my open source tools, that I use for just this purpose: LiveSwitcher.

Performance is Paramount

Investigating server-side optimizations for ASP.NET Core web apps

Performance has always been one of the most fundamental and important aspects of user experience on the web for me. If pages are slow to load, or interactions feel clunky, no amount of fancy design or exclusive content is going to make up for that.

I'm going to show you a couple of the server-side performance improvements I've made here since the site launched last spring, using LoadTestToolbox, an open-source web app load testing suite I started recently.

Crawl, Walk, Run, ...

A progression of thoughts on efficiency, effectiveness, efficacy, tools, toolboxes, professional development, mastery of one's craft, and what 10x really means

One phrase that comes up a lot at my current place of employment is "crawl, walk, run." While I believe it originated to describe a project management methodology, in our case it's usually being used to describe the learning curve involved with a given technology, where, as you gain experience, your speed (efficiency) increases.

While the core concept is sound, I'm going to push the metaphor a little further, since there's an important distinction to be made.

On Privacy and Intrusive Advertising

Some musings on the current state of the web

There's an upcoming post on performance, and that has a little bit to do with it as well, but it's mainly because, and I don't want this to sound like some "knight in shining armor" puff, because it's really just me having basic human decency, but, in the interest of full disclosure: this site uses one client-side script, Google Analytics, to help analyze traffic. On occasion, gists and tweets are pulled in using JS, and those probably do their own tracking.

I also use an ad blocker (specifically, uBlock0) on every single one of my devices: desktop, laptop, phone, tablet. By default, this blocks Google Analytics.

On Security

Announcing HTTPS (and HSTS) for the site

I take the issues of privacy and security very seriously, and am happy to report that, thanks to Let's Encrypt, and this Windows client, this site is now available via HTTPS! I urge you all to take advantage of this wonderful technology and do the same to any domains you are responsible for.

Furthermore, I'm also pleased to announce my implementation of HTTP Strict Transport Security (HSTS) which basically means I've got your back, security-wise. It's simply not possible for you to view this site unsecured any more.

Responsive Images

A quick tutorial on how this site uses basic responsive images

OK, finally time for a technical blog post!

Some background: previous iterations of this site have used what I would call, "server-side responsive images."

The Blue-Green Kestrel

Another technical update, this time around the hosting and deployment models

I've had some issues keeping the IIS application pool active for extended periods of time, probably something to do with running on pre-release software, but I figured I'd take it as an opportunity to switch to Kestrel, the web server that's part of the ASP.NET v5 project.

IIS is now simply acting as a reverse-proxy, passing requests and responses to and from kestrel, much the way that nginx is used as a Docker front-end.

Now With More CMS!

A quick technical update about the site

I've been quietly working behind the scenes, pushing out updates. It may surprise you that up until recently, the content of this site was actually hardcoded into server-side views, which meant I would have to recompile the entire site for each of the below new posts!

I have since implemented a simple CMS/blogging engine, with a quick-and-dirrty publishing/admin interface, so you can expect updates more than once a month going forward! My intent is to share with you some of the quirks that ASP.NET 5 and MVC 6 threw at me, hopefully helping make your life easier, should you decide to build something with these fantastic frameworks.

The Office

Revealing my just-completed new workspace at home

Almost three years and two children later, I finally have a corner (literally) of the house to call my own. There are still some finishing touches to be done (currently no doors, etc) but it's enough to at least move into.

A before-and-after from the doorway, facing west

There's an App for That

Info about my first conference presentation

I gave a talk!

My very first talk, in fact, at a conference. Last week, during HighEdWeb NY, I presented "There's an App for That: Creating Cross-Platform Native Experiences Using Open Web Standards" -- isn't that a mouthful!

Hello, vNext World!

Introducing the new site


This brand new site is running on ASP.NET 5 "vNext" (beta 4) and will become a home for my many thoughts.