Development comments edit

At Particular we support a bunch of different technologies, so it seems there’s no end to the infrastructure software I might have to use on any given day. SQL Server, RabbitMQ, MongoDB, MySQL, PostgreSQL, MariaDB, even (shudder) Oracle.

I don’t want all that crap installed on my machine. In fact, I don’t want to install infrastructure on my machine again, like…ever.

So when I needed to work with a RavenDB cluster, I Dockerized it, and here’s how I did it. Maybe it’s not perfect, maybe it could be better? If you think so, let me know! I feel like I stumbled through this, but the result appears to work well.

Read more →

Development comments edit

Note: This post was adapted from an answer I originally posted to a Stack Overflow question.

People ask (frequently) why they need NServiceBus. “I’ve got RabbitMQ and that has built-in Pub/Sub,” they might say. “Isn’t NServiceBus just a wrapper around RabbitMQ? I could probably write that in less than a weekend. After all, how hard could it be?

Well sure, you can definitely just use pure RabbitMQ. I’ll even help you get started writing that wrapper. You just have to keep a couple things in mind.

Read more →

Development comments edit

If you’re looking at my blog right now (hint: you are) then you might already know that I am the author of Learning NServiceBus which focused on NServiceBus 4, and Learning NServiceBus - Second Edition which focused on NServiceBus 5.

Now NServiceBus 6 has been released, and with the change to a fully async API, quite a bit has changed. In fact, enough has changed that if you tried to use my latest book, which is called Learning NServiceBus, to actually, you know, learn NServiceBus, it might not be the greatest experience in the world.

The problem is, writing books sucks. A lot. So I’m not doing that anymore.

Read more →

Development comments edit

Since I work from home, I make it a point to go out for lunch at least once per week. It helps to keep me from going a bit nuts staying in the house all day, especially during cold, snowy Minnesota winters.

This week I visited a local fast food joint that happens to have a new loyalty program via a mobile app. You visit eight times and you earn a free combo meal. To log a visit, you tap a button in the app, and it displays a QR code that they scan at the register, or if you forget, the app can scan a barcode on your receipt. I’m … not exactly a fan of QR codes, but this seems like a pretty good use for them. I had never seen their system in action so I decided to check it out.

So after placing my order, I ask the employee at the register if he can scan the QR code in the app, and he looked at me like I was born on Mars.

Read more →

Development comments edit

I used to be a practitioner of Inbox Infinite. The incoming messages would just land at the top of my inbox, and as I scrolled down, the date of the email would slowly get closer and closer to the date when I originally opened my Gmail account.

Let’s just say I could scroll down a long damn way.

My primary method of determining if something was handled was whether or not it was read. If I needed to look at it later, mark it as unread. It worked out alright, as a software developer I didn’t get that much email to start with, and work generally happened only during work hours.

When I joined Particular Software it became quickly apparent that how I managed my email was going to have to change.

Read more →

Development comments edit

The other day I read this article about how Gmail will finally let you “Undo Send” emails you wish you didn’t send.

Really Google? Really? What took you so long? I mean, I know you’ve been very busy shuttering Google Reader and all that, but offering the ability to undo sending an email within 30 seconds is actually pretty easy to build.

At least, it is with NServiceBus, and specifically, using an NServiceBus Saga. I’ll show you how.

“Undo Send” is really just a specific case of a much more general pattern I’ll call the buyer’s remorse pattern.

Read more →

Announcements comments edit

WordPress and I had an altercation the other day.

I logged in to the management interface for my blog, and it was begging me to update to WordPress 4.2.2, and given the number of security vulnerabilities that have been in the news lately, I figured that was probably a good idea.

But this time, the automated, one-click update process failed me for the first time. I don’t know precisely why, but it blew up mid-stream. Luckily the public portion of the site was still serving, but the admin was completely roasted. So I had to go through the painful process of doing a manual upgrade over FTP.

Luckily, I got everything working on Version 4.2.2, but I resolved at that point that 4.2.2 would be my last.

It’s not that I’m a huge WordPress hater. When it works it works well enough. But I absolutely disdain PHP, kind of like this guy, so I can’t really go hack on it very well because to do so would give me the itchies all over. The freedom I want to have with my blog makes hosting impossible, but I don’t want to go through the hassle of self-hosting either. Plus I really really want to the particular webhost I’m using because reasons, and moving my blog is a great first step.

I recently joined Particular Software and we do everything on GitHub. No really, I mean everything. (Well OK, GitHub and Slack.) And while I’m no slouch at HTML when I really want to write, nothing beats Markdown. So it makes sense to take advantage of that.

So, if you’re reading this post, my blog is now run by Jekyll on GitHub Pages. How does that work? Glad you asked.

  1. Create a new GitHub repository called - mine is
  2. Create a Jekyll repository. (This is the tricky part.)
  3. Write your posts as Markdown files.
  4. Push your changes to GitHub.
  5. GitHub compiles your posts from your master branch into HTML pages serves it up as static content.

Rather than do a whole bunch of work on #2, I decided to stand on the shoulders of Phil Haack whose blog post on converting his own blog had originally informed me Jekyll, and take inspiration from outright steal his Jekyll repository as a starting point. Luckily, he’s OK with that. I did make some changes to make it my own.

The trickiest part turned out to be porting my content. There is a WordPress to Jekyll converter but it goes pretty crazy on you, and doesn’t convert the WordPress HTML to Markdown. So I had to do a lot of work on my own to convert the HTML to Markdown with Pandoc and then clean up a lot of the mess afterwards.

But it’s definitely worth it. Now I don’t have to worry if my blog is down. That’s GitHub’s problem. I can edit my posts with Markdown using the same GitHub workflow I use every day. And it means I can accept pull requests on my blog! So if I make a mistake, please speak up and correct me!

Hopefully this will make it even easier for me to blog in the future.

Announcements comments edit
For the last few years, I have tried to arrange my career around the following two principles: Surround myself with the smartest people I can find. Be prepared to do the thing that scares me a little bit.

Read more →

Development comments edit

I’m excited to say that the second edition of my book, Learning NServiceBus, has now been published!

Learning NServiceBus Second Edition

The second edition of the book includes the following improvements over the first edition:

  • Completely updated to cover NServiceBus 5.0
  • All-new chapter on the Service Platform (ServiceControl, ServiceInsight, ServicePulse, and ServiceMatrix)
  • More diagrams (these were unfortunately sparse in the first edition)
  • Coverage of V5-specific features (Pipeline, Outbox)
  • Revised and expanded…everything

All told, there are roughly 44 additional pages (over the first edition) of just raw new content.

And perhaps best of all, the new edition includes a foreward from Udi Dahan himself, which tells the story of how NServiceBus got its start in the first place, tracing the history from his early days as a programmer to the point where this book has been published in its second edition. It’s very humbling for me personally to have his endorsement on my work, and I am very thankful.

Also, as always, so many thanks to everyone at Particular Software who were very helpful during the development of the book, and to my tech reviewers Daniel Marbach, Hadi Eskandari, Roy Cornelissen, and Prashant Brall, who made sure that you have the best content in your hands possible.

The book is available for purchase right now from the publisher in physical and eBook forms, and will be available via other channels (Amazon, Barnes & Noble, Safari Books Online, etc.) shortly. I hope of course that you buy it, but more importantly, that you find it useful.

Development comments edit
Uncle Bob Martin is one of the true learned elders of our industry, one of those who signed the Agile Manifesto when I was still taking college courses. Recently, he wrote about (and has talked about) something that absolutely blew me away. Uncle Bob correctly identifies that many in our industry are young (even too young) and that there is a relative lack of older (and one would hope, more experienced) software developers. Not because they are going away, but because of the exponential growth in the number of total software developers. Indeed, he estimates that the number of software developers doubles every five years. This was not altogether unsurprising to me, until he pointed out that this means if the number of developers is doubling every five years, then at any given point in time half of all software developers on the planet have less than five years of experience. Woah.

Read more →