Tracing System.Net to debug HTTP Clients
If you are writing software that leverages the System.Net.WebRequest class, you’re probably familiar with tools like Fiddler or Wireshark. You can use these tools to see the actual HTTP requests and...
View ArticleReading UTF-8 Characters From An Infinite Byte Stream
I’ve been playing with the twitter streaming API today. In very simple terms, you make an HTTP request and then sit on the response stream reading objects off it. The stream is a stream of UTF-8...
View ArticleSprache – A Monadic Parser For C#
Recently I had a requirement to parse AMQP error messages. A typical message looks something like this: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=406,...
View ArticleREST – Epic Semantic Fail
Roy Fielding writes a PhD dissertation describing the architectural style of the World Wide Web. He coins the term ‘Representational State Transfer’ (REST) to describe it – after all, if you’re going...
View ArticleUsing Git and GitHub in a Microsoft Development Team
The team at 15Below, my excellent clients, have been using Git and GitHub since last September. Although I’ve been using GitHub for open source projects for several years now, this is the first time...
View ArticleWiring up TopShelf, Windsor and EasyNetQ
EasyNetQ is my simple to use .NET API for the awesome RabbitMQ messaging broker. Architecting system around a message bus involves writing many small focussed components that sit on the bus waiting for...
View ArticleReturn a Task From BeginExecuteNonQuery
Blog as notepad time. Just a little reminder for myself on how to return the result from BeginExecuteNonQuery as a Task<int> public Task<int> Save(string value){ var taskCompletionSource =...
View ArticleReplacing EasyNetQ Components
EasyNetQ, my simple .NET API for RabbitMQ, is a library composed of small components. Until today, the code simply wired the components in a messy hard-coded routine. Now it has its own tiny internal...
View ArticleParsing a Connection String With Sprache
Sprache is a very cool lightweight parser library for C#. Today I was experimenting with parsing EasyNetQ connection strings, so I thought I’d have a go at getting Sprache to do it. An EasyNetQ...
View ArticleEasyNetQ Cluster Support
EasyNetQ, my super simple .NET API for RabbitMQ, now (from version 0.7.2.34) supports RabbitMQ clusters without any need to deploy a load balancer. Simply list the nodes of the cluster in the...
View ArticleA Functional IoC Container
Today I was idly thinking about an idea I had a couple of years ago for a functional IoC container. I’d had a go at implementing such a beast, but soon got bogged down in a tangled mess of spaghetti...
View ArticleEasyNetQ Publisher Confirms
EasyNetQ is my easy-to-use .NET API for RabbitMQ.The default AMQP publish is not transactional and doesn't guarantee that your message will actually reach the broker. AMQP does specify a transactional...
View ArticleNicer Client Properties For EasyNetQ
EasyNetQ is my lightweight easy-to-use .NET API for RabbitMQ.Today I added a small but very nice feature, better client properties. Now when you look at connections created by EasyNetQ you can see the...
View ArticleA C# .NET Client Proxy For The RabbitMQ Management API
RabbitMQ comes with a very nice Management UI and a HTTP JSON API, that allows you to configure and monitor your RabbitMQ broker. From the website:“The rabbitmq-management plugin provides an HTTP-based...
View ArticleUsing BlockingCollection To Communicate Between Threads
Consider these (somewhat) common programming challenges:I’m using a third party library that is not thread safe, but I want my application to share work between multiple threads. How do I marshal calls...
View ArticleRabbitMQ On Windows With .NET, A Case Study
Any reader of this blog will know that my big project over the last year has been to create a simple .NET API for RabbitMQ called EasyNetQ. I’ve been working as a software architect at 15Below for the...
View ArticleThe Onion Of Compromise
I love little phrases that sum up large scale behaviours in software systems and the organisations that produce them. One of my favourite is “The Onion Of Compromise.” I first heard this gem from my...
View ArticleWebRequest Throws On 404 Status Code
WebRequest, or rather HttpWebRequest has the annoying behaviour or throwing a WebException when the server returns 404 ‘not found’ status, or in fact any unexpected status number. It would be much...
View ArticleMy Super Simple Node Twitter Re-Tweeter
I’ve been having a lot of fun writing a little ‘re-tweeter’ this morning. We basically want to monitor our user stream and then re-tweet any status with a particular hash tag. I thought this would be...
View ArticleA Geek Christmas Quiz
God rest ye merry gentlemen! Welcome to my 2012 Geek Christmas Quiz. Every Friday morning at 15below we have a ‘DevEd’ session. Usually this is a presentation about some interesting tech, or a new way...
View Article