Skip to main content
 

@vassko There were some. I was working on Elgg, pitching investment banks at the time. But agree, far fewer.

· Statuses · Share this post

 

Outmap: a collaborative geodata platform I couldn't release.

When I left Elgg in 2009, I immediately started working on Outmap, a social geodata platform that you could use with any web browser. It never saw the light of day.

Outmap allowed you to collaboratively create map layers, either privately in a group, or in public. Here's two use cases that illustrate what you could do with it:

  • Crowdsoucing useful free wifi hotspots Back in 2009, finding free wifi that worked well was a mission. Suddenly, you weren't alone: you could set up an Outmap space, and tell it to watch a hashtag, for example . Users could then tweet with an address with that hashtag, or add geo-information to the tweet itself. Outmap would also watch Flickr for that tag, and check for location information either in the Flickr metadata, or in the EXIF data in the photo itself. The data then could be mapped, or simply displayed in a list based on your current location.
  • Gathering (or crowdsourcing) scientific data Users could add fields with types. For example, if you were doing wildlife counts, you could take your GPS-equipped smartphone into the field, and as long as it had a web browser that supported the Javascript Geolocation API, that would be all you'd need to record a result. Your Outmap space would tie your numeric recordings of wildlife data to the location where you recorded them. And because it was all social, and tied to individual user accounts, you could examine (or even remove) recordings made by particular individuals for full accountability.

It was based on data tied to individual location points, but further developments would have allowed you to group points into areas, in order to better support some scientific applications. And again, it was all web-based used existing web standards, all social, and (like Elgg) had per-item access permissions.

Outmap couldn't be released for reasons I won't go into here, and were unrelated to the mechanisms of the platform (but were related to the fallout from my decision to leave Elgg). Let it suffice to say, it was out of my hands. I abandoned work on it in 2010, and moved on to work on latakoo.

Geolocation has evolved since 2009, and I think we all now understand that the web is something that we can access from anywhere, and that pages can know about your geographic context. Some other use cases were covered by Google Maps and (particularly) Findery, which is building up a world of memories, found objects and resources on a shared map. Geoloqi, whose founders I really like and respect, supercharges the kinds of use cases Outmap supported (as well as many others). Meanwhile, there are (and were) professional GIS platforms that are extremely powerful and used for many scientific and industrial applications.

I still think there's a place for this kind of functionality in an enterprise social platform. Luckily, I'm now in a position to work on that. Watch this space.

· Posts · Share this post

 

Officially sick of picking out a black T-shirt from my drawer to discover that it has an Elgg logo on it, but can't bring myself to get rid of them.

· Statuses · Share this post

 

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

 

<a href="http://twitter.com/erinjo">@erinjo</a> Though I've never been a customer, I know these guys through Elgg and trust them (note developers claim): https://www.arvixe.com/linux_web_hosting

· Statuses · Share this post

 

<a href="https://twitter.com/DeadSuperHero/status/343219048567431168">@DeadSuperHero</a> it's good advice (I used to work on <a href="http://elgg.org">@elgg</a> so come with open eyes). <a href="http://pump.io">pump.io</a> is pretty neat, too.

· Statuses · Share this post

 

Hey, cool. My old <a href="http://elgg.org/">@elgg</a> cofounder <a href="http://twitter.com/davetosh">@davetosh</a> is working on an open source data locker for education: http://learninglocker.net/

· Statuses · 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

 

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

Email me: ben@werd.io

Signal me: benwerd.01

Werd I/O © Ben Werdmuller. The text (without images) of this site is licensed under CC BY-NC-SA 4.0.