Leg 2: Exploring Our Options

For the second leg of our project we started exploring the tools we will need to build our web application. We looked at the positive and negative aspects of several widely used web frameworks, front-end frameworks, databases, and hosting services. Over the next week we will use the research we conducted on these services to decide exactly how we will build our application.

Web Frameworks

Node.js

  • Pros
    • Team members all have prior knowledge from Comp 20
    • Team members all know JavaScript
    • Relatively easy setup for either NoSQL or SQL databases
  • Cons
    • Often will result in using a ton of nested callback functions
    • Does not support multithreading. This could prove problematic if users want computationally intensive data analysis functionality in the platform (source)

Ruby on Rails (source)

  • Pros
    • Large, active community that contributes high-quality libraries
    • Many resources to help with security (source)
      • Security gems include: devise (popular authentication and authorization tool), brakeman (statics analysis tool that searches through source code for vulnerabilities), secure_headers (implements security related HTTP headers into your application’s HTTP responses), and rack-attack (blocks & throttles abusive requests)
  • Cons
    • Boot and runtime speeds are slow. This could impede development especially since we are all still new to Ruby/Rails.
    • Documentation for less popular gems can be hard to find. Our inexperience with Ruby/Rails could make this a significant bottleneck in developing our web app

Django

  • Pros
    • Full-stack framework, allowing for both database and front-end control (full-fledged MVC support)
    • All team members have Python experience
    • Django has a powerful templating language which allows for quick editing of webpage content, as well as population of site data with stored data
  • Cons
    • Lots of overhead in setting up, particularly in creating a virtual environment (venv) for development.
    • According to Michael Morisi, has a decently steep learning curve, which would potentially inhibit productivity

 

Databases

MongoDB

  • Pros
    • Team members all have prior knowledge of MongoDB usage from Comp 20.
    • Flexible data entry
    • Generally has good performance
  • Cons
    • Certain operations like selective counting are slower than those found in SQL databases. This would present an issue when, for example, searching for all gym machines of a given status (e.g. all broken machines).

Postgres

  • Pros
    • Allows for a more manageable data structure through the storing of related data in separate tables
    • Supports table JOINs, useful when combining room data and the data for machines in said room
  • Cons (source)
    • Less popular than MySQL so less community support and accessible resources
    • Lack of replication may be an issue

 

Front-End Frameworks

Angular

  • Pros (source)
    • Caching reduces computational load on server CPUs
    • Implements model-view-controller architecture, simplifying application management
    • Fast learning curve
  • Cons
    • Joe Campbell, who has used both Angular and React in the past, strongly recommends that we use React
    • Difficulty debugging scopes could hinder the development process

React

  • Pros
    • According to Joe Campbell, has a very manageable learning curve while still being very powerful
    • Can be used alongside libraries like JQuery
    • Easy to debug and write test cases
    • Automatically manages UI updates when the underlying data is updated
  • Cons
    • Integrating React with another MVC framework like Rails requires some level of tweaking and configuring
    • Not as easy to write components in React as it is using HTML and JavaScript

 

Hosting Infrastructure

Heroku

  • Pros
    • Team members all have prior knowledge from Comp 20.
    • It is very simple to get a Heroku-hosted app up and running, particularly for smaller-scale projects like ours
  • Cons
    • Can be expensive to use. Though our web app is unlikely to generate high costs it is important to consider that a large user base could potentially adopt our platform. In the case of widespread adoption we would likely need to switch to another hosting service (e.g., AWS)

Amazon Web Services

  • Pros
    • Lots of options, including virtual machine deployment, the ability to explicitly host a web app versus a static website, and easy domain registration.
    • Lots of tutorials hosted on their webpage
  • Cons
    • May be overly complex for our needs

Google App Engine (source)

  • Pros
    • Scaling is automatic
    • Integrating other Google services (e.g., Google Analytics and cloud storage) is easy
    • Easily deploy new versions
  • Cons
    • Costs may escalate as server usage goes up
    • Transferring to another server architecture may be difficult
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s