Skip to main content
 

What idno is

idno.pngThis site runs on idno: an open source social publishing platform that I've been working on for the past few months in my own time.

You may know that I co-founded Elgg, the open source social networking engine, which is used by the likes of Oxfam, NASA, the World Bank and several national governments as a social intranet and learning platform. The original thinking around Elgg happened a decade ago. Given that, you shouldn't be surprised to learn that my original thought experiment was: What decisions would I make if I was building Elgg today, in 2013? What would I do the same way, and what would I do differently?

Some technical decisions

I knew that I could make a faster social networking platform, with a better templating engine, and a much smaller codebase - even while sticking to PHP as an underlying scripting language. Partially that's because PHP 5.3+ is a much better development platform than earlier versions. It's also because there are now some well-tested, intelligent back-end frameworks, like Symfony 2, and front-end frameworks, like Bootstrap.

One of the major decisions I made when we built Elgg 1.0 was that not only was it a hassle for plugin developers to write their own database schemas - it was undesirable to the point of being dangerous. We effectively faked a NoSQL schema in MySQL by creating a data model around entities (first-class objects like users and blog posts), metadata, annotations and relationships. People were taken aback, and it was row-intensive, but it worked, and it continues to work today.

Nonetheless, today we have NoSQL, so is based around MongoDB. This means there are far fewer database transactions involved - and adding new data to an object is incredibly easy. Together with a plugin architecture based on lazy loading, and Symfony's excellent observer pattern support, as well as the framework code I've built, I'm able to write a new plugin in an hour or two. That's important for a system I'm building in my spare time!

51d37de3bed7de3636a1d24e

Meanwhile, all of the things about that were great - a plugin architecture, granular access permissions - are intact. And on top of that there's a faster framework, and a responsive front-end that works really well in a mobile browser. Great!

But that's not the end of the story.

The community has existed for years as a force to advance the state of the independent web, and to promote ownership of our own spaces. IndieWebCamp is an annual event for creators to discuss their platforms, technologies and ideas.

One of the big concepts to come out of has been : Publish (on your) Own Site, Share Everywhere. The idea is that your friends or followers shouldn't have to join your site to engage with you; you should be able to post on your own site and be read on Twitter, Facebook, Foursquare, or wherever they happen to be. idno has built-in plugins for status updates, blog posts, images, checkins and events. Correspondingly, it also has plugins to this content to Twitter, Facebook, Foursquare and Flickr - and writing more would be trivial.

That's just as well, because I've committed to only post on my own site and copy to third parties (where that's possible).

Reinventing the social web

This year, though, something else happened. Using Microformats 2 (a way to very simply embed meaningful markup into any web page) together with Webmention (a way for any web page to lightly ping the pages it references), the community participants created the first indieweb decentralized comments thread.

Using nothing more than the markup on their own web pages and a very simple protocol, the participants created the basics of a decentralized social community, where each comment is hosted on its owner's own site, but nonetheless forms a coherent, easily-readable narrative.

This is a very big deal.

It's a completely different model to traditional social networking, where content typically doesn't bleed outside the walls of a specific social site. It's also different to previous decentralized social networking efforts, which have been in many ways more sophisticated, but much harder to join in with. Because a simple IndieWeb-compatible social tool can be built in an afternoon, just as a simple RSS-compatible tool can be built in an afternoon, these concepts have a much greater chance of succeeding.

51d2f810bed7dee523aaad1b

Needless to say, idno is now a first-class participant in the decentralized IndieWeb social community. I've implemented IndieWeb comments, and moved immediately to also implement decentralized events that anyone can RSVP to, as well as decentralized likes. It also integrates with Firefox's brand new Social API.

You can browse the web and reply to any page, on a site that you truly own.

As more sites and platforms implement the IndieWeb social standards, those interactions will become correspondingly more social. For now, though, you can go ahead and interact with the web already.

Beyond that, idno will continue to develop over time as a community platform in itself. I'm using it here on my own site as a single-person publishing platform, but it doesn't have to be that at all, and all those Elgg-style features will continue surface as time goes on. But there's a big, wide web out there, and it's important to embrace that as widely as possible.

idno's homepage is here. Meanwhile, I continue to do work I'm proud of in my actual job, working for latakoo to facilitate media storage and transfer for video professionals and the broadcast news industry. We're talking about using decentralized social networking there too - but more on that another time.

· Posts · Share this post

 

How chickens work #indiewebcamp

I built an easy way to post chickens.

To post a chicken, or series of chickens, the user just clicks on the appropriate content icon:

51c72621bed7de1c5e787b6c

Note that the content icons are designed to be accessible both on a touch device and with a pointer.

The user is then asked exactly how many chickens they would like to post (with clear messaging: "CHICKEN CHICKEN CHICKEN?").

Once the user has made their chicken selection, a new chicken object is created. An Activity Streams "post" event is called. I've written my chicken plugin to define chicken content as having an Activity Streams object type of "note".

Twitter and Facebook plugins are listening for new "post" events with object type "note". When I post chickens, they're sent one! If I've linked idno with my Twitter and Facebook accounts, the content is sent to those plugins, and they are in turn responsible for sending the content to their respective sites.

My chickens are posted to Twitter and Facebook.

Finally, the default template on my feed defers to my chicken plugin every time someone visits on my site and wants to see my chicken content. (The template there displays chickens with some photographic help.) I've added an h-as-chicken microformat content type behind the scenes, so third-party clients can parse my pages for chicken content. And finally, the Activity Streams content is available to anyone who requests my pages with an Accept: application/json header.

It took 30-45 minutes to code, except for chicken photo search and download time. And here's what a post looks like.

51c72a08bed7de3314375bf0

· Posts · Share this post

 

The tyranny of content types #indiewebcamp

I've been thinking this morning about content types and granular access permissions (which, it turns out, is ground the IndieWeb community has already tread).

Activity Streams is a data syndication format with very granular content types, which is awesome - unless those content types dictate the kinds of content you actually allow people to create with your software.

Why should a content type be strictly a note, or an article, or a place, image, video, application? One of the amazing things about the modern web is that we can combine content types to create experiences that are richer than the sum of their media parts.

At the simplest level, I want to be able to (eg) include a photo with a checkin. But why not construct a post that's a photo followed by some audio followed by some text followed by an interactive widget followed by a non-linear video with an interactive layer on top of it? One of the neat things about the is that you control your platform - and that should mean controlling the form of your content too.

Watch this space ...

· Posts · Share this post

 

Centralizing my digital trail into a single #indieweb stream is making me think about what I post.

It shouldn't be surprising. I've been on the web and posting on the Internet since 1994, but posting in the usual way scatters my data all over the place. Short status updates end up on Twitter; longer, more personal ones on Facebook; checkins on Foursquare; photos on Flickr; audio on Soundcloud; etc etc etc.

My site here at werd.io is an attempt to change my posting habits from being silo-first to more of a approach: Publish (on your) Own Site, Syndicate Everywhere. Now, all my status updates, posts, photos and checkins are here in one place, on a server that I own running code that I write, and copied to all those other sites.

It's made me think about posting much more deliberately.

A friend of mine often says that you shouldn't publish anything on the web that you wouldn't be happy seeing on a billboard. I don't think that's true on the whole web - for example, at latakoo we're building tools to make sending, storing and sharing private media content (video, audio, images, large data files) easier, including a self-hosted enterprise option that federates with our hosted .com site. But for the free, public, social web, it definitely makes sense.

This morning, I checked into my office, and then I checked into a local BBQ joint for lunch. Do I really need to share that? Possibly; possibly not. It's my choice, but at least having all this content front and center allows me to make it in a more informed way. I'll probably check in a little less often, except perhaps to announce my presence at venues for special events (like IndieWebCamp this weekend) or to "tweet" links to resources I think are interesting.

This is all new, and my thoughts on it are still baking. Having one stream has certainly made me think about my identity online in ways that I haven't for years. Maybe I'll maintain several identities? Run an anonymous site for frivolous checkins or photos of my latté? The jury's still out, but because I'm empowered to run my own platform, the choice is all mine.

· Posts · Share this post

 

Now I get it: markdown as a fail-safe markup notation

Earlier today, I noted that I didn't get why people would use markdown to blog on their own sites.

That post was syndicated to the social networks I'm active on, and I got lots of very passionate replies across all of them. HTML is too heavy, and the existing rich text editors can't be trusted. is easy to write, and its fidelity is easy to maintain when you send it: unlike a rich text editor, it isn't likely to break tags or be displayed wildly differently across systems. Finally, it's pretty close to the kind of hand-made markup you might add if you were writing a text file without knowing you were using a markup language.

Message received - and it was striking to realize how much people cared about it - but I respectfully have to disagree. All of those assumptions are based on the current state of software: you use markdown because you can't trust other editors to not break your stuff, and because most of the editors in use today have heavy, slow UIs that get in your way.

I think we can do better.

One pointer to the future, as Paul Squires pointed out to me, is Medium's editor, which is designed specifically to stay out of your way. I've written a few pieces on Medium, and have to agree: it's well-designed and just works. Of course, one of the reasons it just works is that it just runs on Medium. The portability use case isn't served here at all, either for transferring text content from place to place, or for using the editor on a bunch of different sites.

Nonetheless, I think there might be a future here, which is also pointed to by the likes of products like Aloha Editor. It seems reasonable that a configurable HTML editor could actually become part of the HTML spec. HTML5 does include the contentEditable attribute, which makes any content editable - but it unfortunately doesn't provide a way to submit that content as part of a form, meaning that these updates have to be sent via back-end JavaScript. It also doesn't provide style toolbars in the way that, for example, video tags can display player buttons using the controls attribute. It would be nice to see these things, so that users can begin to trust editors, and we don't have to use shims like Markdown when we don't need to.

In the future, hopefully we'll able to just write.

· Posts · Share this post

 

Announcing the Orwell Fund's inaugural startup batch

myDNA
Log into any website with just your DNA. Running your finger along the specially designed reader is enough to locate you in our database. Because your authentication information, payment details, address and identity are now stored with your genetic traits, ancestry, relatives and location, we can provide highly personalized services that make myDNA the best personal assistant you've ever had. Coming in Q3: harness the power of you as a service with the DNAPI.

Gait
Now, the real-world services you use every day can recognize you just by the way you walk! Step onto a bus and sit down: you've bought a ticket automatically. Walking to your favorite restaurant? Our extensive gaitkeeper camera network means that your table will be waiting for you by the time you get there. Keep track of your fitness goals without having to carry a pedometer, and check in just by walking in! Gait changes the world around you as you explore it, every day.

CitiesIn
Finally, a personalized civic crowdfunding platform that takes the friction out of participative democracy and helps make the world you need. Tell CitiesIn about what you would like to see from local, national and international government, top up your CitiesIn account every month, and we'll automatically divert funds to the pressure groups, lobbyist organizations and non-profits that are most likely to achieve your goals. Perhaps you'd like lower taxes, or feel passionately about civil liberties? You're not alone. Leverage the predictive power of the crowd with CitiesIn.

Mune
Airbnb for communes.

Keys.io
We're building an amazing secure communications platform that fits you. Are you worried about your privacy, but finding all that encryption and open source software hard to use? Yeah, us too. That's why we built Keys.io: we manage all that stuff behind the scenes, so all you need to worry about is connecting to your favorite apps, sites, and people. We "store your secure keys" in the cloud using military-grade security, and choose the encryption or security method that makes the most sense for what you're trying to do. You shouldn't need to think about security to be secure. With Keys.io, you don't have to.

· Posts · Share this post

 

I don't get why you'd use markdown to blog on your own site.

Markdown is useful: an easy-to-use notation system that allows you to mark up your text in a safe, fast way.

Because you're never letting your users write raw code, there aren't any worries about them posting malware or exploit attempts, or accidentally writing bad markup. At the same time, simple lines and dashes are converted to valid HTML. Everybody wins.

But when you're writing your own site, you don't need to worry about those things. You don't care about you posting malware or exploit attempts. (Either you want to, or you won't.) You also don't need to worry as much about bad markup - and if you're not proficient in HTML, you can install a WYSIWYG editor, like the one in WordPress. Unless you're a Dr Jeckyll who morphs into an id-like alter ego without warning, you don't need to worry about your own trustworthiness as a user of your own system.

On a self-hosted site, all does is restrict what you can do. It has a syntax to learn, just like basic HTML does, and because you actually have to keep in mind which HTML tags it uses when you write it, it's actually a little bit more complicated to remember.

I like a lot of the goals of new publishing platforms like Ghost (I backed it on Kickstarter) but this feature sticks out like a sore thumb to me. I'm not at all sure this is the best writing experience on the web. And I don't see what's wrong with HTML.

Updated to add: I've had lots of feedback by people who point out that they just want to write text, not HTML, which is more than fair enough. But surely this shows demand for a smarter, context-sensitive rich text editor rather than another syntax to learn. Why couldn't an editor know to start creating bullet points when you type an asterisk and a space at the beginning of a new line?

· Posts · Share this post

 

I'm not a designer, but that doesn't mean I shouldn't try and design.

I'm not a designer. I wish I was, but my background is in computer science and writing; the first project I ever released was a hypertext magazine with a logo drawn in MS Paint.

Design isn't, of course, just about the aesthetics of a product; it's about how the product serves its intended purpose, and how the user feels while they're using it. It's about building with empathy.

I think Apple was the first to really make that last clause part of their ethos; they've been building hardware products that focus on their emotional impact for decades. It was easy to conflate this with their premium price sticker, so I think a lot of engineers missed the point until the iPod (or perhaps even the iPhone) came out, but now it's hard to avoid.

Engineers, myself included sometimes, often make the mistake of thinking about a product in terms of its requirements, where requirements are a check-box list of desired features. The result is something that technically does what it should, but is counter-intuitive, or emotionally unsatisfying. That might sound somewhat waffly, but if you're using the same piece of software day in, day out, those moments of friction add up. Ideally, if you're using something often, it should be a pleasant experience that allows you to quickly obtain the desired result.

Designers are trained to do this. Unfortunately, in small projects or lean startup situations, you might not have the luxury of a trained designer. You should hire one as soon as you can, of course - it's a skilled, professional job, and in past startups I've worked on the designer has sometimes been the most highly-paid member of the team (a decision I stand behind). Nonetheless, when I don't have one, like I don't on idno, I have some tricks that I try and employ to minimize the fallout.

Trap to avoid: "I'm not a designer, so I won't try and design."

Lazy thinking at its finest. If you're a software engineer in a startup, you're not writing code, you're building a product. The code is not the product. If you've written beautifully elegant code but the product is awful to use, your work has been for nothing. (Unless your primary goal was to write some neat code, which is sometimes worthwhile too - but that's not a product.)

A second version of this trap, by the way, is to trick yourself into believing that design doesn't matter, or that it's superficial. It does, and it's not. Design goes to the heart of why you're building a product.

The way I avoid this trap is by trying not to code first.

Telling stories

I find it helpful to tell the story of what my user does on their journey through my product.

I'm not a hugely visual person. Diagrams are often hard for me, and I find I absorb text more easily. (I do sometimes make Sharpie sketches to test ideas.) Other people are different, and prefer to draw flowcharts, storyboards, comic books. Obviously, do whatever works for you.

eg, here on idno:

  • I want to update my status to let my friends know I'm going to be at the Albatross tonight, and invite them to come.
  • I unlock my phone and push my homescreen icon for werd.io.
  • The phone's web browser starts. The system remembers me, so I'm already logged in, and presents me with some touch-friendly icons for different kinds of content depending on which plugins I have installed. On this site, I have Status Updates installed (along with Posts and Photos).
  • I push the Status Updates icon.
  • The content pane swaps to a text field, which invites me to type my status update of any length.
  • I type my status update, and push a big "post" button.
  • My status update is posted to my site at werd.io, as well as to third-party services that I've linked my account to, like Twitter and Facebook.
  • I put my phone away, knowing that my friends will reply to me on the services that are convenient to them.

Now, I can look at that story and decide if any of it is inefficient, or feels wrong. Is it burdensome to expect the user to have a homescreen icon for a web app, for example? (I think they probably won't.) What happens if I want to send the message more privately, to a few select people, but who still want to reply to me on the sites of their choice? (Watch this space.) I bet you might think of other criticisms, so it's worth me sharing my user story around a bit, to gather some feedback.

And then, once I've got some idea of what I'm going to do, I need to figure out what it looks like.

Making it appealing

It's much easier to make an application look nice than it ever has been in the past - which is just as well, because we've got more form factors and platforms to consider than we ever have before.

The answer, of course, is to keep it simple. And aligned.

Simple grid systems are an incredibly useful concept in design. There's been lots written about this, also for non-designers, so the cheater's version is this: make sure your screen elements align with each other.

In idno's default theme, I cheated by using Bootstrap, the responsive front-end framework that originally came out of Twitter. (We're actually in the process of going back and using it for latakoo's new interface, too.) Bootstrap provides a twelve-column grid that shrinks on smaller screens, so that something that works on a 30" monitor can also work on a 4" phone. So that's the carrot: the fact that you don't have to develop a bunch of different interfaces. But it's a bribe. The biggest thing that Bootstrap gives you is a much better-balanced interface overall. It's a great way to encourage better-designed pages.

You don't have to use Bootstrap, of course, but I think its principles are sound. (There are also a bunch of alternatives.)

So that's the layout sorted. How can you cheat with things like icons?

Typography, done well, is iconography, and it just so happens that there are a bunch of free fonts out there to help you out. For type itself, it's worth thinking about what looks good across browsers, is easy to read, and also is well-aligned internally to itself. Google's Apache-licensed Roboto font is my favorite right now; it was designed for Android, but looks really fantastic across browsers in a variety of weights.

Using fonts for icons means you don't need to worry about retina displays or creating versions at different pixel sizes. Bootstrap ships with Glyphicons, which is paid-for for other purposes. I've happily paid the money, but because idno is an open source redistributable package, I needed something with a compatible open source license that I could redistribute with it. Font Awesome fits the bill perfectly; I've been using it across everything I do, and I couldn't be happier.

So, great. I've got satisfying user stories; a simple, grid-aligned layout; beautiful icons that work well on any device. I'm not going to talk much about color, except to say that I find Adobe Kuler to be pretty useful.

How do we make it work?

Making interactions not suck

Going into formal interaction design would take a textbook, and someone else would have to write it. I'm not an expert, remember; I'm a cheat. I just try and stick to some simple rules.

Talk to the user. Always give them strong cues about what to do next, and/or about what they just did. (And while we're here, although it seems obvious: never do this with Javascript alert() popups. They're intrusive, and the design isn't under your control.)

Think about how your eye moves. What pops out at you when you first see a page? Where does your eye go once you've interacted with it a bit? How do other peoples' answers to these questions differ when you try it with them?

Minimize clicks. If you can edit a field in-place rather than having to click through to an edit screen, for example, that's great - but only if you've made it obvious to the user that this is something you can do.

Treat the browser as an interface too. If you're breaking the back and forward buttons, you're doing it wrong. If you're making a one-page-app immersive Javascript-heavy experience, use the Javascript History API and make sure you can get and set the state of your application through URLs saved there. Twitter does this pretty well, for example. And if you can't do this: make your app out of separate pages. There's no shame in reloading the page; really, there isn't.

Don't repost forms when the user hits the Back button, though. You can avoid this by sending a Location: HTTP header once you've performed your form action work.

Understand that the user has a bunch of different devices. It's okay to use cookies to save user session information. It's totally not okay to save any other user or content flags in anything other than a back-end database. The user's state needs to be consistent across all the devices they use.

And finally, an oldie but a goodie: Don't target a single browser. In the old days, we'd see applications built for Internet Explorer only; these days I'm seeing more and more Chrome-only apps. If you're doing this, stop. Making applications work cross-browser is less intensive than ever before - and nobody's going to blame you if you don't include pre-HTML5 browsers in that mix. Enterprise developers may need to target IE7-8; everyone else can relax a little. And IE6 is just a distant memory at this point.

So this is how I cheat.

The above isn't design, really, but I find it helpful to have simple rules to follow that make my applications a little easier to use. Designers are worth their weight in gold, but I hope some of these ideas help you with your projects where hiring one is out of bounds.

I'd also love to hear your ideas. Write your own post, link back to this one, and I'll see the ping. Thanks!

· Posts · Share this post

 

Owning your data is cool - but having your own awesome site is cooler.

There's been a lot of news stories lately about how technology companies like Google, Apple, Microsoft and Yahoo! may or may not be giving your data to the as part of a project called . They deny it, news outlets confirm it and it's hard to tell what's real and what isn't real.

Whatever your political views, or whether you think government entities should be able to snoop on your phone and electronic communications, it's hard to argue that the sheen hasn't come off the consumer Internet industry. As the economist Umair Haque said earlier today:

The large online services have created a world where, despite the breadth of software's possibilities, the scope of our communications are limited. On Facebook, you can post status updates, links, photos and videos; on Google+, you can post status updates, links, photos and videos. What if you want to post a game, or an interactive multimedia presentation, or a live graph connected to real-time data?

Those things are hard for centralized services, because they've got to concentrate on common denominator forms of content - like status updates and photos - but they're much easier when you control your own site. If you could install your own publishing app as easily as an app on your phone, and then add new ways of posting stuff to that site just as easily, suddenly you would be able to make your presence on the web your own. And you could let other people in - you could create online communities that fit your needs, rather than bending your communities around the limits of a Facebook group or a mailing list.

That's what inspired me to start working on idno, and these are some of the ideas that inspired other people in a community of developers called the to build their own sites and platforms. We don't believe in treating people as data points; we believe in user-centered software for individuals. Software that you control.

will be available to install onto your own site later this month; a turnkey hosted version will follow. In the meantime, if you're a developer, you can check out Idno on GitHub, or some of the other IndieWeb projects out there.

Won't you join us?

· Posts · Share this post

 

We need to make better software and fight for our users.

This was a sad day. Unsurprising, but sad.

The web connects people from different contexts, backgrounds and geographies, with different skills and ideas. Learning happens when different contexts collide. I'm not a technological determinist, but I think the web is a tool that we can use to make a more tolerant, peaceful, progressive world. Yeah, yeah, I know. But I do.

I knew the risks from putting everything online, and from the data mining it enabled, but I saw the benefits, too. I knew that Silicon Valley had a lot in common with the progressive movements in the Bay Area in the sixties and seventies, and I felt like people had their hearts and minds in the right place.

There is nothing less empowering than filing yourself, your friends, your family and your neighbors into a surveillance database. If today's reports are true, every time you attach an email address or a profile page to a phone number and save it to the cloud, that's what you're doing. Every time you tag someone in a photograph. You're communicating with your friends and having fun, but you're also potentially crowdsourcing a surveillance state.

The point isn't that the current government might persecute you. I mean, there's a real chance that they might, if you're a minority or the wrong religion or something else that triggers an algorithm to flag you as being more likely to be harmful to national security. But that's not the crux of it.

The point is that we have created the tools so that we can be surveilled and persecuted. By a future government, by private companies with access to the data, by anyone with the right tools. A government didn't create the data-gathering tools behind . We did. We are the computer; we build it every day. All the NSA is doing is taking a peek.

What we do now defines us as a generation and as a society. It's not about whether the NSA is surveilling US citizens on their own soil, although that's certainly a legal point of conflict. It's no more moral to spy on anyone else's citizens on their own soil. No, it's fundamentally about the nature of all this data that we're creating. Who are we creating it for, and why are we creating it? Why does it need to exist at all, in this massively interrogable form?

Everyone talks about big data, but I'm much more interested in how we can keep data small without ruining the connectedness that the web provides. Movements like the IndieWeb and the federated social web are important. So is regaining a sense of community responsibility on the web. We're here to make the world better, after all. We should be fighting for the users from the ground up, not working against them behind their backs.

· Posts · Share this post

 

Questions, tribes and independence

I come from a culture of skepticism, in the best possible way. I was brought up to, and later sought out friends and acquaintances who would also, question and test the things around me. Leaders? Question them. Institutions? Question them. Traditions? Question them. And then, from what you've learned and been able to intuit, form your own belief system over time.

Part of that is understanding that you might be wrong, and being able to change your mind. I think having a willingness to change your mind is a strength, like skyscrapers built to bend in the wind, or trees that twist and adapt to their environments as they grow. Rigid ideas tend to break.

Another part is not believing something because you're told to. I always find it a bit alienating when people don't, for example, like me criticizing the President (or the Prime Minister), as if it's somehow wrong or disrespectful to point out his shortcomings. I tend to disagree: I think that's what democracy requires us to do. My opinions don't put me in a pigeonhole box, and I don't think, really, anyone's do. We're all demographics of one.

I don't like ideological (or theological) tribes. I don't think they're useful for their participants, although I think they're very useful for people who are in positions of power within them. We can agree on things and disagree on other things, and we're all part of a larger tribe. If the Internet has shown us anything, it's that we are all connected, we are all different and we all the same - and all of us contribute to a much larger whole. We should celebrate diversity in ideas, goals, opinions, knowledge and skills, just as much as we should celebrate diversity in our physical traits, personalities, sexualities and backgrounds. Values are ideas; rigid values are fragile ones. They're narrow gene pools. I think we should question ourselves, and each other, often.

· Posts · Share this post

 

My continuing adventures in MongoDB

I've been loving coding with MongoDB since I picked it up; I know there are worries, and I come into it with two eyes open, but so far it's been far more useful for my needs than MySQL.

Part of the reason for this is that applications I work on tend to be very document-centric, and where they're relational, they're relational in a way that lends itself very well to NoSQL (membership lists, etc). It's probably not an exaggeration to say that I'm querying the database 10x less than I would be with an Elgg-style entity-metadata-relationships table.

idno is MongoDB-based, including heavy use of GridFS, whereas the latakoo stack is not (I don't think this is the right place to write about latakoo's tech, but I may do on the official blog at some point). However, if my experiences continue to be great, I'll think about doing some more formal testing with the team. With the likes of IBM throwing their weight behind MongoDB (given their recent acquisition of SoftLayer, could 10gen be a target too?), this might be the right time to begin taking it more seriously.

· Posts · Share this post

 

#indieweb checkins; trying to decide the best approach

Map readersI've been self-publishing my photos and status updates for less than a week, but I already wouldn't do it another way. Idno lets me post easily from my phone or laptop, and the updates show up on the sites I'm connected to. Right now, that means Twitter and Facebook, but sites like Flickr and LinkedIn are coming. (This is all available as open source code, by the way.)

Technical aside: when I post something new, it gets an Activity Streams object type and verb. Status updates are notes, blog posts are articles, and photos are images. Plugins then listen for when new, public content is created with those object types (and, right now, the "post" verb) , and syncs them to third-party sites as appropriate. That way someone else could write a better status update plugin than mine, and nobody would have to rewrite the plugins that synchronize content.

The other silo that I use all the time is Foursquare. Theoretically, taking the user's location isn't hard - did I mention I'd written a book on Javascript Geolocation? - but in reality, this is harder than just grabbing the user's current latitude and longitude and saving it to an Activity Streams place object. Foursquare maintains an extensive database of venues, that's so good that a bunch of third party services use it as well. I don't really want to have to duplicate that.

There are alternatives: OpenStreetMap has a downloadable free software database of locations. The downside is that you need to extract points of interest yourself - and the database, perhaps predictably, is over 28 gigabytes. That's far too much data for most individual sites to be handling themselves. It's certainly not something I'd like to deal with on my personal server.

For me, the perfect use case is this: I click "check in" in idno, the browser grabs my location, I'm presented with a list of nearby points of interest and I select one. The content is saved locally and then synchronized to location-centric services like Foursquare and Facebook Places.

Now, I could use Foursquare's database to populate that list of locations, but somehow that feels unclean. The purpose of me self-hosting is to own my own data, and using that database would make me dependent on Foursquare's service. Also, the flip-side of that also makes me uncomfortable: if my purpose is to put less value into Foursquare's service instead of my own site, I probably shouldn't be using the database they put so much investment into.

I'm not sure anyone else is syndicating their location to sites like Foursquare from their own sites, but if they are, I'd love to hear from them. Until then, I'm considering writing the simplest possible shim: a geolocation plugin that takes my physical location and lets me save a "hint" along with it, that will act as a way to gently nudge the third party synchronization plugins to pick the best venue. The hint wouldn't be publicly displayed, but for example, I could type "amendment" when checking into one of my favorite brewpubs in San Francisco, and that'd be enough for me to be checked into 21st Amendment on Foursquare.

Speaking of which, time to head over the bay and grab a pint ... Sadly, I won't be checking in just yet.

· Posts · Share this post

 

· Posts · Share this post

 

From Ani DiFranco to Knife Party: how the Internet changed the way I listen to music

I'm an Ani DiFranco fan. That's my style of music: literate, powerful polemic set to angular acoustic guitar. I must have seen her play live eleven or twelve times now. Dar Williams, Joan Baez, Bob Dylan, Thea Gilmore, Jess Klein: all my cup of tea. I saw the Proclaimers at the Great American Music Hall just a couple of weeks ago.

Somewhere along the line, I managed to get into really dirty electronic dance music.

Spotify was my gateway drug. I've got a premium subscription, which allows me to run it on my phone, and I usually listen on the walk to and from work. Because I try and do the mile and a half in twenty minutes or less, I'm after high-tempo music; and because I'm the kind of person that gets sick of listening to the same thing over and over (or walking to work the same way), I've been using the radio function to find tangentially related music to my playlists. It's a bit like Genius mode in iTunes, but I'm not limited to music I actually own.

I guess I might have clicked "thumbs up" to the new Tegan and Sara album, which moves them from guitar folk-pop to eighties-inspired electro. (It's brilliant, by the way.) Somewhere in the mix, Skrillex's Bangarang might have turned up. And late at night, listening to music in a particular frame of mind on the way back from a night out at the Independent, I found Knife Party (of all things) and was hooked.

Spotify's model is pretty great: it comes close to how using Napster felt in the late nineties (except you pay, and don't get to keep the music when you stop subscribing). When I hear something I particularly like, I'll buy it on the DRM-free Amazon MP3 Store. I can try out virtually anything, anywhere, and easily discover new bands. It's one of the handful of paid online services I wouldn't want to do without.

But online music in 2013 goes so far beyond that. Soundcloud is a miracle: a place where anyone can upload and share any audio, and do. The tracks I embedded above are fully-sanctioned, fully-commercial audio that the artists have decided to release in a streamable form for free, because they understand that sharing is great marketing. If you discovered that you like either the Ani DiFranco or the Knife Party track above: you're welcome. And if you didn't, it's no skin off anyone's nose.

I remember listening to the Top 40 chart on BBC Radio One in the nineties, on a Sunday afternoon. I have no idea what's in the charts right now, and I can't imagine caring. I've got a great idea what my friends are sharing, what's being shared among my contacts. It doesn't matter what label they're on or who's doing their PR; it's all about the music. This track by my sister shows up in my feed right next to all kinds of famous artists, and it's available for anyone to discover in the same way.

With the freedom to share and discover, there's a new freedom of genre. I might be bemused by my newfound love of EDM, but I'm not surprised I found it. There's a big, wide, cultural commons out there.

· Posts · Share this post

 

A new website running on a new platform

idno.pngI just installed a vanilla configuration of idno onto my new website at werd.io.

idno is a personal attempt at building a publishing platform that adheres to IndieWeb principles: own your own data, publish on your own site, use existing social websites for dissemination but not as an origin. I've also tried to use microformats where possible, allowing every page to contain lightweight semantic information, as well as making it skinnable, extensible, and social.

I also wanted a chance to think about platform design again, separately from my work at latakoo (where I'm CTO) and informed by my previous work on Elgg (which I helped start nine years ago). What would I do if I was building a platform from scratch in 2013? How could I make it more useful?

I'm proud of the results so far, and the decisions I've made. Here are some highlights:

idno is based on Activity Streams, and every page is an API call

If you visit the front page of the site, or click on any user profile, the feed you see is an Activity Stream (albeit rendered to HTML). You can easily toggle a JSON version by setting application/json to be your web client's accepted type. There's automatic RSS, of course, too. And if entities have attachments - for example an uploaded file or a photo - the RSS items have automatic enclosure tags, as you'd expect. (That means idno can host podcasts and deliver other files via RSS.)

The system is designed so that all plugins automatically have an API without having to do any extra work. I'm also planning on implementing HTTP signatures, or something like them, to authenticate seamlessly in addition to standard sessions.

idno uses HTML5 (and Bootstrap, jQuery)

HTML5 needs no introduction or reasoning. Bootstrap is a very handy set of rails for responsive front-end design (with lots of pre-existing themes), and jQuery is an integral part of that. On top of that, idno bakes in some useful features behind the scenes - like autosaving works in progress using your browser's local storage, for example.

idno runs on PHP 5.4 with a MongoDB back-end.

PHP is a controversial decision, but it remains one of the most widely-deployed web scripting languages in the world. Version 5.4 is old enough to be installable on most servers, but new enough to contain some really neat features. Idno makes extensive use of the JsonSerializable interface. (It also uses a lot of 5.3 features like lazy loading and namespaces.) MongoDB, meanwhile, means that we don't have to force plugin writers to maintain schemas, nor to emulate NoSQL in MySQL, which has been a tactic I've used in the past. So far it's performing great, and it also provides GridFS, a useful file store.

All of this a work in progress, which has mostly been coded late at night, and there's still a lot to do. For example, at the time of publishing, the hashtags below aren't linked anywhere and aren't automatically marked up, but I bet if you check back in a few days, they will be. Another is that although my posts are automatically POSSEd out across the web, I can't yet posts things like replies to tweets from the idno interface. Nonetheless, I invite the brave to check out the GitHub repository (idno is released under an Apache 2.0 license), and let me know what you think.

· Posts · Share this post