BLOG

Comparison of social network engines/platforms/frameworks

While developing a fairly complicated application such as a social network, starting with an existing platform or a framework can prove quite useful. Frameworks handle a lot of low-level stuff so that we can concentrate on the real deal that the application has to offer. So before starting to develop such applications, choice of the platform or a web framework quite clearly becomes an important decision.

This post is about an evaluation that we carried out at kodeplay for deciding the best-fit opensource platform for a social network application we were looking to kickstart. Although we had past experience of working with quite a few frameworks in php and java, it was important to make sure that we knew what others are capable of too and that we are not missing something good offered by them. Language was not a problem as long as it was not radically different from what we are good at for eg. python, ruby were fine but erlang or clojure were out of question. To some extent we were also looking to take advantage of existing social network solutions or as they are called social network engines.

So after considering some platforms, it finally narrowed down to these four -
1. Elgg
2. Oxwall
3. Pinax (based on django)
4. Diaspora (based on Ruby on Rails)

But before that, A Disclaimer!
These frameworks/platforms were evaluated keeping the task at hand in mind. The reasons we based the final decision on are subjective. So this blog post will not answer questions such as “Which language or framework should I learn ?”. It will definitely not answer the question “Which is the best framework or language?” because we believe there is no answer to this question! It compares frameworks and out-of-the-box solutions together and we are aware that we are, and infact, want to actually compare apples to oranges.

The evaluation was based upon the following factors broadly

Required Features already included or externally available
A social networking app can grow into a monster one with lot of different functionalities. So the basic thing we were looking at was, how much of what we require is already present in the system, even if its not exactly what we need.

General Approach of code
Ready made things are of no use if they are pain to customize to specific needs. There are other things that matter too such as readability (the ease of understanding the code by reading), ease of customizing the existing features and modifying the existing theme, modularity of features, well tested code (unit and functional). We were also concerned about how different aspects of web programming are implemented such as MVC pattern, Database design and Db layer used, templating, forms etc.

Familiarity of language/framework and nature of the learning curve if there.
Our competence at the moment is mainly LAMP and JAVA. Its important to keep the learning curve in check too.

Ease of deployment
Again, coming from a PHP background, where deploying code is so easy, we needed to consider this as well.

Presence of an active community and source code availability (bonus points for source code hosted on Github :) )

Comparison

Approach/Feature Elgg Oxwall Django+Pinax Rails/Diaspora
Language PHP PHP Python Ruby
Framework own own Django Rails
MVC not exactly yes MTV of django MVC
Custom Routing/pretty-urls no (convention-tied) yes yes yes
Database Arch. entity+metadata tables normal normal normal
Database Layer magic! DAO + Service + Entity ORM ActiveRecord
Templating horrible Smarty Django TS dspra: haml,sass
i18n yes yes yes i18n gem avlbl
Modular apps yes yes yes no
Plugin system yes yes no (apps instead) no
Source Code Hosting github private bitbucket github github
Community active active on forums active active
Development open closed open open
Ease of Depolyment (sub) easy easy unfamiliar unfamiliar
**Features Required** in diaspora
Events yes yes available no
Blogs yes yes yes no
Polls may be available no no no
Question/Answer available no available no
News Feeds/Wall yes (activity) yes available yes
Notification System available ? django-notification yes
Bookmarks available ? yes no
Forums available ? available no

The Result!
The above table pretty much captures the differences between these platforms and our views about them.
Long story short, the winner in the end was django/pinax.

To summarize briefly as to how the selection was done -

Elgg that initially seemed like the perfect fit was ruled out because much of the approach it follows is not what we subscribe to (mainly db design and html building using string concatenation) plus it looks like some learning curve to make it work and look the way we want.

Oxwall looked quite nice but it would mean learning a custom framework that is very unlikely to be used anywhere else in future. Moreover, Oxwall’s development is not quite open but happens over a private bitbucket account for certain reasons.

There is a lot of buzz around Diaspora and it looks good too but lost due of following reasons -
1. code still in alpha and a lot of reviews about bugs and security concerns with the initial release (which may or may not be true as of today)
2. few problems such as, no support for IE and https mandatory as the devs themselves admit.
3. familiarity of python/django > familiarity of ruby/RoR.
4. A quick search couldn’t find a way for developing modular applications in Rails (as in Django)
5. Diaspora uses a lot of stuff unknown to us which might result in the learning curve of these tools getting on top of the rails learning curve.
eg. haml, sass, thin, resque and what not. Sometimes seems to be an overkill as well.

Frankly, it was not entirely an unbiased decision between diaspora and pinax. Ruby on Rails wins in some aspects such as, built in support for testing. But surely, Django is a great framework and comes with great stuff such as the extensible admin app. There are python alternatives to the good things that Ruby offers such as Lettuce(Cucumber) and Fabric(Capistrano)
We could find a lot of “apps” both inside and outside pinax for the modules that we are planning to include for now (see table).

So Django has been decided. Lets see how the development goes :) . In the meanwhile let us know about your thoughts on the same.


Leave a Reply

     

     

     



Technology

Contact Us