# Awesome Mad Science

Delightful npm packages that make you say “wow, didn’t know that was possible!” PRs welcome!

## peer-to-peer

- peerwiki - all of wikipedia on bittorrent
- simple-peer - send video/voice/data p2p in the browser (with webrtc)
- torrent-docker - realtime boot of remote docker images over bittorrent
- torrent-mount - mount a torrent as a filesystem
- webtorrent - streaming torrent client for node & the browser

## browserify

- brfs - turn `fs.readFileSync()` calls into inlined static assets
- browser field spec - replace certain files/modules when a module is bundled for the browser
- browserify - use `require()` in the browser
- glslify - npm modules compiled into WebGL shaders
- webworkify - composable web workers for browserify

## files

- file-type - detect file content types by checking their magic numbers
- fuse4js - write filesystem driver in js

## geometry

- alpha-shape - any dimensional alpha shapes (think “concave” hull)
- box-intersect - fast any dimensional box intersection detection
- convex-hull - robust any dimensional convex hull
- delaunay-triangulate - robust any dimensional delaunay triangulation
- surface-nets - extracts level sets in any dimension
- voronoi-diagram - any dimensional voronoi diagrams
- voxelize - voxelize a mesh

## hardware

- cylon - command robots, devices, and more from node

## images

- indico.io - facial emotion recognition and facial feature extraction
- trackingjs - computer vision on the web

## sound

- doppler - detect motion with the doppler effect using only the microphone and speakers
- speak.js - text-to-speech on the web

## streams

- strip-html - strip html from a stream

## text

- diff - show text differences
- franc - detect the language of text
- indico.io - political sentiment analysis
- node-tesseract - A simple wrapper for the Tesseract OCR package
- normit - Google translate text & speak it
- ocrad.js - OCR in Javascript via Emscripten
- pullquoter - pull interesting quotes out of an article
- sbd - split text into sentences
- sentiment - basic sentiment analysis

## terminal

- minimist - simple argument parser
- progress - create a simple terminal progress bar
- terminal-menu - create retro terminal menus
- vantage.js - CLI + SSH + REPL for Node
- cash - Cross-platform Linux commands in pure ES6

## virtual machines

- jsemu - A list of emulators written in the JavaScript
- jslinux - x86 emulator for running Linux, written in JavaScript
- jvm - java virtual machine in pure node.js
- doppio - actively updated jvm in node.js, written in TypeScript

## misc

- bell.js - real-time anomalies detection for periodic time series.
- bitcoinjs-lib - bitcoin client for node & the browser
- fastparallel - zero overhead parallel function calls
- google-distance - calculate travel distance between two locations on earth using Google Maps’ API
- qr-image - generate QR codes

## meta-programming

- notevil - javascript javascript interpreter, useful for running untrusted code safely.

## mad scientists (people)

- Mikola Lysenko - linear algebra, computational geometry, WebGL
- Dominic Tarr - streams, distributed systems
- Elijah Insua - NC machines, CAD/CAM
- Mathias Buus - torrents in node, fuse bindings, data replication
- Feross Aboukhadijeh - webtorrent, bittorrent, p2p hacks
- Max Ogden - streams, voxels, data replication

## License

To the extent possible under law, Feross Aboukhadijeh has waived all copyright and related or neighboring rights to this work.

madscience.md Github