Social Network Automation project

Hi everyone!

I want to share with you one open-source project we want to create with the Elixir/Erlang community. We found this idea because we are annoyed by all social-network… We were talking about how our data are shard across many other companies but also all the time we are losing by creating content that are not under our control. We were also talking about how it is difficult to share access to one or more account without sharing password to someone else… Well, after this long talk, we finally decided to create something around it.

At RunAs, we want to solve these problems by creating an open-source software based on Erlang and Elixir. We also want to share this software with the world and create a new way to deal with our own data. After three months of test, studies and research, we finally decided to try a different approach and share all our knowledge with the community.

We are really proud to announce, today, the birth of SNA (Social Network Automation), an open-source software and libraries written in Erlang and Elixir, to manage content on social networks. We want to ease and give back to users what the social network stole us: our freedom.

Why a message on Elixir forum? We think Erlang/Elixir communities are great and full of talented people working for easy to use, safe and maintainable software. Our project is big, and complex, we need smart and open mind working together to solve these problems.

So, what the deal? We are using an apache-2.0 license on all our code, some will probably be also in MIT license, because we think being open is the right thing to do. All our researches will also be available soon.

Lot of people asked us questions, so, I think we should share the answer with everybody, here our FAQ:

Why a new software as Open-Source?

We are using open-source everywhere, in our daily life, we take a lot but we don’t give enough. We want to make a bet, create a company with nothing than open source software, and more, totally open to anyone. We think that, actually, the world need to change to a more open and wise one.

Why Elixir/Erlang?

We think these two languages and underlying technologies (e.g. BEAM) are the most stable and secure way to create high quality software as long living processes.

Why OpenBSD?

OpenBSD is probably the most secure and audited OS in the world. We really care about security and privacy. We trust OpenBSD team because they actually maintain some of the most used open source software like SSH, LibreSSL, OpenSMTPd and many more. OpenBSD is also an incredibly simple system to manage, upgrade and customize. We think this is the best one to make our project secure by default and not worrying about safety.

Why Social Network?

The world is a social network experience, we are all interacting with each other. Today, we are more and more dependent of “virtual social network”, like Twitter, Facebook, Instagram and so on. We don’t have a simple way to communicate with them, or keep our data safe. Furthermore, lot of small businesses are going crazy when it comes to manage social network. We want to offer a simple solution based on all essential features of each social network. We think we can help everyone to manage their own social network habit and protect their data.

What is our project?

Our application is divided in three projects. The first one is a library to control easily many social network. This project is called sna_lib for Social Network Automation Library. It offers facilities to create and manage social network API.

The second project is our main application, called sna, directly linked to sna_lib, will give you a graphical way to manage all your social network account. It will embed a webserver based on Phoenix, token management based on Ueberauth and other common libraries used by the community.

Finally, the last project is based on a small OpenBSD image, and will contain everything needed to boot properly one long-living SNA node with security in mind. It will be designed to run in virtual machine.

Concretely, how things works under the hood?

Our application wants to be a long living process, using all Elixir and Erlang feature to make it running for a long period of time. All connections to remote end-point must stay alive.

We want to create one common and logical data-structure to manage many social network API. This data-structure will be altered like a Phoenix connection data-structure and Plugs. Every pipe will add or remove one or more features.

We know that will be a huge amount of work, so, at first, we want to only support essential social-network features, the one used by mostly everyone using the social network (e.g. sending tweets for twitter).

We want to keep your data safe by storing the data-structure on our side, with data and meta-data. If something goes wrong with your data, you will never lose it.

What are you maintaining?

We will create and manage 2 mains repository. The first one will be a Web UI frontend to manage our social network habits. This one is actually a kind of PoC. The second repository will contain a library with different helpers to create and manage social network API. In the same time, we are maintaining multiple public repositories about our studies, website and documentation…

How many people are actually working on the project?

At this time, we are 3 people working together in part time:

  • Didier works on the communication and business side
  • Mathieu works on the design, architecture and the coding side
  • Shanti works on the coding side

We have also a small growing community around our project and hope you will be listed there!

Is it a (true) business?

At first, the idea was to create a new partially closed solution about managing social network, a classical company. After 3 months of works together, we decided to not follow the classical way. So, yes, it will be a true business, because lot of people will not have time to manage their accounts, so, we will offer them the service based on our trusted stack (Erlang, Elixir, OpenBSD).

How to help us?

You can do lot of thing! This is a new born project, based on the idea that social network is too important to keep it closed somewhere. You can help us in many way:

  • Giving your idea about how things can work
  • Create documentation
  • Test our application
  • Use it daily
  • Make criticism about our code and how it works
  • Update our studies
  • Communicate around you about what we want to do

We want to make a software that make you proud and happy.

Who rules the project?

To be honest, in any project we need people to select ideas and make them in the real world. The focus will always about these 3 things:

  • simplicity: we want something really simple to use, for the user, but also for the programmers.
  • security: we want something secure by default, no bad surprise, only logical thing about our privacy.
  • quality: we want tests and documentation. Our code must be trusted by anyone.

So, the project will be mainly governed and maintained by the community, only the people coming from our team will be able to merge the changes and define priorities in the long term.

What difference with other solutions?

  • Community driven development
  • Fully Open Source (apache-2.0 license)
  • We want to offer a simple solution to many people not only for marketing team

How to contact us?

You can contact us on

3 Likes

I wonder, is the plan to integrate the official APIs or use some other ways to interact with the platforms? For example, the Twitter API is so restricted, it doesn’t even make sense to use it for any form of automation.

1 Like

I’m very interested in how the data will be stored, where and in what form. Have you guys documented what storage engine – already built or your own – will you use?

Hi Phillipp,

Actually, it is one of our issue. Twitter API is not the worse when you look at the Linkedin API, it is a nightmare. we had also the idea to bypass the API and use different method, but, for lot of different social network, it makes things worse. Do you have another idea on your side?

So, its why the main project, at first, is to create something really simple using only essential features like tweeting only textual message. We want to create something simple, and we want to take our time to make something that people would be really happy to use even if our application doesn’t have many features. :wink:

Actually, the engine will look like that:

   ______      ___________     _________     ____________      ________
  /      \    |           |   |         |   |            |    (        )
 ( struct )==>| Pipelines |==>| clients |==>| connection |==>( endpoint )
  \______/    |___________|   |_________|   |____________|    (________)
              /           \
             /             \
        _________        __________
       |         |      |          |
       | content |      | specific |
       |_________|      |__________|
      /           \     /          \
    ______     ______     _________
   |      |   |      |   |         |
   | data |==>| meta |==>| actions |==>
   |______|   |______|   |_________|

Where struct is a map() or struct() like the Plug in Pheonix where each pipeline will do only one thing to alter the content of the structure. data and meta are common information found on different social network (e.g. text content, media like image or video, timestamp). specific is more about specific actions or tasks for one or multiple social-network (e.g. size limit for tweets and how to deal with that). Finally, the client part will extend the information about the structure with all information about the end-point (e.g. POST request on api.twitter.com/v2/status). The last part will take the structure and push it on the remote server waiting for an approval. This is clearly a work in progress, and, it is a bit why I am here: talking about this structure. Actually, this struct looks like that:

%{
  data: %SnaLib.Data{},
  meta: %SnaLib.Meta{},
  specific: %SnaLib.Specific{},
  connection: %SnaLib.Connection{}
}

Another important thing I want to manage is the feedback. Actually, this structure was designed to be only used in one way (client to server), but each request will receive one answer, with, probably, one request identifier (e.g. tweet id for twitter) and a context). The other part will manage these information, but I did not even write a line of code about that.

To be honest, we decided to start our project from scratch before the open source release, I written to many (useless) line of code without any validation of anyone. The idea is also to make the community aware of the design and the change. I hope this will create something stable and usable by anybody.

1 Like