, and various other things

As many people reading this are probably aware – VoteFlow is on hold indefinitely.

Because I am working on with Ed Dowding – similar enough for me to be happy to work on it, and similar enough for Ed to be impressed by my work on VoteFlow and ask me to become Represents CTO.

Initially, I was working on the “old” version of Represent –, which was written in Node.js and backed by Mongo. I’ve a few good things to say about node – runs fast, fairly clean async code – but for Mongo I have no such positive comments. It lacks real relational data, encourages _massive duplication_ as an awful solution to this issue, and all around feels like a bit of a joke, except in a few very rare niche situations.

That, and a collection of non-trivial security issues led us to re-build the system.

Happy with the idea of Postgres as our main DB, there was quite a bit of consideration as to if we should stick with node. I eventually pushed the good ponts of Django and Django-Rest-Framework (in particular djangos slick ORM and easy/stable migrations, some existing code pastable from VoteFlow) hard enough for us to pick that as the foundation for the next version of represent!

This is a decision I have often look on with contentment, nearly to the point of smugness. Often there has been situation which could have been hard, made easy by the great dev support of python/django – and the exact library needed to help us on our way.

Being the sole backend-dev/sysadmin and managing and working with our frontend team along with several other roles has been tough – but we are a startup, everyone has several tough roles 🙂

Sometimes working in a team can be hard, but we tend to deal with issues that arise in a practical, mature and efficient manner.

On another note, the main reasons I created VoteFlow were to try out:

  1. Liquid Democracy (pick a representative for a specific topic/location/other)
  2. Voteable Tags (voting on tags massively increases their utility)
  3. Democratic driven development (people vote on features/changes they want)

All of which worked very well indeed! but have yet to get to the top of our “ToDo” list. Saying that, the other weekend I quietly implemented most of the backend for Liquid Democracy.

Having said that, we do quite a few thing VF did not, including a slick UI, nice stats, detailed comparisons and geographic areas.

For anyone wondering about our stack, Our frontend is served by nginx in production, and Django mediated by UWSGI – which also looks after prerender and celery.
Here are a few select libs, straight out of our requirements.txt

djangorestframework-filters # provides a secure client-queryable filter/query system
django-mass-edit # to change a large number of items in admin at once
celery # concurrency - one of the things I miss about node (though, future python versions should solve this)
Pillow # image generation
django-cors-headers # makes it easy to make our API accessable to others
django-dbbackup # easy backup/restore
django-debug-toolbar # handy for debugging/performance
django-dual-authentication # login using email
django-push-notifications # push notifications to Android/IOS, looking to send some updates upstream
djoser # an authentication framework
djrill # send emails
mysociety-django-popolo # import political data! I'm working with MySociety on improving this
python-social-auth # makes connecting with FBoogle easier
pytz # practical timezone support for dates

A few interesting django projects for anyone else on a similar path:

  • Disqus
  • Pintrest
  • Instagram
  • Bitbucket

Looking at information from the developers of these systems was a fantastic help in designing represent to work reliably and fast.

Ultimately – I think the global solution to our “Democratic Deficit” should be a decentralised system. Something between Represent, RetroShare, BitTorrent and perhaps BitCoin – and I look forwards to crossing that bridge when we arrive at it.

All in all, it feels like we are actually on a path towards upgrading democracy



Sunlight, nature, Code and Information

Leave a Reply

Your email address will not be published. Required fields are marked *