Friday 22 May 2015

O2M - Progress

Hi guys and gals, I've got an update for my latest project, O2M.

If you're not familiar, take a look at my previous post to get yourself up to speed. In short, it's a social network where every user has their own server which communicates with their friends' servers on their behalf. This way, your data stays on your computer until your friends ask for it. Of course, once they've received it, they can do what they like with it. So the caveat is that you should trust your friends (or only befriend those whom you trust!)

The latest release is version 0.2.0, which added the bare bones necessary for adding someone as a friend and notifications. These features really need improving but it works so long as you know the IP address of your friend's server.  Click here for new o2m releases.

I've been working this week to make it easier for developers to install O2M and this means I'm getting closer to generating an ".msi" for Windows computers and a ".app" for Macs. These are not yet possible, but they soon will be.

Usage Instructions 

If you're aware of how to install python packages, then take a look at the releases at the link above and run "python setup.py install". Then follow that with "python o2m/run_o2m.py". Finally open a browser and go to the link displayed in your terminal window with the added default port number 8000 appended to the end with a colon. An example would be "http://192.168.0.2:8000/o2m/timeline".

From there you will be asked to sign in. The default credentials are "user" and "password". For now, after login you are prompted to change just the username. Pick any name (preferably yours) and hit return. Finally, log in again and make your first post.

Upcoming Features

So I've been working late into the night to achieve caching on the content that gets sent between people's servers. This is incredibly important because with O2M's architecture, there is inherently a lot of networking. This is the price paid for a distributed social network. However, by using caching, we can reduce the number of requests for content to one request per edit per content. So the bare minimum of requests are done in order to acquire the most up-to-date pieces of content.

What's more is that I've implemented images such that they too can be downloaded from a friend's server. For now, they still cannot be uploaded to you're own server (but of course normally you would just put the image in a special folder). Once this is complete, users will be able to select their profile picture, but for now, I have programmed in a default "use the first content created on the server". So "Content no. 1" is used as my profile picture, and this is the result:

Sunday 29 March 2015

O2M - The Distributed Social Network

For a brief introduction of this project that I'm working on, please see the README file on my Github page (https://github.com/lukebarnard1/o2m).

This year, I decided to make something that I've been thinking about for a while: a social network that really is a network of friends, each with their own computers capable of serving information out to the world. The concept is quite simple, your data stays on your computer and is sent to your friends on demand.

Instead of being 'friends' with someone, you must actually register your friendship with them. At the moment, there isn't a friend-adding mechanism (https://github.com/lukebarnard1/o2m/issues/2) but you could imagine that I would send my digital contact details to someone I'd like to be friends with. Once they have those details, they may decide to send me back there details, at which point I could allow them access to my posts.

Once friends with someone, you can write content as always in a web browser connected to your own web server. Half of your own web server serves a website for editing content, adding friends and changing your details. The other half is responsible for exposing your content in a JSON format for you AND your friends. This allows your friends to leave links to their content on your server. So long as you're the original poster, the links will stay on your machine.

The beauty of this kind of architecture means that you don't have to be at your server to make changes to it. You have your own user credentials on your server - just like all of your friends. The difference is that you have more permissions. The main power that the owner possesses is the power to add content to the server. So in short, you could login from anywhere in the world, just as today's social networks. But your data is still on your computer, ready to be sent out to anyone you authorise.

Connections will be secured, as always, using HTTPS. And there will be no centralised server working hard to connect everyone together, but instead the computers of the network itself will be doing the hard work.

The code is available from my Github page but it's currently in it's infancy, and I need help. Feel free to contribute if you can by making pull requests to close the many issues that are present. Many of which are actually basic features. There is no documentation for the code at the moment however, but I will make this within the next month or so. I will also take some time to refactor and clean things up, making it even easier for collaborators to help out.

Cheers,
-Luke