Skip to content

Instantly share code, notes, and snippets.

View mikeal's full-sized avatar
🏠
Working from home

Mikeal Rogers mikeal

🏠
Working from home
View GitHub Profile
@mikeal
mikeal / gist:8947417
Created February 12, 2014 00:27
NPM history.

[In reply to https://news.ycombinator.com/item?id=7219005]

Here's the history, hope it helps.

I wrote the original version of the npm registry in a day or two on top of CouchDB. I built it quickly and didn't think much about scale.

Isaacs continued to improve and maintain that code. At one point he even wrote up an open standard for generic js package registries for CommonJS but they didn't seem to care (they were too busy arguing about promises).

At the time I wrote the initial code I was employed at CouchOne and we had a small CouchDB hosting platform operated by Jason Smith which is where we ran the registry free of charge. Later on, after CouchOne was aquired by Membase and became Couchbase, it decided to break off the hosting company and give/sell it to Jason Smith, which became IrisCouch.

@mikeal
mikeal / gist:8150724
Created December 27, 2013 18:25
CouchDB attachments manta thread
https://twitter.com/izs/status/416635696367951873
let's talk here, we have commments with mor ethan 140 characters!
@mikeal
mikeal / versionlock.js
Created December 23, 2013 01:58
Version Locked Dependency Numbers
var npmetrics = require('npmetrics')
, _ = require('lodash')
, reg = new RegExp('^[0-9,.]+$')
;
npmetrics.docs().map(function (doc) {
var names = []
, versions = 0
;
if (!doc.versions) return [0,0]
var tz = require('timezone')
> undefined
tz = tz(require("timezone/America/Los_Angeles"), "America/Los_Angeles");
> [Function]
tz(1378393200111, "America/Los_Angeles", '%A %b %d %l:%M%p')
@mikeal
mikeal / gist:7897206
Created December 10, 2013 20:01
Animals for slaughter.

Children are created, raised, cared for and we hope that they will live a long and proud life only to end long after their creator's has ended. They are their creator's legacy.

Your code is not your child, it is an animal raised for slaughter. Your code will die. It will die before your death. Your code's entire purpose is to die. Your code enables some new function and if successful that new function will grow, it will mature, it will eventually outlive the usefullness you've provided. When successful your code creates value that outlives it and the faster the better. When unsuccessful a mercy killing is most appropriate.

Believing that our code is our children makes us territorial, protective. Nobody is allowed to kill it, only improve it. The idea that our code can be perfect, that it can change to handle so many new concerns leads to the birth of frameworks and plugin systems. These systems brutalize creativity by forcing new value to conform to the standards of our aging children.

@mikeal
mikeal / gist:7835772
Last active December 30, 2015 13:29
Libertarianism, Meritocracy and Equality

TLDR;

Libertarianism when applied to the social and political structure of technology and open source (Meritocracy) perpetuates inequality by failing to acknowledge the role of power and current state of inequality.

Long Version

American libertarianism is uniquely American, unfortunately Silicon Valley happens to be in America. It is a political and social philosophy that believes individual ownership and power should supplant collective ownership of any kind. Most immediately the ownership and interventionist powers of government should be dismantled and the free market should be left with the responsibility of creating equality and individuals expected to protect their own interests.

Filtered through the lens of technology this becomes a more unified theory of Meritocracy. Being that we don't trade goods for currency we don't have a traditional market and libertarians must invent one. A strange mix of experience, social capital, and skill are a sort of currency in technology communities. Merit

@mikeal
mikeal / gist:7762769
Last active December 30, 2015 02:29
Bone Broth.

Take the ceramic bowl out of your slow cooker. Paint the bones in olive oil and place them in the bowl until it is nearly full.

Roast bones at 350 degrees in the oven, any higher and your risk cracking the bowl. Times vary depending on the animal, less for chicken, more for lamb, more for pork, and even more for beef. You want them to brown a bit.

Take the bowl out of the oven and let it cool, putting the water in too soon can also cause the bowl to crack. Once cooled chop an onion in half and place it in the bowl. Take a whole garlic clove, cut it in half, place it in the bowl.

Fill the bowl with water and put it in your slow cooker on high. Times vary depending on the bones and how long it takes for your slow cooker to get to a boil. 2-3 hours of boiling for chicken, 6 for pork, 9 for lamb, 12-24 hours for beef especially if you're using the neck bones.

@mikeal
mikeal / gist:7738226
Last active December 29, 2015 22:39
The road ahead.

When Ryan was the only committer and most of the regular node contributors were in the bay area we'd assemble 8 or so people together when we wanted to deal with a new challenge to node. At first we went to the Old Oakland office of CouchOne where I worked but then we upgraded to Matt Ranney's much nicer San Francisco Voxer office.

We scaled out of that pretty quickly, the contributors and stake holders spreading across the world made impromptu local meetings intangible. At first I put together a closed node core meeting before the first NodeConf but it didn't go as well as we'd hoped. Then I ran an unconference, NodeConf Summer Camp, at Walker Creek Ranch, and that served as a much better environment to hammer out the details of streams and seeds of ideas like domains.

Today there are a handful of regular committers to core. They do a regular conference call and contribute consistently. There is a loose structure that appears to be working for them. I decided to end the unconferences and bring NodeConf pro

@mikeal
mikeal / gist:7724521
Last active December 29, 2015 20:29
Inclusive by Exclusion

When you build a community you're creating a culture. That culture will be about more than the code, the modules, or the language. The people you draw in will have their own biases and behaviors that impact the kinds of people you continue to draw as you grow.

Cultures will naturally fight behavior that is divisive. That is, behavior that is divisive to the established members of that community. As a community grows larger it is harder and harder to change what the culture finds acceptable because changing it, even if it is inclusive in nature, is disturbing and divisive to existing membership. Fighting for change in established cultures means dealing with a lot of dismissive language and attacks for the "tone" of your argument.

That is why it is so important that a culture becomes comfortable with aggressively fighting exclusionary behavior. While it is certainly more beneficial to make pro-active steps to increase diversity we cannot be dismissive of the effect that passionate reactions to poor behavior

% npm install -g learnyounode 2>&1 > pbcopy ~/tmp/nodeschool
npm http GET https://registry.npmjs.org/learnyounode
npm http 304 https://registry.npmjs.org/learnyounode
npm http GET https://registry.npmjs.org/duplexer
npm http GET https://registry.npmjs.org/through
npm http GET https://registry.npmjs.org/boganipsum
npm http GET https://registry.npmjs.org/hyperquest
npm http GET https://registry.npmjs.org/through2-map
npm http GET https://registry.npmjs.org/bl
npm http GET https://registry.npmjs.org/workshopper