Change MiRobot website into Challenger website (reuse the MiRobot template)
authorNick Downing <nick@ndcode.org>
Sun, 14 Jun 2020 10:23:21 +0000 (20:23 +1000)
committerNick Downing <nick@ndcode.org>
Sun, 14 Jun 2020 10:23:21 +0000 (20:23 +1000)
_config/globals.json
blockly.html.jst [deleted file]
challenger_disaster.html.jst [new file with mode: 0644]
conclusions.html.jst [new file with mode: 0644]
images/by-sa_3.0_88x31.png [new file with mode: 0644]
index.html.jst
navbar.jst
space_shuttle_origins.html.jst [new file with mode: 0644]
space_shuttle_program.html.jst [new file with mode: 0644]

index 2de83b0..b528a42 100644 (file)
@@ -1,43 +1,19 @@
 {
-  "site_title": "MiRobot",
+  "site_title": "Challenger",
   "navigation": [
     "/index.html",
-    "/assembly_instructions/parts_list.html",
-    "/assembly_instructions/overview.html",
-    "/assembly_instructions/tapping_threads.html",
-    "/assembly_instructions/components_list.html",
-    "/assembly_instructions/base_assembly.html",
-    "/assembly_instructions/a_axis_assembly.html",
-    "/assembly_instructions/b_axis_assembly.html",
-    "/assembly_instructions/c_axis_assembly.html",
-    "/assembly_instructions/d_e_axis_assembly.html",
-    "/assembly_instructions/gripper_assembly.html",
-    "/blockly.html"
+    "/space_shuttle_origins.html",
+    "/space_shuttle_program.html",
+    "/challenger_disaster.html",
+    "/conclusions.html"
   ],
   "page_to_title": {
-    "/index.html": "Home",
-    "/assembly_instructions/parts_list.html": "Parts List",
-    "/assembly_instructions/overview.html": "Overview",
-    "/assembly_instructions/tapping_threads.html": "Tapping Threads",
-    "/assembly_instructions/components_list.html": "Components List",
-    "/assembly_instructions/base_assembly.html": "Base Assembly",
-    "/assembly_instructions/a_axis_assembly.html": "A-Axis Assembly",
-    "/assembly_instructions/b_axis_assembly.html": "B-Axis Assembly",
-    "/assembly_instructions/c_axis_assembly.html": "C-Axis Assembly",
-    "/assembly_instructions/d_e_axis_assembly.html": "D & E-Axis Assembly",
-    "/assembly_instructions/gripper_assembly.html": "Gripper Assembly",
-    "/blockly.html": "Blockly"
+    "/index.html": "Introduction",
+    "/space_shuttle_origins.html": "Space Shuttle Origins",
+    "/space_shuttle_program.html": "Space Shuttle Program",
+    "/challenger_disaster.html": "Challenger Disaster",
+    "/conclusions.html": "Conclusions"
   },
   "page_to_breadcrumbs": {
-    "/assembly_instructions/parts_list.html": "Assembly Instructions > Parts List",
-    "/assembly_instructions/overview.html": "Assembly Instructions > Overview",
-    "/assembly_instructions/tapping_threads.html": "Assembly Instructions > Tapping Threads",
-    "/assembly_instructions/components_list.html": "Assembly Instructions > Components List",
-    "/assembly_instructions/base_assembly.html": "Assembly Instructions > Base Assembly",
-    "/assembly_instructions/a_axis_assembly.html": "Assembly Instructions > A-Axis Assembly",
-    "/assembly_instructions/b_axis_assembly.html": "Assembly Instructions > B-Axis Assembly",
-    "/assembly_instructions/c_axis_assembly.html": "Assembly Instructions > C-Axis Assembly",
-    "/assembly_instructions/d_e_axis_assembly.html": "Assembly Instructions > d & E-Axis Assembly",
-    "/assembly_instructions/gripper_assembly.html": "Assembly Instructions > Gripper Assembly"
   }
 }
diff --git a/blockly.html.jst b/blockly.html.jst
deleted file mode 100644 (file)
index 4f7f5bd..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-return async env => {
-  let navbar = await _require('navbar.jst')
-
-  await navbar(
-    env,
-    // head
-    async _out => {
-      // Blockly stuff
-      script(src="js/blockly_compressed.js") {}
-      script(src="js/javascript_compressed.js") {}
-      script(src="js/blocks_compressed.js") {}
-      script(src="js/msg/js/en.js") {}
-      xml#toolbox(style="display: none") {
-        block(type="move_to") {
-          value(name="A") {
-            shadow(type="math_number") {
-              field#toolboxA(name="NUM") {
-                '0'
-              }
-            }
-          }
-          value(name="B") {
-            shadow(type="math_number") {
-              field#toolboxB(name="NUM") {
-                '0'
-              }
-            }
-          }
-          value(name="C") {
-            shadow(type="math_number") {
-              field#toolboxC(name="NUM") {
-                '0'
-              }
-            }
-          }
-          value(name="D") {
-            shadow(type="math_number") {
-              field#toolboxD(name="NUM") {
-                '0'
-              }
-            }
-          }
-          value(name="E") {
-            shadow(type="math_number") {
-              field#toolboxE(name="NUM") {
-                '0'
-              }
-            }
-          }
-        }
-        block(type="gripper") {
-          value(name="F") {
-            shadow(type="math_number") {
-              field#toolboxF(name="NUM") {
-                '0'
-              }
-            }
-          }
-        }
-        block(type="delay") {
-          value(name="millisecs") {
-            shadow(type="math_number") {
-              field(name="NUM") {
-                '1000'
-              }
-            }
-          }
-        }
-        block(type="math_arithmetic") {
-          value(name="A") {
-            shadow(type="math_number") {
-              field(name="NUM") {
-                '90'
-              }
-            }
-          }
-          value(name="B") {
-            shadow(type="math_number") {
-              field(name="NUM") {
-                '10'
-              }
-            }
-          }
-        }
-        block(type="math_number") {
-          field(name="NUM") {
-            '10'
-          }
-        }
-        block(type="controls_for") {
-          field(name="VAR") {
-            'i'
-          }
-          value(name="FROM") {
-            block(type="math_number") {
-              field(name="NUM") {
-                '1'
-              }
-            }
-          }
-          value(name="TO") {
-            block(type="math_number") {
-              field(name="NUM") {
-                '10'
-              }
-            }
-          }
-          value(name="BY") {
-            block(type="math_number") {
-              field(name="NUM") {
-                '1'
-              }
-            }
-          }
-        }
-        block(type="variables_get") {
-          field(name="VAR") {
-            'i'
-          }
-        }
-        block(type="controls_whileUntil") {}
-        block(type="logic_boolean") {}
-      }
-    },
-    // body
-    async _out => {
-      div#blocklyArea(style="height: 720px;") {}
-      div#blocklyDiv(style="position: absolute;") {}
-    },
-    // scripts
-    async _out => {
-      script {
-        Blockly.defineBlocksWithJsonArray([
-          {
-            "type": "move_to",
-            "message0": "move to A %1 B %2 C %3 D %4 E %5",
-            "args0": [
-               {"type": "input_value", "name": "A", "check": "Number"},
-               {"type": "input_value", "name": "B", "check": "Number"},
-               {"type": "input_value", "name": "C", "check": "Number"},
-               {"type": "input_value", "name": "D", "check": "Number"},
-               {"type": "input_value", "name": "E", "check": "Number"}
-            ],
-            "inputsInline": true,
-            "previousStatement": null,
-            "nextStatement": null,
-            "colour": "%{BKY_LOGIC_HUE}"
-          },
-          {
-            "type": "gripper",
-            "message0": "gripper %1",
-            "args0": [
-               {"type": "input_value", "name": "F", "check": "Number"},
-            ],
-            "inputsInline": true,
-            "previousStatement": null,
-            "nextStatement": null,
-            "colour": "%{BKY_LOGIC_HUE}"
-          },
-          {
-            "type": "delay",
-            "message0": "delay %1",
-            "args0": [
-               {"type": "input_value", "name": "millisecs", "check": "Number"},
-            ],
-            "inputsInline": true,
-            "previousStatement": null,
-            "nextStatement": null,
-            "colour": "%{BKY_LOGIC_HUE}"
-          }
-        ]);
-
-        Blockly.JavaScript['move_to'] = block => {
-          var a = Blockly.JavaScript.valueToCode(block, 'A',
-              Blockly.JavaScript.ORDER_COMMA) || '0';
-          var b = Blockly.JavaScript.valueToCode(block, 'B',
-              Blockly.JavaScript.ORDER_COMMA) || '0';
-          var c = Blockly.JavaScript.valueToCode(block, 'C',
-              Blockly.JavaScript.ORDER_COMMA) || '0';
-          var d = Blockly.JavaScript.valueToCode(block, 'D',
-              Blockly.JavaScript.ORDER_COMMA) || '0';
-          var e = Blockly.JavaScript.valueToCode(block, 'E',
-              Blockly.JavaScript.ORDER_COMMA) || '0';
-          return `if (!await deviceMoveTo(${a}, ${b}, ${c}, ${d}, ${e})) return false;\n`
-        };
-
-        Blockly.JavaScript['gripper'] = block => {
-          var f = Blockly.JavaScript.valueToCode(block, 'F',
-              Blockly.JavaScript.ORDER_COMMA) || '0';
-          return `if (!await deviceGripper(${f})) return false;\n`
-        };
-
-        Blockly.JavaScript['delay'] = block => {
-          var millisecs = Blockly.JavaScript.valueToCode(block, 'millisecs',
-              Blockly.JavaScript.ORDER_COMMA) || '0';
-          return `if (!await deviceDelay(${millisecs})) return false;\n`
-        };
-
-        var blockly_stop = false;
-        Blockly.JavaScript.INFINITE_LOOP_TRAP =
-          'if (!await deviceDelay(0)) return false;\n'
-
-        var toolbox = document.getElementById('toolbox');
-        var blocklyArea = document.getElementById('blocklyArea');
-        var blocklyDiv = document.getElementById('blocklyDiv');
-        var workspace = Blockly.inject(blocklyDiv, {toolbox: toolbox});
-        var onresize = function(e) {
-          // Compute the absolute coordinates and dimensions of blocklyArea.
-          var element = blocklyArea;
-          var x = 0;
-          var y = 0;
-          do {
-            x += element.offsetLeft;
-            y += element.offsetTop;
-            element = element.offsetParent;
-          } while (element);
-          // Position blocklyDiv over blocklyArea.
-          blocklyDiv.style.left = x + 'px';
-          blocklyDiv.style.top = y + 'px';
-          blocklyDiv.style.width = blocklyArea.offsetWidth + 'px';
-          blocklyDiv.style.height = blocklyArea.offsetHeight + 'px';
-          Blockly.svgResize(workspace);
-        };
-        window.addEventListener('resize', onresize, false);
-        onresize();
-
-        document.addEventListener(
-          'DOMContentLoaded',
-          () => {
-            axes[0].toolbox = document.getElementById('toolboxA');
-            axes[1].toolbox = document.getElementById('toolboxB');
-            axes[2].toolbox = document.getElementById('toolboxC');
-            axes[3].toolbox = document.getElementById('toolboxD');
-            axes[4].toolbox = document.getElementById('toolboxE');
-            axes[5].toolbox = document.getElementById('toolboxF');
-
-            // following is a hook defined in mirobot.js:
-            var toolboxTimeout = null;
-            setToolboxTimeout = () => {
-              if (toolboxTimeout !== null)
-                clearTimeout(toolboxTimeout);
-              toolboxTimeout = setTimeout(
-                () => {
-                  toolboxTimeout = null;
-                  for (let i = 0; i < 6; ++i)
-                    axes[i].toolbox.textContent = axes[i].slider.value;
-                  workspace.updateToolbox(toolbox);
-                },
-                100
-              );
-            };
-          }
-        );
-
-        var deviceMoveTo = async (a, b, c, d, e) => {
-          if (blockly_stop) {
-            console.log('stop in deviceMoveTo()');
-            return false;
-          }
-          await move_axes([500, 500, 500, 500, 500], [a, b, c, d, e]);
-          return true;
-        }
-
-        var deviceGripper = async f => {
-          if (blockly_stop) {
-            console.log('stop in deviceGripper()')
-            return false;
-          }
-          await move_axis(5, 500, f);
-          return true;
-        }
-
-        var deviceDelay = async millisecs => {
-          if (blockly_stop) {
-            console.log('stop in deviceDelay()');
-            return false;
-          }
-          await sleep(millisecs);
-          return true;
-        }
-
-        document.getElementById('reset').addEventListener(
-          'click',
-          () => {
-            ;(
-              async () => {
-                if (!device_busy) {
-                  device_busy = true;
-                  await move_axes([500, 500, 500, 500, 500, 500], [0, 0, 0, 0, 0, 0]);
-                  device_busy = false;
-                }
-              }
-            )()
-          }
-        );
-        var blockly_active = false;
-        document.getElementById('run-stop').addEventListener(
-          'click',
-          () => {
-            if (blockly_active) {
-              console.log('stopping blockly');
-              blockly_stop = true;
-            }
-            else if (!device_busy && device !== undefined) {
-              console.log('starting blockly');
-              blockly_stop = false;
-              blockly_active = true;
-              device_busy = true;
-              document.getElementById('run-stop').innerHTML = 'Stop'
-
-              Blockly.JavaScript.addReservedWords('code');
-              var code =
-                `(
-  async () => {
-    if (
-      !await (
-        async () => {
-${Blockly.JavaScript.workspaceToCode(workspace)}          return true;
-        }
-      )()
-    )
-      console.log('aborted')
-    blockly_active = false;
-    device_busy = false;
-    document.getElementById('run-stop').innerHTML = 'Run';
-  }
-)();
-`
-              console.log(code);
-              try {
-                eval(code);
-              } catch (err) {
-                console.log(err.message);
-                device_busy = false;
-                blockly_active = false;
-                document.getElementById('run').innerHTML = 'Run';
-              }
-            }
-          }
-        );
-      }
-    }
-  )
-}
diff --git a/challenger_disaster.html.jst b/challenger_disaster.html.jst
new file mode 100644 (file)
index 0000000..83cdcbb
--- /dev/null
@@ -0,0 +1,19 @@
+return async env => {
+  let navbar = await _require('/navbar.jst')
+
+  await navbar(
+    env,
+    // head
+    async _out => {},
+    // body
+    async _out => {
+      h1 {'Challenger Disaster'}
+
+      p {'The failure of Challenger was caused by one of the SRBs. The O-rings that connected the parts of the boosters had failed to seal. This allowed hot gas produced by the solid fuel to get into the external fuel tank, and ignite it, causing the explosion which destroyed Challenger. The SRBs disattached from the fuel tank and weren’t recovered. The O-ring failure was because of the cold temperatures. Because the temperatures were so cold, the rubber couldn’t expand as intended.'}
+
+      p {'The crew of Challenger most likely died when the crew compartment landed on Earth. We can tell this because 3 of the 4 Personal Egress Air Packs (PEAPs) recovered had been activated, so the crew must have survived the explosion. Though the crew were certainly conscious directly after the explosion, whether the cabin was depressurised or not is unclear. PEAPs would not have helped the crew remain conscious if the cabin was depressurised.'}
+   },
+    // scripts
+    async _out => {}
+  )
+}
diff --git a/conclusions.html.jst b/conclusions.html.jst
new file mode 100644 (file)
index 0000000..9060774
--- /dev/null
@@ -0,0 +1,17 @@
+return async env => {
+  let navbar = await _require('/navbar.jst')
+
+  await navbar(
+    env,
+    // head
+    async _out => {},
+    // body
+    async _out => {
+      h1 {'Conclusions'}
+
+      p {'Though STS-51L may have been a failure, it highlighted many flaws in the Space Shuttle and NASA’s process for analysing the risk of launching. A presidential commission was started to review these things, and in the 32 month gap between the disaster and the next space shuttle launch, many things improved. Overall, the mission may not have achieved its goals, but it raised awareness of the risk of space exploration, and highlighted that a â€˜near enough is good enough’ approach is not acceptable in this field.'}
+    },
+    // scripts
+    async _out => {}
+  )
+}
diff --git a/images/by-sa_3.0_88x31.png b/images/by-sa_3.0_88x31.png
new file mode 100644 (file)
index 0000000..e76aeff
Binary files /dev/null and b/images/by-sa_3.0_88x31.png differ
index b61e13c..152828e 100644 (file)
@@ -7,11 +7,13 @@ return async env => {
     async _out => {},
     // body
     async _out => {
-      h1 {'MiRobot'}
-      img.center-block(src="/images/page1.jpg") {}
-      h3.text-center {'Assembly Manual'}
-      h4.text-center {'V1.0.0'}
-      h5.text-center {'16/03/2020'}
+      h1 {'Introduction'}
+
+      p {'On 28 January 1986, the space shuttle Challenger was launched by the National Aeronautics and Space Administration (NASA) from Kennedy Space Centre. NASA is a United States agency responsible for US space research and exploration as well as aeronautics. This mission was named STS-51L. 73 seconds into the flight, the external fuel tank exploded, causing the shuttle to come apart. The crew compartment free-fell for 2 minutes and 45 seconds, ending its descent in the Atlantic Ocean. It hit the water at over 320 km/h, which is most likely what caused the death of all 7 on board.'}
+
+      p {'Allan Mcdonald was a Morton Thiokol employee who was in charge of the Solid Rocket Boosters, and opposed the launch. Morton Thiokol was the company contracted by NASA to make Solid Rocket Boosters. Another important individual was a teacher aboard the Challenger named Christa Mcauliffe, who would have been the first civilian in space. The Teacher in Space Program was announced by Ronald Reagan 1984. It was meant to honor educators and increase interest in STEM, but resulted in millions of American children watching a manned spacecraft explode live, including Mcauliffe’s own students.'}
+
+      p {'As well as to send a teacher into space, mission STS-51L would have also released a second Tracking and Data Relay Satellite (TDRS-B) and the Spartan Halley Spacecraft, which would be collected 2 days later using the orbiter’s robotic arm, after the spacecraft had observed Halley’s Comet. Additionally, fluid dynamics experiments were planned to be conducted by Gregory B. Jarvis.'}
     },
     // scripts
     async _out => {}
index 30bcfb2..3cda8cb 100644 (file)
@@ -23,69 +23,6 @@ return async (env, head, body, scripts) => {
             }
             _out.push(techedu_horizontal)
           }
-          div.row {
-            div.'col-sm-7'.pad-8 {
-              'MiRobot: '
-              span#connection-status {'Disconnected'}
-            }
-            div.col-sm-5 {
-              button.btn.btn-block.btn-primary#connect-disconnect(type="button") {'Connect'}
-            }
-          }
-          div.row {
-            div.col-sm-7 {
-              input.mirobot-slider#slider-a(type="range" min="-90" max="90" value="0") {}
-            }
-            div.col-sm-5 {
-              'Axis A: '
-              span#value-a {'0'}
-            }
-          }
-          div.row {
-            div.col-sm-7 {
-              input.mirobot-slider#slider-b(type="range" min="-50" max="75" value="0") {}
-            }
-            div.col-sm-5 {
-              'Axis B: '
-              span#value-b {'0'}
-            }
-          }
-          div.row {
-            div.col-sm-7 {
-              input.mirobot-slider#slider-c(type="range" min="0" max="90" value="0") {}
-            }
-            div.col-sm-5 {
-              'Axis C: '
-              span#value-c {'0'}
-            }
-          }
-          div.row {
-            div.col-sm-7 {
-              input.mirobot-slider#slider-d(type="range" min="-45" max="45" value="0") {}
-            }
-            div.col-sm-5 {
-              'Axis D: '
-              span#value-d {'0'}
-            }
-          }
-          div.row {
-            div.col-sm-7 {
-              input.mirobot-slider#slider-e(type="range" min="-45" max="45" value="0") {}
-            }
-            div.col-sm-5 {
-              'Axis E: '
-              span#value-e {'0'}
-            }
-          }
-          div.row {
-            div.col-sm-7 {
-              input.mirobot-slider#slider-f(type="range" min="0" max="60" value="0") {}
-            }
-            div.col-sm-5 {
-              'Axis F: '
-              span#value-f {'0'}
-            }
-          }
         }
 
         //  Collect the nav links, forms, and other content for toggling 
@@ -116,46 +53,39 @@ return async (env, head, body, scripts) => {
         }
       }
 
-      if (env.parsed_url.pathname == '/blockly.html') {
-        div.header-blockly {
-          div.container-fluid {
-            div.row {
-              div.col-sm-8 {
-                h5 {'Blockly'}
-              }
-              div.col-sm-2 {
-                button.btn.btn-block.btn-primary#reset(type="button") {'Reset'}
-              }
-              div.col-sm-2 {
-                button.btn.btn-block.btn-primary#run-stop(type="button") {'Run'}
-              }
-            }
+      div.header {
+        div.container-fluid {
+          h5 {
+            _out.push(globals.page_to_breadcrumbs[env.parsed_url.pathname] || globals.page_to_title[env.parsed_url.pathname] || env.parsed_url.pathname)
           }
         }
-        await body(_out)
       }
-      else {
-        div.header {
-          div.container-fluid {
-            h5 {
-              _out.push(globals.page_to_breadcrumbs[env.parsed_url.pathname] || globals.page_to_title[env.parsed_url.pathname] || env.parsed_url.pathname)
-            }
-          }
-        }
-        div.container-fluid {
-          await body(_out)
-        }
+      div.container-fluid {
+        await body(_out)
       }
       div.footer {
         div.container-fluid {
-          `Copyright © ${new XDate().getUTCFullYear()} Technology Education Pty Ltd.`
+          a(rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/") {
+            img(alt="Creative Commons License" style="border-width:0" src="/images/by-sa_3.0_88x31.png") {}
+          }
+          p {
+            'This website is '
+            a(href="https://git.ndcode.org/public/challenger_site.git") {
+              'open source'
+            }
+            ' and licensed under a '
+            a(rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/") {
+              'Creative Commons Attribution-ShareAlike 3.0 Unported License'
+            }
+            '.'
+          }
+
+          p {`Copyright © ${new XDate().getUTCFullYear()} Oliver Downing.`}
         }
       }
     },
     // scripts
     async _out => {
-      script(src="/js/mirobot.js") {}
-
       scripts(_out)
     }
   )
diff --git a/space_shuttle_origins.html.jst b/space_shuttle_origins.html.jst
new file mode 100644 (file)
index 0000000..d239c7a
--- /dev/null
@@ -0,0 +1,51 @@
+return async env => {
+  let navbar = await _require('/navbar.jst')
+
+  await navbar(
+    env,
+    // head
+    async _out => {},
+    // body
+    async _out => {
+      h1 {'Space Shuttle Origins'}
+
+      p {'After WWII, the Joint Intelligence Objectives Agency was established. It carried out Operation Paperclip, which was a secret US program to relocate German scientists, technicians and engineers to the United States to be employed by the Government. One of these people was rocket scientist Wernher von Braun, who had been developing ballistic missiles for Hitler. His plan for practical, human space exploration was basically: a reusable spacecraft, a manned space station built using the spacecraft, using the space station as a base for missions to the Moon and eventually Mars. This 1950s vision was called the von Braun Paradigm, and was very influential in America’s space program.'}
+
+      p {'This plan was all well and good, but the Apollo missions became the number one priority. NASA fell back on older technologies to get a man to the moon as quickly as possible, however after Apollo 11, this goal was complete. As NASA continued with some Apollo missions, President Nixon ordered a report to be made from the Space Task Group about the future of the American space program, which he received on September 15 1969. The report was highly ambitious and overall recommended NASA follow the von Braun Paradigm. There were three options:'}
+
+      ul {
+        li {
+          'Option 1'
+          ul {
+            li {'NASA’s funding more than doubled by 1980'}
+            li {'Space shuttle'}
+            li {'50-person space station (orbiting Earth)'}
+            li {'Lunar base'}
+            li {'Lunar space station'}
+            li {'Manned mission to Mars in the mid 1980s.'}
+          }
+        }
+        li {
+          'Option 2'
+          ul {
+            li {'Similar funding for NASA which would gradually grow'}
+            li {'Space shuttle'}
+            li {'Space station (orbiting Earth)'}
+            li {'Manned Mars mission by 1986'}
+            li {'Overall smaller unmanned research than Option 1'}
+          }
+        }
+        li {
+        'Option 3'
+          ul {
+            li {'Very similar to Option 2, though no timeline or guarantee of manned Mars mission'}
+          }
+        }
+      }
+
+      p {'In the end, Nixon only gave funding to NASA to develop the space shuttle, officially the Space Transportation System.'}
+    },
+    // scripts
+    async _out => {}
+  )
+}
diff --git a/space_shuttle_program.html.jst b/space_shuttle_program.html.jst
new file mode 100644 (file)
index 0000000..98850ab
--- /dev/null
@@ -0,0 +1,21 @@
+return async env => {
+  let navbar = await _require('/navbar.jst')
+
+  await navbar(
+    env,
+    // head
+    async _out => {},
+    // body
+    async _out => {
+      h1 {'Space Shuttle Program'}
+
+      p {'The Space Shuttle was designed as a reusable spacecraft, which was originally intended to be able to fly 24 times a year, with a cost of only $20 million per flight. Unfortunately, the Space Shuttle never came near to NASA’s targets, and was only partially reusable.'}
+
+      p {'The Space Shuttle consisted of 4 parts; the orbiter, two Solid Rocket Boosters (SRBs) and the external fuel tank. The orbiter contained the crew and anything else needed for the mission. It was the most reusable. The SRBs contained solid fuel and provided most of the power to leave the Earth’s atmosphere. After doing so, they disconnected from the rest of the shuttle and used parachutes to fall back to the Earth’s surface, where they were recovered and refurbished. The external fuel tank held liquid fuel which powered the 3 main engines of the orbiter. Once the fuel was finished, the external fuel tank was disattached from the orbiter and burned up in the Earth’s atmosphere, making it the only one-use part of the spacecraft.'}
+
+      p {'To get back to Earth is a different matter. To slow down from its approximately 27,000 km/h orbiting speed, the orbiter used friction created by the Earth’s atmosphere. First, it used its other engines called Orbital Maneuvering System (OMS) Engines, which were much smaller than the main ones, and had less than 1% of the power. The fuel for the OMS engines is stored onboard. The orbiter orbits backwards, so the first step to get down to Earth was the deorbit burn, slowing it down enough for it to start spiralling downwards. The orbiter is turned the right way up, and the computers onboard calculate the angles that it needs to be on to land on NASA’s 4.5 km run way. The changes in angle are executed by the OMS Engines.'}
+    },
+    // scripts
+    async _out => {}
+  )
+}