Skip to content

Technology choices (and pointers)

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

Application Tech

Implementation Tech

quick overview: we're going to use an Angular-Django-MySQL stack.

please read the initial software design first


application_tech

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 primary 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 use a javascript build tool that will allow us to minify our static resources -- including our Angular application. Furthermore, the frontend server will use gzip to further compress the payload. To be clear, the point of the frontend server is to serve the Single Page Application along with other static resources (CSS, images, etc) to the user.

Aside: point to consider

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. The backend server will perform tasks such as supplying application data or making changes to the database along with other application specific tasks such as authentication, ie, tasks that can not be performed on the client. django resources


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.

authentication

requirement: 1. Registration and login

technology: Django has authentication built in and we'll just roll a simple angular password service for the front end.

reason: It's much more efficient to use pre-built components of a framework than it is to build the component yourself.


importing dbpedia

requirement: 2. Importing information on scientists and research publications (papers and theses) in standard formats (dbpedia, bibtex, pubmed)

technology:

SPARQL dbpedia example

bibtex

pubmed

pubmed example xml


editing data

requirement: 3. Editing/curating information about scientists, relations between scientists (supervised, studied with, collaborated on, …), ideas, …

technology: Angular.js and d3.js will be employed in order to make editing relationships between these types of properties editable, and these changes will be pushed to the server. The technology is difficult to describe because we have to build it first.

reason: There is no pre-built library that offers such specific functionality.


audit trail

requirement: 4. Maintaining an audit trail of edits

technology: 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.


search

requirement: 5. Search

technology: We will use the Django ORM perhaps combined with some hand written SQL to search the database.

reason: Using the ORM we might be able to circumvent writing cumbersome SQL by hand, but we might need a more fine-grained search, so in that case we'll implement our own SQL.


visualizations

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

technology: 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

free ebook

JSFiddle type tutorial

microsoft video tutorials

AngularJS YouTube channel

Angular Material - reusable material design elements

The companion suite(s) to the AngularJS framework

ember data for angular


django_resources

note: many of these resources focus on server-side rendering we're doing client-side rendering, ie, our application is in our browser, so there is no server side view or model (or controller?).

free book from Django creators

online course -- seems somewhat involved

online course


mysql_resources

reference manual

simple refresher course

full text search -- requirment 5?


HTML/CSS resources

crash course on layouts CSS

CSS selectors

flexbox CSS

rendering tips