49
Applying NASA code guidelines to JavaScript Airspace is closer than you may think Europa`s surface

Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

  • Upload
    ontico

  • View
    112

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Applying NASA code guidelines to JavaScript

Airspace is closer than you may think

Europa`s surface

Page 2: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

[email protected]

@PixelsCommander

Page 3: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)
Page 4: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)
Page 5: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

JavaScript driven operation system, 500 000+ loc

Page 6: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

The universe respects unification

Planets shape, the laws of physics, and star system as a unit are constant everywhere

Large Magellanic Cloud

Page 7: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

“Unification — effective method to decrease diversity. Aim for unification is to place elements in particular order building strict system which is comfortable to use.”

(c) Wikipedia

Rosetta`s detination comet

Page 8: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

It can be hard to distinguish them without being an expert

There are sixtillions of standardized units...

Milky Way, Salamnca, Spain

Page 9: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Unification never stops

The same works for engineering

ISS expedition 42 return

Page 10: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Diversity decreases since only best

solutions survive...Is it a Boeing or Airbus?

Page 11: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Can you distinguish them at all?

I bet you can not because of unification...

Page 12: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

But such a common thing as UI definitionis not standardized yet

We develop softwarefor 60 years

Souyz space ship docks ISS

Page 14: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

All UIs will be unified

All planetsare round

Timelapse taken from ISS

Page 15: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Let`s guess...

Standard?

Voyager golden disks

Page 16: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Unification, reliability, accessability

Why HTML for flight instruments?

Bombardier Q400 electronic dashboard

Page 17: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Highly valuable in the age of drones

Network accessibility

MQ-1 Predator

Page 18: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Decreases development cost standardizing development flow and technologies stack

Unification

Work on NASA's InSight Lander

Page 19: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Browser is a GUI rendering system tested by billions users daily

Reliablility

NASA's Mission Control Center

Page 20: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Possibility to establish competitive UI components (flight instruments) market

Components market

Mir station modules scheme

Page 21: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

And first ever flight using HTML/JS for displaying flight information

First HTML/JS flight instrument

Diamond aircraft DA40

Page 24: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

● Resources consuming efficiency● Memory leaks● GPU accelerated path● Alternative rendering methods (Canvas,

WebGL)

Pitfalls?

Page 25: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Let`s have a look at Jet Propulsion Laboratory

More guidelines?

JPL HQ

Page 26: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)
Page 27: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Performance and stability are priorities

Page 28: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Month without a reset ?

Page 29: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Code guidelines to the rescue...

Page 30: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Challenging?

Voyager:36 years without bugs

Voyager probe CGI

Page 31: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

No function should be longer than what can be printed on a single sheet of paper

Rule #1

Sunrise on Saturnphoto by Cassini probe, JPL

Page 32: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Restrict all code to very simple control flow constructs – do not use goto statements and

direct or indirect recursion

Rule #2

Mars, photo by Opportunity mission, JPL

Page 33: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

● If you want to write reliable code – drop to write tricky one and write predictable

● Define coding standard and follow it● Use code analyzers to reduce chance for

defect: JSHint/JSLint/Google Closure Tools● Keep codebase by monitoring metrics: Plato● Analyze types with Flow/ Closure Tools

Rule #2 lessons

Page 34: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Do not use dynamic memory allocation after initialization

Rule #3

Ceres, photo JPL

Page 35: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

● Manage your variables with respect. Put declaration in the top of scope to increase visibility

● Watch for memory leaks, clean listeners and variables when not needed anymore

● Switch JavaScript to static memory allocation mode via object pooling

Rule #3 lessons

Page 36: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

All loops must have a fixed upper-bound

Rule #4

Sunset at IIS

Page 37: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

The assertion density of the code should average to a minimum of two assertions per

function

Rule #5

Jupiter`s eye

Page 38: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

● Than higher is tests density than less defects you get. Minimal amount of tests is 2 per function

● Watch for anomalies in system state during run time. Generate and handle errors in case of failures

Rule #5 lessons

Page 39: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Data objects must be declared at the smallest possible level of scope

Rule #6

City Lights of the Coast of India and the Maldives

Page 40: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

The return value of non-void functions must be checked by each calling function, and the

validity of parameters must be checked inside each function

Rule #7

Young stars in NGC 7822

Page 41: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

The use of the preprocessor must be limited to the inclusion of header files and simple

macro definitions

Rule #8

On Churyumov–Gerasimenko comet

Page 42: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Nice to know when using transpilers

Performance of ES6 features relative to the ES5

The cost of transpiling ES2015

Falcon9 OG2 launch

Page 43: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

The use of pointers should be restricted. Specifically, no more than one level of

dereferencing is allowed. Function pointers are not permitted

Rule #9

Interstellar dust

Page 44: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

All code must be compiled, from the first day of development, with allcompiler warnings

enabled

Rule #10

MyCn18: An Hourglass Planetary Nebula

Page 45: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

Big step for web platform to be perceived as reliable

Small step for developers but...

Page 46: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

But still, why not HTML/JS for instruments?

Ok, not that far yet...

Eurofighter maneuvering

Page 47: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

But still, why not HTML/JS for instruments?

Ok, not that far yet...

SU-30 take-off

Page 48: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

But still, why not HTML/JS for instruments?

Ok, not that far yet...

EFIS displays

Page 49: Применяем стандарты кодирования NASA к JavaScript / Денис Радин (Liberty Global)

what about ships?

And ...