Skip to main content

Particular Software Blog

  • What does idempotent mean?

    When you start to accumulate home theater components to go with your TV, you end up with a bunch of remote controls. One remote for the TV, one for the receiver, and one for the DVD/Blu-Ray player. One for a cable box, satellite, or set-top streaming box. Maybe you’ve got a multiple-disc CD player, or even a turntable. (Vinyl is making a comeback!) Maybe you’ve even still got a VHS?…no I’m kidding, nobody has those anymore.

    The solution, rather than dealing with a stack of remotes, is to get one universal remote to rule them all. But once you do, you find that not all components are created equal, at least when it comes to the infrared codes (the actual signals sent by the remote control) that they accept.

    A cheap A/V receiver might accept codes like PowerToggle or NextInput. These make it nearly impossible to reliably turn the unit on and set the right input, especially if someone has messed with the receiver manually.

    A good receiver will have additional codes for PowerOn and PowerOff, even though those buttons don’t exist on the remote, and will also have an independent code for each input, like InputCable, InputSatellite, and InputBluRay.

    This is the essence of idempotence. No matter how many times your universal remote sends the PowerOn and InputBluRay commands, the receiver will still be turned on and ready to watch Forrest Gump. PowerToggle and InputNext, however, are not idempotent. If you repeat those commands multiple times, the component will be left in a different (and unknown) state each time.

    Read more
  • Fallacy #3: Bandwidth is infinite

    Everyone who is old enough to remember the sound of connecting to the Internet with a dial-up modem or of AOL announcing that “You’ve got mail” is acutely aware that there is an upper limit to how fast something can be downloaded, and it never seems to be as fast as we would like it.

    The availability of bandwidth increases at a staggering rate, but we’re never happy. We now live in an age when it’s possible to stream high definition TV, and yet we are not satisfied. We become annoyed when we run a speed test on our broadband provider only to find that, on a good day, we are getting maybe half of the rated download speed we are paying for, and the upload speed is likely much worse. We amaze ourselves by our ability to have a real-time video conversation with someone on the other side of the world, but then react with extreme frustration when the connection quality starts to dip and we must ask “are you there?” to a face that has frozen.

    Today, we have DSL and cable modems; tomorrow, fiber may be widespread. But although bandwidth keeps growing, the amount of data and our need for it grows faster. We’ll never be satisfied.

    Read more
  • Has Microsoft really changed?

    New Leaf
    Did Microsoft really turn over a new leaf?

    People have a lot of opinions about the “new” Microsoft under CEO Satya Nadella. They’ve embraced open-source, including .NET Core. They declared Microsoft ❤ Linux. They acquired GitHub. It’s been a wild ride for those of us used to the closed, dare I say grumpy Microsoft of the past.

    But are things different today? When the rubber hits the road, is Microsoft really more open, more accessible, more helpful?

    When we were building the Azure Service Bus transport for .NET Core we got a chance to find out.

    Read more
  • You don't need ordered delivery

    In our family it’s a tradition that you get to decide what we’ll have for dinner when it’s your birthday. On my daughter’s last birthday, she picked pizza. I took her to the nearby pizza shop to decide what pizza to get.

    A large screen dominates one wall of the pizza place, showing each order as it progresses through each stage of preparation. As I was looking at the screen, I noticed some names suddenly switched. Some pizzas with fewer toppings could be placed in the oven faster, and some would take longer to bake than others. In various steps towards putting the pizza in its box, the process could take longer depending on the pizza. My daughter’s pizza required additional preparation time, so other customers were able to leave before we were. In short, pizzas were not being delivered in the same sequence as they were ordered.

    Read more
  • Introducing the new Azure Service Bus transport for .NET Core

    NServiceBus Azure Service Bus Transport

    The wait is over! Today we’re releasing the new Azure Service Bus transport, which is fully compatible with NServiceBus 7 and .NET Core.

    You will now be able to run NServiceBus endpoints using Azure Service Bus anywhere.

    Read more
  • Third-order effects and software systems

    At the height of the Cold War, the United States passed the Federal Aid Highway Act of 1956, giving birth to the Interstate Highway System. Fueled by the fear of foreign attack and the need to quickly transport troops and equipment across the continent, the network of protected access highways ended up transforming the nation’s economy and culture forever.

    It was perhaps easy to predict a first-order effect: people would travel longer distances given the ease of doing so. A second-order effect was perhaps also easy to foresee: people would be much more likely to work or shop further away from home.

    Read more
  • Classic rock and async/await: Stop breaking the rules!

    The universe demands some things must always occur in a certain order. Queen’s “We Will Rock You” must be followed by “We Are The Champions.” Same with Led Zeppelin’s “Heartbreaker” -> “Living Loving Maid,” Van Halen’s “Eruption” -> “You Really Got Me,” and Boston’s “Foreplay” -> “Long Time.” You have to. Every DJ knows this. It’s the rule!

    Read more
  • NServiceBus 7 for .NET Core is here

    Update: NServiceBus 7 now supports .NET Core 3.1.

    It’s a pretty cool time to be a .NET developer. Don’t believe it? Check out this excerpt from a popular children’s book1:

    Congratulations! Today is your day.
    You’re off to Great Places! You’re off and away!

    Maybe you like Linux or have a MacBook,
    Or want to host code without breaking your checkbook.
    The license for Windows can be a bit pricey.
    Getting approval for more servers can be a bit dicey.

    But now you have choices, it’s a bit of a shocker.
    You can even choose to deploy your apps using Docker!
    With your skills in .NET no opportunity shall go by,
    When you can even deploy on a Raspberry Pi.

    And now NServiceBus is ready, we’ve got your back.
    The ultimate cross-platform messaging stack!
    You’re off to Great Places! Today is your day!
    There’s more than Windows now, so…get on your way!

    -Adapted from Oh, the Places You'll Go! by Dr. Seuss

    In other words, NServiceBus 7 for .NET Core is here.

    Read more
  • No Dogma Podcast with Adam Ralph

    I’d like to share some highlights from a recent chat I had with Bryan Hogan on his No Dogma Podcast.

    We kicked off with NServiceBus and how it helps building distributed systems and microservices. We talked about the general challenges such as coupling, communication, and fault tolerance. We also investigated some of the patterns that help, such as events, retries, and long running processes. We wrapped up with the importance of system monitoring, and what’s next for NServiceBus.

    Read more
Need help getting started?