What is the Federated Social Web, though?

I was talking to a friend about the federated social web recently, and I realized that my descriptions of it were really vague. After thinking about it, I think I’ve come up with a pretty good, concrete definition: a website or service is part of the federated social web if it’s open-source and provides an RSS or Atom feed that’s relatively easy to find.

Of course this isn’t what most people mean by it; most people for whom ‘federated social web’ means anything at all, would probably think of XMPP or pubsubbub or podservers or freedom boxes or what-have-you. Those are all technologies that might make up the federated social web in the future. But for right now, I reckon any service that doesn’t provide an RSS or Atom feed is either very immature, or else doesn’t really want to be federated.

The nice thing about this definition is that it’s easy to say what websites are part of the federated social web. WordPress, Livejournal, Dreamwidth, and Identi.ca / StatusNet are. Facebook definitely isn’t, Twitter pretends to be, a little bit, sometimes, but isn’t really. Tumblr lets you have RSS feeds which is nice, but the fact that it’s closed-source means you live in fear that those feeds may one day be taken away without warning, which is what happened with Twitter.

By this definition, Buddycloud isn’t on the federated social web yet, although they’ve done some good work in laying the groundwork. Diaspora passes the test, although the atom feeds are not exactly easy to find. Feed addresses look something like this: https://joindiaspora.com/public/my-username.atom.


Internet censorship – some thoughts about tactics

1. Facts on the ground

When we think about fighting against Internet censorship we usually think about campaigning, lobbying, explaining our case. This is great stuff to be doing, but in my opinion there is too much focus on explaining things in a way that is abstract and technical.

The term “facts on the ground” comes from the Israel-Palestine conflict. Israel found that they were unsuccessful in trying to convince the UN to recognize their claim to the Palestinian territories. Since arguing their case wasn’t working out for them, they simply went ahead and created facts on the ground – settlements in the disputed territories.

If you’re just asking for something you’re in a weak tactical position. If on the other hand you create something and then defend it, you’re in a much stronger position. What are our facts on the ground? Every website that is threatened by Internet censorship. A prime example is Wikipedia. Everyone knows it, everyone uses it.

Governments have done a pretty good job of convincing the average person that Internet censorship is about terrorism, copyright, or pornography. We need to tell people that copyright threatens things they use and depend on every day, like Wikipedia.

2. Don’t alienate people

It’s easy to get mad about the fact that most people, especially non-computer-techies, don’t seem to care about Internet censorship. It’s very tempting to think that people who don’t seem to care that much about this issue are stupid and deserving of contempt.

Winning any sort of campaign depends on getting as many people as possible to support your cause. (Or alternately, you can just have lots of wealthy donors and corporate lobbyists to support you, but, well, never mind.) If you act like you think everyone who doesn’t know or care that much about your cause you is stupid, people will notice this, and they’ll be annoyed.

Think about it: in the past year, how much time have you spent campaigning against the cruel treatment of asylum seekers, or campaigning for the police to tackle domestic violence, or against the lack of meaningful limits to carbon dioxide emissions? No one person can fight for evvery cause that’s worth fighting for, and the sad reality is that a lot of people are struggling just to survive, let alone try to make the world better. Walking around with a chip on your shoulder because others aren’t supporting your cause is not only logically floawed, it’s bad tactics.

3. Don’t talk about pornography

The would-be censors want us to talk about porn. They have put a huge amount of effort and money into convincing the public that Internet censorship is about porn, so that whenever the topic of censorship comes up, it will get derailed into an argument about porn.

Some people think porn is a healthy way of exploring sexuality. Some people think porn promotes misogyny and violence. Some people think it’s acceptable for teenagers to watch porn and some don’t. Some people think parents should be there when their kids are online so they know what websites the kids are visiting, and some parents don’t actually have the free time required to do this. These are all interesting and important conversations to have, they just don’t have anything to do with government-ordered censorship at the level of the ISP.

As far as Internet censorship is concerned, it really doesn’t matter what you think about pornography. If you like porn, you probably don’t want the Internet to be censored. If you’re a parent who wants to prevent their kids from viewing porn, you don’t want censorship at the level of the ISP, which is notoriously ineffective, you want to install child-protection software on your computer; it will work better, and you’ll be able to make age-appropriate choices about what is or isn’t censored.

How to delete all the posts from your Facebook account

When I first set out to delete all my old posts, I naively thought that Facebook would just let me do that by clicking a button. I expected to have to find my way through a Byzantine array of menus and sub-menus, but I was expecting that eventually I would be able to just click a button. Of course I was mistaken. Facebook didn’t get to be the world’s biggest social network by making it easy for people to delete their data. Facebook does let you delete your old posts – but only by clicking on them, one. by. one.

Actually, it’s worse than that. The little icon you have to click in order to delete a post is invisible until you hover the cursor over that post. So you can’t mouse-swoop directly in for the click, the dynamic is more like: point, hover, wait for the small, not-particularly-visible, light-grey-on-a-white-background icon to appear, move the cursor over it – careful, the ‘edit or remove’ icon is right next to the ‘highlight’ icon, and you don’t want to get the wrong one. Once you manage to click ‘delete of edit’ and wait a second or so you get a little drop-down menu, where you want to select ‘delete’. Don’t bother trying to tab or down-arrow, you have to mouse-click. Then, maddeningly, after another moment’s pause an alert box asking you if you really want to delete the post. This one you can either click or press enter. I ended up keeping my left hand over the enter button just for this, with my right hand working the mouse. Success, you’ve deleted a post! Don’t be too eager to get on to the next one though. The post you’ve just deleted has left an empty space, and it will take the other posts a few moments to rearrange themselves accordingly.

As you can probably tell, I’ve had plenty of opportunity to contemplate this workflow. And, as a hobbyist web developer who generally writes javascript by pasting in random bits of code from the web until something works, I can tell you that this workflow is utter crap even by my not-particularly-high standards. In fact, the whole time I was deleting my old posts, I had a vision of a team of Facebook software engineers in an office somewhere far away, laughing at me.

But I digress.

When I set out on this task I naturally Googled “how to delete all the posts from your Facebook account”, and turned up a couple of possibilities. I tried out running a script via Firefox Add-on Greasemonkey, and when that didn’t work I added another Firefox Add-on called iOpus iMacros, which records your mouse clicks and then attempts to re-play them. It was fun to play with but alas, it didn’t work.

So this blog post is a different sort of how-to guide. It’s a guide to deleting your Facebook posts the slow way. The only way that’s (probably) guaranteed to work.

How to delete all the posts from your Facebook account:

Don’t try to delete everything in one go, as quickly as possible – that’s just setting yourself up for failure. Instead, try to do a little bit each day. If you manage to delete 3 months’ worth of posts a night, you’ll be done within a few weeks, even if you joined Facebook back in 2006.

Stop at the first sign of carpal tunnel.

Don’t delete posts early in the day when you’re full of energy. Do it when you’ve used up most of your creative energy for the day, when you need some downtime, when you’re tired by not tired enough to go to sleep.

Put on some music, or listen to the radio, or a TED presentation. Maybe you have an album you haven’t managed to listen to all the way through yet. If you’ve got a big screen you can even delete old Facebook posts in one window while watching a film in another. Stop deleting posts when you start to get sick of it – you can always come back to it later.

Above all, don’t forget to have fun!

A CSS website layout that works for all screen resolutions

It seems like it’s becoming normal for every website to have two layouts, one for real computers and another for mobile phones with teensy-tiny little screens. I am way too lazy to be dealing with that, so I came up with a layout that works for screen widths from 100px and up. I’ve only tested it on Firefox, but it passed the W3C’s HTML and CSS validators, which hopefully means there is a decent chance it’ll work in most browsers. Here are some screenshots:

Continue reading


I’ve got my own channel on beta.buddycloud.org. I get the feeling I’m the only one on there who isn’t a Buddycloud developer. On the face of it Buddycloud doesn’t seem like anything new, it’s just a Twitter-like feed, although posts aren’t limited to 140 characters. It all feels very new and buggy – for instance, you can’t even add profile information or add your own icon picture yet, and you can’t yet connect it to any other services.

Despite all this Buddycloud is the social network I’m most excited about, because I think they’re doing a really good job on the behind-the-scenes stuff. Buddycloud isn’t a website, it isn’t even a single social network, it’s a whole bunch of different things – webservers, web clients, and things that just send data between web servers and web clients. While all that stuff makes it harder to explain what Buddycloud is, it makes it easier for people to use it in a truly federated way – you can, for example, use beta.buddycloud.org as a place to store your data, but write your own webclient, if you don’t like the default one. They seem to have federation as a core goal – even though the webclient barely works yet there is already an Atom API, which really warms the cockles of my heart because it shows that federation is being prioritised over making a pretty website.


SVG hacking: getting a cartoon giraffe to blink

cartoon giraffe Most people who create SVG vector images like this cute giraffe do it in Inkscape, which tends to mask the fact that, unlike PNGs or JPGs, SVG files are plain text files that you can edit, like HTML. In fact, SVG is a distant cousin of HTML, so the code looks kind of similar. The brilliant thing about this is it means even someone like me with no artistic skills at all can do interesting things with SVG. This giraffe is pretty cute, but I want to make her look more lifelike by making her blink.

Step 1 is to download the SVG file from clker.com. The artist who created this image dedicated it to the Public Domain, which means I’m free to do anything I want with it.

At first glance the code can be intimidating:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
id="defs4" />
d="M 441.29462,560.70587 C 441.30944,610.4339 401.00107,650.75429 351.27304,650.75429 C 301.54501,650.75429 261.23664,610.4339 261.25146,560.70587 C 261.23664,510.97784 301.54501,470.65745 351.27304,470.65745 C 401.00107,470.65745 441.30944,510.97784 441.29462,560.70587 z"
style="opacity:1;fill:#ffcc00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28735638;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
d="M 93.338093,349.0455 A 18.031223,15.556349 0 1 1 57.275646,349.0455 A 18.031223,15.556349 0 1 1 93.338093,349.0455 z"
style="opacity:1;fill:#784421;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />

But there’s a nice simple structure to it: every section of code starting with


and ending with


represents one piece of the image: an ear, an eyeball, or a brown spot, for example. You can figure out which part of the code corresponds to what part of the image by commenting out code segments one at a time. SVG comments work the same as in HTML, ie

<!-- This is a comment -->


So I set out to make eyelids by adding in two rectangles (W3C has some nice simple tutorials on doing simple shapes in SVG). I worked out the length, width, x and y values by trial and error, and all the styles are copied from the eye code, except I made the stroke-width narrower. Here’s the code:

Continue reading