-
Notifications
You must be signed in to change notification settings - Fork 1
Technology choices (and pointers)
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.
Note: the pc-towers in the diagram do not denote different machines, but only different programs, ie, the backend, frontend and database servers can all be on the same physical device or cloud instance.
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
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.
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.django resources
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
These are choices for technologies required to implement specific requirements of the system.
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.
requirement: 2. Importing information on scientists and research publications (papers and theses) in standard formats (dbpedia, bibtex, pubmed)
technology:
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.
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.
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.
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.
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