Brian Dainton's Hands On XMPP in Ruby Talk

Brian Dainton from FiveRuns gave a talk last week about A Change In Protocol: Exploring XMPP in Ruby. It's basically a practical hands on, so now you want to actually build stuff, version of kellan and my bombastic Beyond REST: Building data services with XMPP PubSub. Brain's put up all the code samples on github.

Posted on October 3rd | 1 comment | Filed Under: | read on

Al Gore calls for civil disobedience?

Yesterday at an exclusive meeting of world leaders, famous people, and super rich, Al Gore said "it is time for civil disobedience to prevent the construction of new coal plants that do not have carbon capture and sequestration." The statements were not well received by the billionaires and presidents in the audience. But it has set of a bit of a blog storm of people reacting to it.

It's amazing to see somebody so amazingly powerful realize that there are real limits to how much reform can be wrought through speeches and polite politics. Personally i've long been and advocate of direct action and civil disobedience. It shifts the debate and pushes things forward when politely asking could never work.

What's ironic is that there IS a civil disobedience campaign against coal mining and new coal power plants! The latest action was just last week where 14 people were arrested blocking the construction of a new coal fired power plant.

Campaigns of direct action against the coal industry have been going on for the better part of a decade in Appalachia.

There's Rain Forest Action Network's Coal is Over campaign, the Campaign to end mountain top removal style coal mining. The base of these kinds of direct action green campaigns in the US is as usual the local Earth First! groups, in this case Blue Ridge Earth First! and Katuah Earth First!.

Posted on September 25th | 0 comments | Filed Under: | read on

Charla Más allá del testing: specs y el Desarrollo Guiado por Comportamiento. (Beyond testing, Specs and BDD)

I’ll be speaking at the Uruguayan Linux Users Group all about ruby event this saturday in Montevideo. My talk is Más allá del testing: specs y el Desarrollo Guiado por Comportamiento. (Beyond testing, Specs and BDD). I’m going to try and convey the ideas of BDD and how the ruby community has been redefining testing in the development process.

In addition to my talk, Diego Algorta is doing introduction to ruby, and Nicolas Sanguinetti is giving an introduction to rails.

The talk will be in spanish. It should be good, it’s been a couple years since i gave a tech talk in spanish. It’s been tricky to figure out what words to translate, and what words to just leave in english. For example prueba means test in spanish, but in the context of software the english word is used anyway. As usual i’ll throw up the slides on my slideshare account.

If you’re one of the 0.44% of my blog readers who are in Montevideo, come by for the talk.

Posted on August 13th | 0 comments | Filed Under: TechnologyUruguay | read on

Rethinking cookie cutter websites: ugc ugc ugc

It’s a truism that cookie cutter websites are bad things. Poor knock off copies. Mercado Libre vs Ebay, or just about anything yahoo does. Take somebody else’s idea and do the same thing, with your own twist.

It’s the kind of thinking you get from folks hiring elance and odesk developers. Fast cheap, and kind of like what joe was doing over there. Back when i was working on Odeo somebody posted wanting to pay $1000 for a clone of the site.

But if we think about it a little more we can realize there is some value there. Really nothing we do is original or new. We’re always riffing off of each other. When somebody does something which is NOT copying and adapting from others, then things don’t work. An idea which is “ahead of it’s time” is perhaps an idea which is to original and insufficiently derivative.

We live in a world which places the truly original, paradigm shifting ideas above others. The lone Einstein who goes off and reinvents the world. It wasn’t Ted Nelson’s hypermedia that changed the world, but the community of folks who mashedup gopher and hypertext decades later. We need people working on crazy reinventing the world ideas, but mostly those folks fail. Even if they do come up with great ideas, they will be ignored.

Most of the creative work we do is copying and deriving from ourselves. It’s a community of people who come up with ideas and build things together. Sure one person might do the design, another the coding, it is their work, but the ideas floating around can’t really be owned. We’re derivative and that’s ok. Relevant work, useful arts, are derivative. A user interface must be derivative for it to be useful.

And websites?

So, how does this get back to websites? Websites are my craft, they are what i create. Sure i actually work on the code behind them, but the goal is to create websites for people. Even things like Fire Eagle, which mostly get used by software to talk to other software, is really about people. I’ve been building websites for well over a decade, and will probably keep doing it, I enjoy what i do.

So then the question becomes, what kind of websites to build. Well we could do the standard cookie cutter idea, copy somebody else’s thing whole hog. Or we could do flickr for video, twitter for xyz, take somebody else’s concept and change the nouns.

But if we step back a bit we realize that interesting websites are about sharing things. Jyri says what’s being shared are social objects and while he has 5 steps, the important ones are what’s being shared how. The noun and the verb. I share photos by uploading them.

What does that look like? Well Matt Jones of dopplr says they are sharing trips as the social object, and the verb is to plan. Once you get the frame to think about it’s pretty easy to see what people are doing. So then you’ve got Platial, Mapufacture, and google maps are competing in the space creating and sharing maps online.

For me the idea that what we should be doing is creating a way for people to share something together, that’s what we’re doing in social media, has taken a while to become clear. Sure Twitter is a microblogging service, or a many to many message routing system, but really, most importantly, it’s a way to share what’s going on in my life.

Back to the cookie cutter thing

Instead of copying something which is already successful, I’ve been thinking about how to decide what’s interesting to work on. The first step is to find something people value, something they are sharing with others, and which makes them happy already.

Here’s an example, i used to play ultimate frisbee. Teams play in tournaments all around the world, and each one has a distinct culture. The way players used to find out about cool tournaments was over the rec.sport.disc usenet group and at parties during the tournament. Teams want to know what’s cool to go to, but everybody’s definition of cool is different. For example, the hyper competitive teams like UCSB want to play hard all day then get drunk at night. Other teams want play naked, smoke a bowl, and sample the field side BBQ. There’s no good way for people navigate that social space. A website which let people share about the tournaments would be very meaningful to the small world of ultimate frisbee. What they need, the sites, tools, information being shared, model of permissions and openness, are distinct to that community.

But isn’t that yahoo, friendster, myspace, facebook, twitter…?

Isn’t there a generic one size fits all platform which will do this? Perhaps not. Right now facebook reigns supreme, and it’s because it does a lot of the sharing right. It’s also because they are able to make things work much better having a semi-walled garden. What’s not at all clear to me is if it’s possible, or even desirable to have one big site. Even with the F8 platform, i’ve only got one kind of relationship. Is what’s good for keeping in touch with college and work buddies good for finding a cool fall tournament to go play frisbee at? Sometimes.

Sometimes not. When communities get big they tend to regress towards the mean. The way you share one kind of information, and with whom, is not how you want to share other information.

Take Flickr for example. Most people use flickr to share snapshots with their family. Some people use it to become better photographers and show off their stuff. Others use it as liberated space for their own very niche subcultures, often sexual or deviant. The same space, properly segregated works pictures of your kids and eroticized pictures of 6 inch tall women. The reason it works is that flickr is very good at creating spaces and knowing how to create a space for a self managed community. It’s only by knowing a LOT about sharing photos, the reasons people do it, and the spaces they need, that you start creating something wonderful. The Facebook photo gallery on the other hand is really great for sharing the kinds of photos you’d take at a party, on a trip, visiting friends. The ability to mark up and link to who in which photo is amazing. It’s something which would actually hurt members of the tiny women fetish community.

So, one size fits all doesn’t work for political reasons, it creates incredible centralization of power. But if it were just politically bad, that wouldn’t be enough to stop it. The ways and with whom we share things are contextual. I’m sure the tiny women folks would rather not use their real names, like facebook requires, perhaps for good reason. The rules of the game, the constraints, matter. What you can do, how you share, what you share, all of these things are which there can be no universal solution. It is this dynamic which will keep facebook, or anything else, from taking over the whole of the web.

So what should i build?

I’ve been thinking about this question a lot since I left Yahoo Brickhouse. At brickhouse we spent a lot of time discussion what to build, how to go about building innovative things. What made sense for us, for yahoo, for brickhouse. Now that i’m not working for big purple any more, i’ve got to answer the same question, what do i do, what do i build.

One option is you do consulting, and you build what the client wants, not what they say they want, but you talk them through discovering what they really want. These days everybody seems to say they want facebook. That’s being to cookie cutter. Copying the image of what works elsewhere without understanding the underlying meaning. Facebook lets people share what’s going on in their lives and present an image of themselves through that. Clients say they want facebook, but really they are trying to achieve something else, and they don’t know how to ask for it.

People want to share. If you are an Oracle DBA, you want to learn about and share information about your work. Server configuration, optimization, and stored procedures. Sharing and learning, creating community in the context of Oracle DBA’s means solving their needs, knowing what they need to share and how. Some of that might be snippets of SQL, but some of it might be sharing how hot shit they are, and how when they are looking for a new job you should hire them.

What will i build?

The ideas i’ve been mulling over, hacking on, and playing with are how to share things i’m personally interested in doing. Places where you see somebody is already sharing, but in a broken way. An example i like is Localism, it’s a realestate website, but instead of sharing property listings, it creates a space for agents to share information about communities. It’s the hidden knowledge that real estate agents have, and creating a site for it helps some agents show off how damned well they know their beat.

Find something which needs to be shared, which is being shared but poorly, and build a new way of doing it which better serves the sharers. To share is a fundamental human need. It’s why solitary isolation is considered a horrible punishment. We live in a world where we have a multitude of different identities, and every one of them is reflected in a community of others. In thinking of what to do next, i’m trying to find out how to server individuals participating in their communities.

Posted on August 6th | 2 comments | Filed Under: | read on

Git: You are in the middle of a conflicted merge.

So i’m not a git expert. But i’ve been using it for about a month and i’m mostly really happy. The only time it drives me crazy is when i get this damned message.

~/code/tt (master) $ git pull
You are in the middle of a conflicted merge.

It’s like this swamp in the gitverse. Normally merging is fine everything goes along with tons of merges branches for each feature which i merge back in. I really like it. But when merges fail git does not provide any path out of the swamp. Your magical merging technology has failed you and now you must find your own way out. Every command leads to the same damned message. “You are in the middle of a conflicted merge.” Well i know that! Trying git resolve doesn’t do much, that’s not even a command.

~/code/tt (master) $ git resolve
git: 'resolve' is not a git-command. See 'git --help'.

So what to do, well first resolve the conflict in your merging program of choice. Almost always for me it’s just textmate, open the damned conflicted file and edit it. FileMerge and others work too, but we’re just diffing shit, it’s not too hard.

Now here’s the trick, once you fix the problem, add the files which you’ve had to edit, and commit them.

~/code/tt (master) $ git add lib/im/response.rb
~/code/tt (master) $ git commit -m 'I hate failed merges'
Created commit 34d2648: I hate failed merges


That’s it. I’m writing this blog post because i keep forgetting what to do, and when i search on google for the error message, You are in the middle of a conflicted merge. i get some damned message on the kernel dev list about the development of git.

So here the steps are:

  1. Pull the update from master, or whereever – git pull
  2. See the dreaded merge failed message
  3. Edit the files which failed to merge correctly cleaning up the code
  4. Run your tests / specs just to make sure you caught everything
  5. Add and commit the manually merged file. git add path/to/file.rb; git commit -m “work damnit”
  6. Go back to pushing and pulling in peace


Git’s an amazing piece of technology with some really broken parts to it’s interface which makes learning how it works hard.

To me it’s similar to the differences between the GNU stack and Solaris. I came to know about the GNU tools through Linux, it was just how everything worked. Then one day i had to use Solaris, and the commands had all the same names, and worked. But not as well. The GNU tools have really amazing user interface and interaction design. Seriously. Read GNU Standards for Command Line Interfaces and you’ll be amazed, that’s what we all think of as linux and unix. It works, it’s standardized. It makes it easy to guess what’s next and discover how the application works. It’s not given credit, but that document, and the extensive toolset like readline, built on it, is what makes the internet work. It’s discoverable, it’s built on the idea that you can pipe information from one program to another, and that they will all work. If you don’t believe me, just look at DJB’s amazing, but far from standard apps.

So what should git do? Well it should suggest a solution. Or make a solution documented in the examples of the man file. It’s pretty damned simple, fix the merge, add the file, commit, and you’re done. Instead it locks up and prevents you from doing anything until you intuit your way out of the problem. Insanity.

PS. Yes i’m lazy and should submit the fix myself, people are submitting contributions to git all the time.

Posted on August 1st | 0 comments | Filed Under: | read on

The Open Web Foundation - Why Do It?

So i’ve not been involved in the newly launched Open Web Foundation but i have been following along as various folks i know worked on OpenID and OAuth. Is it a great idea, or yet another structure? I’m not sure.

Here’s my understanding. Most standards traditionally have been heavy vendor driven processes. Even when you don’t need $$$ or to be a big company to participate, you do need to have the resources to fly around the world to the meetings, like IETF. It’s painful and nasty.

There are a series of standards which are created using more open source / hacker / collaborative ways which are emerging from code, like extracting a framework from your application, you extract the standard from your work and best practices. It’s easy, lightweight, great, works.

Some of these extracted open sourcey standards get picked up and big companies want to start implementing them. This is great, just look at how OAuth has gotten adopted all over the place.

But there is a problem, these big companies have lawyers and their lawyers are both stupid and evil. Lawyers created the stupid and evil system of intellectual property. These lawyers all seem to have adopted a particularly brain dead view of what my happens with related to participation and patents and intellectual property rights.

They think that unless you have a magic paragraph which says you don’t grant patents and intellectual property rights just by participating in a standards process, or even USING or READING a standard, the big corps loose their rights to enforce their patents.

Yes it’s super stupid, but that’s what you get when you let lawyers run your world.

So the Open Web Foundation is about creating something which will shut the lawyers up and let these bottom up, extracting standards folks still work without having to die the death of a thousand meetings with legal.

Posted on July 24th | 1 comment | Filed Under: | read on

Beyond REST? Building Data Services with XMPP PubSub

Kellan and I gave a talk today at OSCON about some ideas we've been playing with around how to make web services work as things keep getting bigger and faster. Apparently it was well received.

UPDATE: There's a great write up by Robert Kaye about the talk by on O'Reilly Radar and Joshua Schachter confirmed similar use / abuse pattern for delicious.

Posted on July 23rd | 4 comments | Filed Under: | read on