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? Updating the web
When the web as we know it was originally designed the world was a very different place. In this article I look at the world as it was and the world as it is and explore what I think this means for the web.
Continue reading Updating the web A data web user’s bill of rights
Building a data web needs to start with a clear statement of a user’s bill of rights. This is the core of the requirements that should drive the technologies used. Below I list what I think are the four fundamental rights and then explore their technical implications.
Continue reading A data web user’s bill of rights 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? Unicode, Windows and C++
Unicode, Windows, C++, it should all be good right? The answer seems to be that, well, actually, yeah, it is. But there are a lot of details. I do my best to walk through some of them below.
Continue reading Unicode, Windows and C++ 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 My computer memory cheat sheet
For various reasons I need to better understand the gory details of how modern hardware actually works, especially NUMA systems. My first stop on my tour of modern hardware is memory, specifically all the gory details of DDR3 memory (I’ll start worrying about DDR4 when I can buy it).
Continue reading My computer memory cheat sheet 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?