jonm.dev

The Art of Writing Software



Notes from QCon New York 2015

I had the opportunity to speak–and hence, attend–QCon New York last month and thought I would share some highlights and notes from some of the talks I was able to see. Overall, this remains a high quality conference, with multiple sessions where I had to make tough choices about which talk to attend. I was not able to attend talks every session due to responsibilities from the “home front” at work, and did not always take notes (sometimes I just listened and tweeted particular points).

Does JQuery expose a monadic interface?

Pam Selle raised an interesting question on her blog recently: does jQuery expose a monadic interface? I’ll interpret this as specifically asking: are jQuery containers monads? This was such an interesting question that I decided to investigate it more thoroughly; one can never have too much practice figuring out how monads work, in my experience! There are a couple of formulations of monads; both have in common that there is a container type M that “wraps” plain data values in some fashion.

Installing Ubuntu on an old Macbook

[Update: This post is turning into a lab notebook more than anything, and I’m mainly just recording it here as someplace convenient, with the idea that someone might find it useful someday.] I have a 2008-vintage Macbook for which OS X no longer seems to be a good option: I managed to get it upgraded to OS X 10.7 (which was not straightforward), but I think the hardware is a little underpowered at this point.

Hackday Project: tarpio.us

I saw this tweet from @kellan that got me to thinking: It would be useful if Tent.io could describe itself in the world of protocols I know, particularly PuSH, XMPP, and SMTP. I think the notion of a distributed social network is an interesting one, and I’ve been pondering how it might work. I think I’ve got a scheme for one, which I’ll outline in this post, and I think it might not take that long to throw it together with off-the-shelf open source and a dedicated hack day.

Resources and Query Parameters

[Editor’s note: This is a cross-post from a Tumblr entry; I started to write it as a quick note because someone was wrong on the Internet, but by the time it was done, it was long enough to be a blog post in its own right.] What kind of string is this? http://example.com/path?query=foo Well, it’s a URI (Uniform Resource Identifier) as well as a URL (Uniform Resource Locator). But wait, that means the whole string (check RFC 2396) is resource identifier, which means the whole thing identifies a resource (literally).

Hypermedia Programming: Lists

Tags [ hypermedia ]

The humble list is one of our simplest and yet most powerful data structures–so much so that we will even routinely write them out by hand. We put them on sticky notes to help us remember things we need to do or things we need to buy from the grocery store. We even use them for entertainment. In this post I’ll explain how to represent and manipulate lists using hypermedia techniques.

Using HTML as the Media Type for your API

Tags [ HTML, API ]

There is an ongoing (and interesting) discussion on the API-craft mailing list revolving around designing new media types for enabling hypermedia APIs primarily for programmatic consumption. As some folks may know, I like to use HTML as the media type for my hypermedia APIs. Steven Willmott opined I think the problem isn't "why not HTML" it's "why HTML" - if you strip out all the parts of HTML which are to do with rendering things for presentation you're left with almost nothing at all: <a> <h1>, <h2>, <h3> .

Intuitions About Software Development Flow

Tags [ cycle time, flow, optimization, throughput ]

In a previous post, I described the underlying theory behind optimizing the throughput of a software development organization, which consists of a three-pronged attack: remove queuing delay by limiting the number of features in-flight remove failure demand by building in quality up front and fixing root causes of problems reduce average cycle time by experimenting with process improvements In this article, I’d like to provide an alternative visualization to help motivate these changes.

How to Go Faster

Tags [ cycle time, flow, kanban, Little's Law, process improvement, throughput ]

Ok, I’m going to tell you how to make your software development organization go faster. I’m going to tell you how to get more done without adding people while improving your time to market and increasing your quality. And I’m going to back it all up with queuing theory. [ By actually explaining the relevant concepts of queuing theory, not just by ending sentences with “…which is obvious from queuing theory”, which is usually a good bluff in a technical argument being had over beers.

Tales of Test-Driven Development

Tags [ TDD ]

Inspired by a talk about Clojure given by Rich Hickey at Philly Emerging Tech earlier this year, I’ve been toying with building a Java library of pure (immutable) data structures, starting with the Map implementation based on Phil Bagwell’s Hash Tries. Yes, I know I could probably just figure out how to use them straight out of Clojure by interoperating, but that would deprive me of an interesting coding exercise.