Max Ogden | Open Web programmer
April 2019
Voxel.js Next
Check out the Voxel.js reboot
May 2016
Getting Started With Node For Distributed Systems
Where to get started with streams and peer to peer
July 2015
What's the deal with iot.js and JerryScript
Node.js will soon be running on tiny low power chips
July 2015
Electron Fundamentals
A quick intro to Electron, a desktop application runtime
May 2015
HD Live Streaming Cats to YouTube with the Raspberry Pi Camera
A how to guide
May 2015
Interdisciplinary Open Source Community Conferences
A list of community organized events
April 2015
Setting up HTTPS with a wildcard certificate and Nginx
How I set up HTTPS with Nginx
April 2015
A Month of Modules
Modules Mafintosh and I wrote this month
February 2015
Tessel Powered Plant Watering System
Make an HTTP accessible water pump
January 2015
Portland Fiber Internet
Review of 1Gb fiber from CenturyLink
January 2015
node-repl
An interactive console for node
January 2015
Nested Dependencies
Insight into why node_modules works the way it does
July 2013
Node Packaged Modules
Bringing NPM modules to the web
March 2013
Kindleberry Wireless
A Portable Outdoor Hackstation
January 2013
Bringing Minecraft-style games to the Open Web
A status report from the one month old voxel.js project
November 2012
A Proposal For Streaming XHR
XHR2 isn't stream friendly. Lets explore why and propose a solution!
October 2012
Scraping With Node
Useful modules and a tutorial on how to parse HTML with node.js
October 2012
Building WebView Applications
Things I learned while building @gather
May 2012
Fast WebView Applications
How to make web apps feel fast and responsive
April 2012
Node Streams: How do they work?
Description of and notes on the node.js Stream API
December 2011
Gut: Hosted Open Data Filet Knives
HTTP Unix pipes for Open Data
July 2011
Little Coders
Elementary school programming

Where to get started with streams and peer to peer, May 2016

The great thing about node (and it's streams) is that its easy to plug different modules together into powerful pipelines.

For example in Dat we use rabin to chunk a file stream and then pipe into a merkle tree generator (merkle-tree-stream):

var merkle = require('merkle-tree-stream')
var rabin = require('rabin')
var fs = require('fs')

fs.createReadStream('big.file')
  .pipe(rabin())
  .pipe(merkle())
  .on('data', function (data) {
    console.log('tree node', data)
  })

It's basically unix pipes all over again. To work with streams in various ways, try out the mississippi module. For node and streams skill building, NodeSchool is great for an intro to most of the skills you will need.

After getting through NodeSchool, this P2P workshop by mafintosh is a good challenge. It's doable once you have a basic knowledge of Node.

In the workshop you build a peer to peer chat system piece by piece using network streams, DNS, LevelDB and append-only log based message replication. It's best to try with friends, so you can chat with each other as you go through the lessons.

For some authors who write distributed systems modules, start with these (not an exhaustive list by any means):