The following is mostly Trey Roby's research into recent developments into Web technologies.  It is a rough working document to use for reference for future work on Firefly.

DM-1727 - Getting issue details... STATUS

 

The decision process for SUIT to adopt React/Redux framework is summarized in the SPIE paper published in July 2016.

Firefly: Embracing Future Web Technologies



Web Technologies
FrameWorks
Interest scale 1 to 5
Popularity scale 1 to 5
Recommended Frameworks



Utility Libraries, to find most used libraries: http://libscore.com

http://numeraljs.com/
Builders


Package Managers
Browserify & Webpack are both package managers are built on commonJS (from node). We will need to choose one. commonJS is the best way to organize our javascript in modules. It mostly solves the javascript namespace problem. We can maintain a similar packaging style like we do with java.


Node.js & NPM

  • Node Required to use npm, browserify, and any other command line javascript tool
  • must be installed on all our machines and build servers
  • http://nodejs.org
  • project basicly defined commonJS
  • A javascript server
  • Provides a javascript VM outside of the browser
  • Node make javascript into a general purpose scripting language such as perl, python, unix shell, etc
  • We would not use it a server
  • Used for non-browser, command line javascript based tools us node (such as Grunt)
  • NPM - Node Package Manager
    • Installed as part of node
    • npm search
    • npm test - used for testing
    • We can use npm and commonJS to layout the whole module scheme


CSS

  • Sass?
  • LESS?
  • http://css-tricks.com/sass-vs-less/
  • These process and advance CSS syntax with loops and variables.
  • I am concerned about debugging.
  • Popularity of CSS proprocessor: ????
  • Intertest: ???



Comparison of JS Frameworks

http://www.fse.guru/how-to-pick-a-frontend-web-framework

 

JavaScript Graph comparison

 

General Performance articles


Patterns & Best Practices

http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html
http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html
Concepts
Functional vs Declarative
Declarative Renascence
CRUD- create, replace, update, delete
{+}http://lhorie.github.io/mithril/comparison.html+
CommonJS-compatible module system
commonjs - package scheme from node

React w/ backbone Articles


Working Proposal for Firefly migration from GWT

Function

Component

Confidence
1 to 5

UI

React, docs

4

Data Flow

Flux, for application state
Using Ampersand?

2

Models/Collections/Stores

Backbone or Ampersand
(problem: React better w/ immutable data structures
Solution: use force update on change events)

3

Router

Backbone or Ampersand

3

Json Serialization

Backbone or Ampersand

3

Modules or packages

commonjs using Browserify & NPM
npm can provide comple file layout framework
Browserify manual

5

AJAX Http calls

Backbone, Ampersand or Browserify built-in's

2

Number Format

Numeral.js

4

Build

???? Grunt or Gulp ????

1

CSS

????

 

JavaScript Lint

jshint

5

React Widgets

?????

 

XY Plot tool

?????

 

Utilities

many, many utilities that we have written already exist in JS land, use npm to manage

4

Browser Support

IE9+, not long support IE8
The other browsers are fine

4

form input

We need a tool to assist us here using the concepts from Christian Alfoni's blog entry

4

Testing

????,
whatever we choose we could launch with "npm test"

 

Utility LIbrary

Underscore.js

5


Getting started reading list:
This list should help you get the basic concepts for: React, Ampersand/Backbone, Flux, CommonJS/Browserify




Appendix I (random notes, java-to-javascript help, interfacing with GWT notes)
React notes

  • I think this is the most underdocumented part of React right now. The suggested way to communicate between components is to simply set props when communicating from parent to child and to pass callbacks through props when communicating from child to parent.



Java-to-JavaScript translation experience

  • converting str.length() to str.length
  • == to ===
  • != to !==
  • s1.equals(s2) to s1==s2
  • no foreach so, "for(a in list)" becomes "for (int i=0; (i<a.list.length); i++)"
    • Update: js v5 does have a foreach function on arrays
  • us !isNaN() to check to see if a variable is a number
  • no overloaded method in javascript all java overload method need to be combined into one and the the parameters need to be checked to see it they were passed
  • if a method or variable name is not recognized you will not see an error to runtime
  • learn what a closure is
  • learn what prototypal inheritance is


Interfacing GWT java to Javascript



Appendix II (research of non-recommended frameworks or tools, list of non-reasearched frameworks)

Not Recommended Frameworks






Other Package manager Research that we don't need

  • No labels