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

Modules mafintosh and I wrote this month

I work on a distributed team with two other developers. The three of us are in three different cities. This month mafintosh came out and stayed in my guest room for the month. I wanted to take the time to document what we wrote during his trip to give a little insight into what is it like to work in an "open source first" way.

Most of these were written for use cases involving our day job, dat. Some, such as the Playback video player, were written for fun.

airpaste

Run airpaste on two computers that are on the same network and airpaste opens a two way binary pipe. Uses mdns (aka Bonjour) to connect peers.

axis-camera

A module to control a webcam in my backyard from node. The webcam points at some catnip in my yard and motion detects cats.

ble-stream

Implements a duplex stream interface on top of Bluetooth Low Energy

ble-swarm

Implements a swarm API (mesh networking) using ble-stream

blecat

Works like airpaste except uses bluetooth

electron-packager

Creates a mac .app from your Electron source code

electron-prebuilt

Lets you do npm install electron-prebuilt -g to get electron in your PATH.

electron-spawn

Run electron-spawn foo.js to run foo.js inside a headless Electron window

idlecast

Play videos on your chromecast when nothing else is playing. I use it to play the captured cat videos from the catnip cam.

mon-prebuilt

Lets you npm install mon-prebuilt -g to get the mon C process monitor in your PATH

multicast-dns-service-types

A low level module for parsing MDNS data. Factored out, like many of these, because Unix philosophy!

multileveldown

Lets us access a single LevelDB from multiple processes in a failsafe way

pbs

Protocol Buffer Streaming. A standard way to serialize protobuf data. We use protobufs for almost all data interchange now. We are getting friends to implement pbs in Golang and C++.

pick-random-stream

Tiny utility stream that lets you pick a random item from a stream.

playback

Desktop video player written in JS that supports torrent streaming, chromecast and youtube.

playback-chrome

Chrome extension to that adds a 'open in Playback' button to YouTube videos.

random-iterate

Tiny array module that can iterate an array in random order

require-times

Tells you how long require() calls take in your program

signalhub

A stateless pub/sub server with 'channels' that we use to introduce peers in p2p apps like Friends.

sorted-diff-stream

Used by dat to compute diffs between two branches, used when merging forked data

sorted-union-stream

Join two sorted streams based on a key

stream-iterate

A simple stream module to go through items in stream one at a time. We factored this out of our sorted-*-stream modules above.

subcommand

CLI routing tool that we use in dat to route subcommands like dat cat or dat add.

taco

We rewrote our deploy tools, and produced a series of small modules that can compose together into deploy pipelines. We're calling the system taco

taco-build

Runs a command inside a taco tarball (e.g. npm install --production)

taco-git-push-deploy

Lets you git push deploy with taco

taco-mon

Deploys apps using the mon C process monitor

taco-nginx

Auto configures Nginx to route traffic to your process

taco-pack

Creates a tarball from your app source code

tape-spawn

Testing module to make testing spawned processes easier

transport-stream

Abstract module to support different transports (used in dat), e.g. tcp://, ssh://, https://

utp-native

An experimental C implementation of the utp (micro-tp) protocol from Bittorrent.

webcat

Like airpaste or blecat but over webrtc. Uses github usernames for auth/discovery. Opens a duplex stream to someone over webrtc.

webrtc-swarm

A connection swarm API for webrtc. Manages a pool of webrtc connections. Used in Friends.