Implementation Details

external libraries, algorithms, data strucutres

Related Commits

Relevant commits & files from other projects

Backends

  • django rest framework - seems like the better REST framework in terms of speed & capability (versus tastypie)
  • django-ajax - easily create an AJAX view, useful if we go with simple HTML + jQuery.
  • django-websocket-redis - websockets for realtime updates using the redis message queue
  • SwampDragon - add websocket support & fallbacks to Django
  • Yesod - Haskell! Probably the easiest haskell framework to use. Lots of magic, auto code generation. Project scaffolding & cli program make it easy to get going & easy to add on. A full yesod stack is definitely HTML-oriented, but REST is pretty easy to do as well.
  • Servant - Haskell! Super easy to abstract out, but need to know Haskell and not be afraid of complex Types. Autogenerates api docs, a haskell client library, & a javascript client library.

Frontends

  • Angular.js - Full-featured, apparently version 2 makes many breaking changes to v1 apps
  • Backbone.js - More of a library then a full front-end?
  • Elm - Once you go statically-typed functional programming, you don't go back...
  • React + Flux
  • Ember.js - Targeted towards long-running, single-page applications. Changes are more developer friendly... Lots of love from the devs.
  • Vue.js - Less opinionated on app structure
  • DIY!

CSS

Bootstrap is the popular option, maybe the AdminLTE theme

There's even an ember starter project that uses AdminLTE called ember-admin-dashboards

The other option is to use Bourbon along with it's friends Neat, Bitters, & Refill. It's nice because all the layout stays in SASS instead of polluting your HTML like Bootstrap...

RSSonate uses ember + bootstrap, the om-ember folder in the om-prototypes repository shows ember + bourbon.

Ember

I built a "ToDo" app with Django REST Framework & Ember.js to test this out:
http://github.com/prikhi/todo-drf-ember

Seems to be built for long-running clients, full application in initial load, rest of navigation is just GET, POST, PUT & DELETE requests to a json rest API.

Uses lots of included tooling to automate builds & reduce boilerplate.

I also made an RSS reader using Ember & Django REST Framework:
http://bugs.sleepanarchy.com/projects/rssonate/repository
https://github.com/prikhi/RSSonate/

Vue.js

Vue seems pretty cool, haven't built anything with it yet, but:

DIY Frontend

There's enough JS libraries out there, we could carve out our own framework &
architecture.

http://microjs.com/

Ideally, we'd use libraries for:

  • Models/Resources/REST API Client * Amygdala * Redux
  • Routing(and mapping routes to resources/models?)
  • Nested/Routed View/Components
  • Forms/Validation
  • Templates
  • Compilation
    • Webpack
    • Browserify

Frontend Validation

Parsley.js is used in the
Accounting app.

Maybe send everything through REST/AJAX & use the backend for all validation?
Ember.js supports that.

Backend Validation

Haskell:
Returns JSON: https://hackage.haskell.org/package/digestive-functors + https://hackage.haskell.org/package/digestive-functors-aeson
In general: https://github.com/agrafix/validate-input
Yesod has HTML forms

Django REST Framework runs validation in the serializer:
http://www.django-rest-framework.org/api-guide/serializers/#validation

In-page Help / User Guide

https://tracelytics.github.io/pageguide/ seems like the nicest one & could be used to provide a tutorial/help information for each individual page.

Application Settings

AcornAccounting uses django-constance but we could use a different settings app, such as livesettings or django-settings.

Or we could simply create a settings Django app, with a "Singleton" admin class for holding easily adjustable(i.e. not hardcoded into settings.py) settings: https://github.com/lazybird/django-solo/ or https://github.com/racingtadpole/django-singleton-admin