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 on two computers that are on the same network and airpaste opens a two way binary pipe. Uses mdns (aka Bonjour) to connect peers.
A module to control a webcam in my backyard from node. The webcam points at some catnip in my yard and motion detects cats.
Implements a duplex stream interface on top of Bluetooth Low Energy
Implements a swarm API (mesh networking) using ble-stream
airpaste except uses bluetooth
Creates a mac
.app from your Electron source code
Lets you do
npm install electron-prebuilt -g to get
electron in your PATH.
electron-spawn foo.js to run
foo.js inside a headless Electron window
Play videos on your chromecast when nothing else is playing. I use it to play the captured cat videos from the catnip cam.
npm install mon-prebuilt -g to get the
mon C process monitor in your PATH
A low level module for parsing MDNS data. Factored out, like many of these, because Unix philosophy!
Lets us access a single LevelDB from multiple processes in a failsafe way
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++.
Tiny utility stream that lets you pick a random item from a stream.
Desktop video player written in JS that supports torrent streaming, chromecast and youtube.
Chrome extension to that adds a 'open in Playback' button to YouTube videos.
Tiny array module that can iterate an array in random order
Tells you how long
require() calls take in your program
A stateless pub/sub server with 'channels' that we use to introduce peers in p2p apps like Friends.
Used by dat to compute diffs between two branches, used when merging forked data
Join two sorted streams based on a key
A simple stream module to go through items in stream one at a time. We factored this out of our
sorted-*-stream modules above.
CLI routing tool that we use in dat to route subcommands like
dat cat or
We rewrote our deploy tools, and produced a series of small modules that can compose together into deploy pipelines. We're calling the system
Runs a command inside a taco tarball (e.g.
npm install --production)
git push deploy with taco
Deploys apps using the
mon C process monitor
Auto configures Nginx to route traffic to your process
Creates a tarball from your app source code
Testing module to make testing spawned processes easier
Abstract module to support different transports (used in dat), e.g.
An experimental C implementation of the utp (micro-tp) protocol from Bittorrent.
Like airpaste or blecat but over webrtc. Uses github usernames for auth/discovery. Opens a duplex stream to someone over webrtc.
A connection swarm API for webrtc. Manages a pool of webrtc connections. Used in Friends.