Skip to content

Technology choices (and pointers)

Steven Myers edited this page Jan 17, 2016 · 38 revisions

Application Tech

Implementation Tech


application_tech

This is an over view of the general technologies chosen for the application.

The application will be a 3-tier web application. A 3-tier application typically exposes a GUI application to the end-user that acts as a client to a server that consists of business and database manipulation logic. This makes up the first and second tier. The third tier is the database.

3-tier-architecture


Tier 1

Our GUI application is a client side browser application. We will be utilizing the Angular JS 1 framework. This choice was made primarily because Angular 1 has a proven history and a large community, because of this large community and the implied widespread use we expect that many solutions to technical problems can be solved simply by searching Google. Angular resources


Tier 2

In order to separate the concerns of the back and front ends we will deploy two different servers (on the same host). These will be denoted as the frontend and the backend server. The role of the frontend server is to serve the Angular application to the user, while the backend handles RESTful requests from the frontend. An implication of this architecture is that if one were to make a change to the frontend code the backend code remains the same. As such, the development process for the application should be simplified.

The frontend server will be a node.js application using the express framework. We will also contain a javascript build tool that will allow us to minify our static resources. Furthermore, the frontend server will use gzip to further minimize the payload.

.v1

Our backend server will be a RESTful Ruby on Rails (RoR) app. Like angular RoR has a proven track record of success with a very large and active community, and so we can again expect to find many online tutorials and various resources. RoR also has a reputation for being relatively easy to pick up and for fast prototyping. With the [latest version] (http://weblog.rubyonrails.org/releases/) there is the addition of a API mode. Using this mode we can limit the scope of the RoR app to performing RESTful services. The API mode is an integration of the rails-api project which has a history reaching back at least 4 years, so the maturity of this feature is present. RoR resources

.v2

Our backend server will be a RESTful Python Django app. Like angular django has a proven track record of success with a very large and active community, and so we can again expect to find many online tutorials and various resources. Django also has a reputation for being relatively easy to pick up and for fast prototyping.


Tier 3

The database layer will be an MySql server. Again the factors that influenced this decision are primarily related to popularity. A high degree of popularity implies sufficient online resources and tutorials. MySql has been noted to be very popular in web applications. MySql resources


implementation_tech

These are choices for technologies required to implement specific requirements of the system.

audit trail

.v1

requirement: 4. Maintaining an audit trail of edits

choice: paper trail description: "Track changes to your models, for auditing or versioning. See how a model looked at any stage in its lifecycle, revert it to any version, or restore it after it has been destroyed."

reason: This project is under active development, has thorough documentation and 3755 stars on GitHub.

.v2

requirement: 4. Maintaining an audit trail of edits

choice: django-reversion description: "django-reversion is an extension to the Django web framework that provides comprehensive version control facilities."

reason: This project has the most stars out of the similar projects in GitHub.


visualizations

requirement: 6. Interactive visualization and exploration (how are A and B related? What ideas contributed to idea X?)

choice: D3.js is a JavaScript library for manipulating documents based on data. D3 helps you bring data to life using HTML, SVG, and CSS. D3 emphasizes web standards and combines powerful visualization components with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers without tying yourself to a proprietary framework.

reason: There are a plethora of examples and a number of books written about this library. Also the GitHub repository has 45k+ stars.


angular_resources

intro video tutorial


ror_resources


mysql_resources