View Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
View .ninja_log
# ninja log v5
325 507 0 pal/src/CMakeFiles/Chakra.Pal.dir/cruntime/silent_printf.cpp.o 510d96c6ced2561f
326 548 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/file.cpp.o 596ad9e2f9a25a3
508 704 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/filecrt.cpp.o 2c919074645016a6
549 749 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/finite.cpp.o fe8bd1464762b1a9
706 889 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/lstr.cpp.o a4b2cdd661c51dac
749 967 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/malloc.cpp.o c7ef7f3f0d6e02cc
890 1132 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/misctls.cpp.o b1fe18c32cfbaa40
968 1184 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/mbstring.cpp.o bc43e84f72566ac2
1133 1385 0 pal/src/CMakeFiles/Chakra.Pal.Singular.dir/cruntime/misc.cpp.o 72d122ccdc88d755

In JavaScript, all binding declarations are instantiated when control flow enters the scope in which they appear. Legacy var and function declarations allow access to those bindings before the actual declaration, with a "value" of undefined. That legacy behavior is known as "hoisting". let and const binding declarations are also instantiated when control flow enters the scope in which they appear, with access prevented until the actual declaration is reached; this is called the Temporal Dead Zone. The TDZ exists to prevent the sort of bugs that legacy hoisting can create.

View labyrinth.html
Labyrinth generated with JavaScript:<br><br>
for (var line=1; line<60; line++) {
for(var i=1;i<29;i++) {
var s = (Math.floor((Math.random()*2)%2)) ? "" : "";
View run-this-on-tessel.js
"use strict";
const net = require("net");
const monitor = {
connection: null,
queue: [],
write() {
if (monitor.connection === null) {
} else {
monitor.connection.write.apply(monitor.connection, arguments);

Original code:

var func = String.raw
console.log(func); // ['a', 'b', 'c']

Modified to see what's happening:


Installing V8 on a Mac


  • Install Xcode (Avaliable on the Mac App Store)
  • Install Xcode Command Line Tools (Preferences > Downloads)
  • Install depot_tools
    • git clone
    • sudo nano ~/.bash_profile
    • Add export PATH=/path/to/depot_tools:"$PATH" (it's important that depot_tools comes first here)

In the many years that Johnny-Five has been an active project, there have been myriad requests for hardware peripheral and component device support. Implementing support almost always requires the acquisition of the actual peripheral or component device, in order to adequately develop and test the driver code; most commonly, this involves visiting SparkFun, Adafruit, Amazon, or Digi-Key, and then ordering the necessary "thing". Once in hand, the author sets their own schedule for designing, developing and testing an implementation. Johnny-Five contributors and maintainers will communicate all of these "phases", as they occur, by commenting on the original support request. Eventually, either support will land or it won't (in the past, there was no support for UART devices, this is no longer the case). There are rare cases, including one which we will discuss today, where i

View vid-pid
// From device log:
vendor: 0x8087 (32903)
product: 0x0aba (2746)
// From app:
vendorId: 0x8086 (0x8086)
productId: 0xF8A1 (63649)
View results
1479312051787 Device(s) /dev/cu.usbmodem1411
1479312051796 Connected /dev/cu.usbmodem1411
1479312053384 Repl Initialized
>> 0, 1, 1 PASS
1, 1, 1 PASS
2, 1, 1 PASS
3, 1, 1 PASS
4, 1, 1 PASS
5, 1, 1 PASS
6, 1, 1 PASS