What about open licenses for specifications?

So you are starting on your new project and you decide (gasp) to write actual specifications for the network and API interfaces. Being a good ’open’ type you want to have a solid open license for the specifications. Below I look through what I think are the key terms the license needs and conclude that the Apache 2.0 License seems to have all bases covered.
Continue reading What about open licenses for specifications?

Whatever happened to the open data web?

Once upon a time HTTP and HTML were trucking along nicely. This meant that we had a truly open, meaningfully interoperable framework to allow for rich human based web interactions. The next obvious step was to look into machine to machine web interactions. A bunch of work went into this area. XML, WS-*, POX, JSON, RSS, OData, etc. With the exception of RSS none of it came to much of anything, especially in the personal space. In this article I look at why I think the previous efforts to create an open data web failed.
Continue reading Whatever happened to the open data web?

Peripheral Bandwidths – PCIe, Infiniband, QPI, SATA, SAS, DMI/ESI & Ethernet

I’m trying to figure out just how much data I can move through a modern computer. To grok that I need to understand the bandwidth capabilities of the various types of peripherals one can attach to a modern computer. I therefore run through below what appear to be the main peripheral types and what kind of bandwidth they can maintain. Wikipedia has a great summary of the bandwidths of various technologies. Note however that the bandwidths listed in that article are raw (except, confusingly, when they are not) bandwidth, not data bandwidth, below I try to find numbers that represent actual data bandwidth.
Continue reading Peripheral Bandwidths – PCIe, Infiniband, QPI, SATA, SAS, DMI/ESI & Ethernet

Losing exceptions in C#, there has to be a better way!

A nasty problem I've been tangling with for a while now is that C# likes to eat exceptions. If one is already in an exception context and another exception gets thrown then the first exception, by default, is just lost. I explore below some ways to deal with this and honestly they all suck. Does anyone have a better idea?
Continue reading Losing exceptions in C#, there has to be a better way!

State diagrams for Paxos made simple

I was reading through Paxos made simple and I really wished there were state diagrams to help explicate the protocol. So I wrote them up and share them below. Please keep in mind that the diagrams just explore naive Paxos, that is single value, no distinguished proposer or distinguished learner. So this version of Paxos is pretty useless in practice but it completely captures the core mechanisms that make Paxos work (with the exception of how to pick a distinguished learner). Please note that this article is intended to be used by someone going through Paxos made simple. It is an adjunct, not a replacement.
Continue reading State diagrams for Paxos made simple

Wrapped or Native Paxos?

So let's say I want to build a nice highly consistent multi-data center store, something like Megastore. Most everyone at this point has something like Bigtable already deployed in their data centers. What they typically don't have is a way to keep different instances of their table stores guaranteed consistent with each other across DCs. Megastore steps in to address this issue. But this begs a fundamental question - what's better, to wrap a Paxos coordinator on top of existing table stores or to build a new Paxos native storage service?
Continue reading Wrapped or Native Paxos?