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.
Read more »
Recently I saw Evil Trout’s screencast Wrapping a jQuery plugin in an Ember.js component, and thought that it would be really valuable to show the exact same plugin implemented instead as an AngularJS directive.
I want to be clear that I don’t intend to start some sort of Angular vs. Ember flame war. I happen to believe, as Ben Lesh concludes in his excellent 6-part blog series comparing the two frameworks, that Angular and Ember are two paths up the same mountain, and that together they are pushing the state of web development forward.
It’s clear that I need better audio equipment if I intend to keep doing screencasts, but I think it’s passable. I hope you enjoy it!
Recently Romiko Derbynew was reading my book, Learning NServiceBus, and noticed a contradiction between the manuscript and the included source code:
In the Sample for DependecyInjection in the book, the code is:
public class ConfigureDependencyInjection : NServiceBus.IWantCustomInitialization
However in the book, is says
IWantCustomInitialization should be implemented only on the class that implements IConfigureThisEndpoint and allows you to perform customizations that are unique to that endpoint.
Of course I could wax philosophic about the tight deadline of book publishing, or how difficult it is to keep the sample code in sync with the manuscript, or how I probably wrote that part of the code and that part of the manuscript on different days on different pre-betas of NServiceBus 4.0, but what it comes down to at the end of the day is #FAIL!
So here’s the real scoop, or at least, updated information as I see it and would recommend now, circa NServiceBus 4.6.1.
Read more »
In my post Distributed System Monitoring Done Right, I mentioned in passing how ServicePulse doesn’t ship with any built-in notification system for failed messages, but that you could easily build a system to send an email (or SMS, or carrier pigeon) to do so.
In this post I’ll show you how. Read more »
Here is the RavenConf 2014 video and slides for my presentation “Modeling Tricks My Relational Database Never Taught Me” in which I compare SQL Server to Big Brother from Apple’s 1984 ad and RavenDB to the Dude from The Big Lebowski. Read more »
When I first started writing Learning NServiceBus, I was targeting Version 4.0 which, at that time, was still several months away from release. Writing about something that’s still very much in flux is definitely a challenge, and to some extent I was definitely learning as I went.
What really struck me during the writing process was how much easier people learning NServiceBus 4.0 were going to have it than I did when I learned NServiceBus 2.0. The developers at Particular Software (a name change from NServiceBus Ltd – a lot of people seem to think they were bought and this is not the case) are really obsessive about making a powerful framework as easy to use as possible, and I salute them for that.
I remember creating endpoints by hand. Create a new Class Library project. Reference the NServiceBus DLLs and NServiceBus.Host.exe. Build so that the EXE is copied to the bin directory. Go to Project Properties. Set the debugger to run the Host. Create an EndpointConfig class. Add an App.config. Enter a bunch of required XML configuration. OK that’s a lie. As I was once quoted during a live coding demo, “Don’t worry I have been doing this for years. You never write this yourself; you always copy it from somewhere else.” Not exactly a glowing recommendation right?
Then you start debugging and hope you didn’t screw anything up.
NServiceBus 3.x and 4.x changed all that. Now you just reference a the NServiceBus.Host NuGet package and it sets all that stuff up for you. And if you need some bit of config, you can run a helpful PowerShell cmdlet from the Package Manager Console to generate it for you along with XML comments describing what every knob and lever does.
NServiceBus 4.x is a fantastic platform to build distributed systems, but as of the release of NServiceBus 4.0 in July 2013, the big thing still missing was the ability to effectively debug a messaging system (let’s face it, gargantuan log files don’t count) and monitor a distributed system in production to make sure everything isn’t running off the rails.
Well that’s all about to change.
Read more »
As readers of this blog already know, NServiceBus offers a great framework for building distributed systems with publish/subscribe, automatic retries, long-running business processes, high performance, and scalability. It offers a fully pluggable transport mechanism so that it can be run over MSMQ, RabbitMQ, ActiveMQ, Windows Azure, or even use SQL Server as its queuing infrastructure. No matter which transport you choose, NServiceBus enables you to build a highly reliable system with minimal effort.
But who wants that?
Honestly the developers at Particular have gone a little bit overboard with how easy they have made it to build these robust distributed systems. This is why it’s such good news that, thanks to me, there is finally an NServiceBus transport available that supports RFC 1149: IP Datagrams over Avian Carriers.
Read more »
I will also be giving my Modeling Tricks My Relational Database Never Taught Me talk at the first ever RavenDB conference in Raleigh, North Carolina on April 8. Click on the conference banner below for details.
This week I will be speaking at the Twin Cities .NET User Group:
Modeling Tricks My Relational Database Never Taught Me
Date: Thursday, April 6, 5:30 PM
Location: ILM Professional Services, 5221 Viking Drive, Edina, MN 55435
In this session we will explore several modeling scenarios from my own experience that can easily be achieved using RavenDB, but difficult (if not nearly impossible) to build using a classic relational database. The focus will be on helping those accustomed to SQL Server or other relational databases learn good document modeling skills by example, with a summary of document modeling guidelines at the end.
As always, my employer ILM Professional Services will be providing the pizza at the meeting.
TCDNUG has recently switched to using Meetup.com to register for these events, but apparently Meetup has become the victim of a very sophisticated DDoS attack and is temporarily unavailable. Seriously, who does that?
So if you are unable to actually register, please come anyway. We would love to see you there!
My publisher has allowed me to reprint my favorite part of my book, Learning NServiceBus, here on my blog. It is the introduction to Chapter 3, Preparing for Failure.
Why is it my favorite? Chapter 3 is the chapter that deals with how to be ready for the inevitable errors that will befall a system due to the fallacies of distributed computing, stupid user tricks, and plain outright buggy code. This is the part of NServiceBus that really grabbed me in the beginning and has never let go.
Plus, and I can’t stress this point enough, this is the part of the book about Batman.
Read more »