├── .gitignore ├── R ├── Figure_4.R ├── Figure_5_Table_2.R ├── Figure_6.R ├── Figure_7.R └── Table_1.R ├── README.md ├── data ├── README.md ├── all_judgments.csv ├── master.csv └── rankdata.csv ├── docs ├── harrison2014ranking-slides.pdf ├── harrison2014ranking.pdf └── img │ └── ranking.png ├── experiment ├── README.md ├── analysis │ ├── pull.sh │ ├── readme.md │ ├── results │ │ ├── .RData │ │ ├── .Rhistory │ │ └── data.json │ └── src │ │ └── pull.js ├── app.js ├── node_modules │ ├── .bin │ │ ├── express │ │ └── json2csv │ ├── csv │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── README.md │ │ ├── doc │ │ │ ├── changes.md │ │ │ ├── columns.md │ │ │ ├── coverage.html │ │ │ ├── from.md │ │ │ ├── index.md │ │ │ ├── parser.md │ │ │ ├── stringifier.md │ │ │ ├── to.md │ │ │ └── transformer.md │ │ ├── index.js │ │ ├── lib │ │ │ ├── doc.js │ │ │ ├── from.js │ │ │ ├── generator.js │ │ │ ├── index.js │ │ │ ├── options.js │ │ │ ├── parser.js │ │ │ ├── state.js │ │ │ ├── stringifier.js │ │ │ ├── to.js │ │ │ ├── transformer.js │ │ │ └── utils.js │ │ ├── package.json │ │ ├── samples │ │ │ ├── columns.in │ │ │ ├── columns.js │ │ │ ├── duplicate-headers.in │ │ │ ├── duplicate-headers.js │ │ │ ├── new-columns.in │ │ │ ├── new-columns.js │ │ │ ├── perf.coffee │ │ │ ├── sample-stdin.js │ │ │ ├── sample-stdout.js │ │ │ ├── sample.in │ │ │ ├── sample.js │ │ │ ├── simple.js │ │ │ ├── string.js │ │ │ ├── transform.js │ │ │ └── tsv.js │ │ ├── src │ │ │ ├── doc.coffee │ │ │ ├── from.coffee │ │ │ ├── generator.coffee │ │ │ ├── index.coffee │ │ │ ├── options.coffee │ │ │ ├── parser.coffee │ │ │ ├── state.coffee │ │ │ ├── stringifier.coffee │ │ │ ├── to.coffee │ │ │ ├── transformer.coffee │ │ │ └── utils.coffee │ │ └── test │ │ │ ├── columns.coffee │ │ │ ├── delimiter.coffee │ │ │ ├── eof.coffee │ │ │ ├── escape.coffee │ │ │ ├── event.coffee │ │ │ ├── from.coffee │ │ │ ├── from │ │ │ ├── file.csv │ │ │ └── file_bom.csv │ │ │ ├── fromto.coffee │ │ │ ├── fromto │ │ │ ├── array_to_stream.out │ │ │ ├── encoding_latin1.csv │ │ │ ├── encoding_latin1.tmp │ │ │ ├── encoding_utf8.csv │ │ │ ├── null.out │ │ │ ├── sample.in │ │ │ ├── sample.out │ │ │ └── string_to_stream.out │ │ │ ├── header.coffee │ │ │ ├── mocha.opts │ │ │ ├── pipe.coffee │ │ │ ├── quotes.coffee │ │ │ ├── rowDelimiter.coffee │ │ │ ├── to.coffee │ │ │ ├── transform.coffee │ │ │ ├── trim.coffee │ │ │ └── write.coffee │ ├── express │ │ ├── .npmignore │ │ ├── .travis.yml │ │ ├── History.md │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── Readme.md │ │ ├── bin │ │ │ └── express │ │ ├── client.js │ │ ├── index.js │ │ ├── lib │ │ │ ├── application.js │ │ │ ├── express.js │ │ │ ├── middleware.js │ │ │ ├── request.js │ │ │ ├── response.js │ │ │ ├── router │ │ │ │ ├── index.js │ │ │ │ └── route.js │ │ │ ├── utils.js │ │ │ └── view.js │ │ ├── node_modules │ │ │ ├── buffer-crc32 │ │ │ │ ├── .npmignore │ │ │ │ ├── .travis.yml │ │ │ │ ├── README.md │ │ │ │ ├── index.js │ │ │ │ ├── package.json │ │ │ │ └── tests │ │ │ │ │ └── crc.test.js │ │ │ ├── commander │ │ │ │ ├── .npmignore │ │ │ │ ├── .travis.yml │ │ │ │ ├── History.md │ │ │ │ ├── Makefile │ │ │ │ ├── Readme.md │ │ │ │ ├── index.js │ │ │ │ ├── lib │ │ │ │ │ └── commander.js │ │ │ │ └── package.json │ │ │ ├── connect │ │ │ │ ├── .npmignore │ │ │ │ ├── .travis.yml │ │ │ │ ├── LICENSE │ │ │ │ ├── Readme.md │ │ │ │ ├── index.js │ │ │ │ ├── lib │ │ │ │ │ ├── cache.js │ │ │ │ │ ├── connect.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── middleware │ │ │ │ │ │ ├── basicAuth.js │ │ │ │ │ │ ├── bodyParser.js │ │ │ │ │ │ ├── compress.js │ │ │ │ │ │ ├── cookieParser.js │ │ │ │ │ │ ├── cookieSession.js │ │ │ │ │ │ ├── csrf.js │ │ │ │ │ │ ├── directory.js │ │ │ │ │ │ ├── errorHandler.js │ │ │ │ │ │ ├── favicon.js │ │ │ │ │ │ ├── json.js │ │ │ │ │ │ ├── limit.js │ │ │ │ │ │ ├── logger.js │ │ │ │ │ │ ├── methodOverride.js │ │ │ │ │ │ ├── multipart.js │ │ │ │ │ │ ├── query.js │ │ │ │ │ │ ├── responseTime.js │ │ │ │ │ │ ├── session.js │ │ │ │ │ │ ├── session │ │ │ │ │ │ │ ├── cookie.js │ │ │ │ │ │ │ ├── memory.js │ │ │ │ │ │ │ ├── session.js │ │ │ │ │ │ │ └── store.js │ │ │ │ │ │ ├── static.js │ │ │ │ │ │ ├── staticCache.js │ │ │ │ │ │ ├── timeout.js │ │ │ │ │ │ ├── urlencoded.js │ │ │ │ │ │ └── vhost.js │ │ │ │ │ ├── patch.js │ │ │ │ │ ├── proto.js │ │ │ │ │ ├── public │ │ │ │ │ │ ├── directory.html │ │ │ │ │ │ ├── error.html │ │ │ │ │ │ ├── favicon.ico │ │ │ │ │ │ ├── icons │ │ │ │ │ │ │ ├── page.png │ │ │ │ │ │ │ ├── page_add.png │ │ │ │ │ │ │ ├── page_attach.png │ │ │ │ │ │ │ ├── page_code.png │ │ │ │ │ │ │ ├── page_copy.png │ │ │ │ │ │ │ ├── page_delete.png │ │ │ │ │ │ │ ├── page_edit.png │ │ │ │ │ │ │ ├── page_error.png │ │ │ │ │ │ │ ├── page_excel.png │ │ │ │ │ │ │ ├── page_find.png │ │ │ │ │ │ │ ├── page_gear.png │ │ │ │ │ │ │ ├── page_go.png │ │ │ │ │ │ │ ├── page_green.png │ │ │ │ │ │ │ ├── page_key.png │ │ │ │ │ │ │ ├── page_lightning.png │ │ │ │ │ │ │ ├── page_link.png │ │ │ │ │ │ │ ├── page_paintbrush.png │ │ │ │ │ │ │ ├── page_paste.png │ │ │ │ │ │ │ ├── page_red.png │ │ │ │ │ │ │ ├── page_refresh.png │ │ │ │ │ │ │ ├── page_save.png │ │ │ │ │ │ │ ├── page_white.png │ │ │ │ │ │ │ ├── page_white_acrobat.png │ │ │ │ │ │ │ ├── page_white_actionscript.png │ │ │ │ │ │ │ ├── page_white_add.png │ │ │ │ │ │ │ ├── page_white_c.png │ │ │ │ │ │ │ ├── page_white_camera.png │ │ │ │ │ │ │ ├── page_white_cd.png │ │ │ │ │ │ │ ├── page_white_code.png │ │ │ │ │ │ │ ├── page_white_code_red.png │ │ │ │ │ │ │ ├── page_white_coldfusion.png │ │ │ │ │ │ │ ├── page_white_compressed.png │ │ │ │ │ │ │ ├── page_white_copy.png │ │ │ │ │ │ │ ├── page_white_cplusplus.png │ │ │ │ │ │ │ ├── page_white_csharp.png │ │ │ │ │ │ │ ├── page_white_cup.png │ │ │ │ │ │ │ ├── page_white_database.png │ │ │ │ │ │ │ ├── page_white_delete.png │ │ │ │ │ │ │ ├── page_white_dvd.png │ │ │ │ │ │ │ ├── page_white_edit.png │ │ │ │ │ │ │ ├── page_white_error.png │ │ │ │ │ │ │ ├── page_white_excel.png │ │ │ │ │ │ │ ├── page_white_find.png │ │ │ │ │ │ │ ├── page_white_flash.png │ │ │ │ │ │ │ ├── page_white_freehand.png │ │ │ │ │ │ │ ├── page_white_gear.png │ │ │ │ │ │ │ ├── page_white_get.png │ │ │ │ │ │ │ ├── page_white_go.png │ │ │ │ │ │ │ ├── page_white_h.png │ │ │ │ │ │ │ ├── page_white_horizontal.png │ │ │ │ │ │ │ ├── page_white_key.png │ │ │ │ │ │ │ ├── page_white_lightning.png │ │ │ │ │ │ │ ├── page_white_link.png │ │ │ │ │ │ │ ├── page_white_magnify.png │ │ │ │ │ │ │ ├── page_white_medal.png │ │ │ │ │ │ │ ├── page_white_office.png │ │ │ │ │ │ │ ├── page_white_paint.png │ │ │ │ │ │ │ ├── page_white_paintbrush.png │ │ │ │ │ │ │ ├── page_white_paste.png │ │ │ │ │ │ │ ├── page_white_php.png │ │ │ │ │ │ │ ├── page_white_picture.png │ │ │ │ │ │ │ ├── page_white_powerpoint.png │ │ │ │ │ │ │ ├── page_white_put.png │ │ │ │ │ │ │ ├── page_white_ruby.png │ │ │ │ │ │ │ ├── page_white_stack.png │ │ │ │ │ │ │ ├── page_white_star.png │ │ │ │ │ │ │ ├── page_white_swoosh.png │ │ │ │ │ │ │ ├── page_white_text.png │ │ │ │ │ │ │ ├── page_white_text_width.png │ │ │ │ │ │ │ ├── page_white_tux.png │ │ │ │ │ │ │ ├── page_white_vector.png │ │ │ │ │ │ │ ├── page_white_visualstudio.png │ │ │ │ │ │ │ ├── page_white_width.png │ │ │ │ │ │ │ ├── page_white_word.png │ │ │ │ │ │ │ ├── page_white_world.png │ │ │ │ │ │ │ ├── page_white_wrench.png │ │ │ │ │ │ │ ├── page_white_zip.png │ │ │ │ │ │ │ ├── page_word.png │ │ │ │ │ │ │ └── page_world.png │ │ │ │ │ │ └── style.css │ │ │ │ │ └── utils.js │ │ │ │ ├── node_modules │ │ │ │ │ ├── buffer-crc32 │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── .travis.yml │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── tests │ │ │ │ │ │ │ └── crc.test.js │ │ │ │ │ ├── bytes │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── History.md │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ ├── component.json │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── formidable │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── .travis.yml │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ ├── TODO │ │ │ │ │ │ ├── benchmark │ │ │ │ │ │ │ └── bench-multipart-parser.js │ │ │ │ │ │ ├── example │ │ │ │ │ │ │ ├── post.js │ │ │ │ │ │ │ └── upload.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ ├── file.js │ │ │ │ │ │ │ ├── incoming_form.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── multipart_parser.js │ │ │ │ │ │ │ ├── querystring_parser.js │ │ │ │ │ │ │ └── util.js │ │ │ │ │ │ ├── node-gently │ │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ │ ├── example │ │ │ │ │ │ │ │ ├── dog.js │ │ │ │ │ │ │ │ └── event_emitter.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── lib │ │ │ │ │ │ │ │ └── gently │ │ │ │ │ │ │ │ │ ├── gently.js │ │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ │ └── test │ │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ │ └── simple │ │ │ │ │ │ │ │ └── test-gently.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── test │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ ├── fixture │ │ │ │ │ │ │ │ ├── file │ │ │ │ │ │ │ │ │ ├── funkyfilename.txt │ │ │ │ │ │ │ │ │ └── plain.txt │ │ │ │ │ │ │ │ ├── http │ │ │ │ │ │ │ │ │ └── special-chars-in-filename │ │ │ │ │ │ │ │ │ │ └── info.md │ │ │ │ │ │ │ │ ├── js │ │ │ │ │ │ │ │ │ ├── no-filename.js │ │ │ │ │ │ │ │ │ └── special-chars-in-filename.js │ │ │ │ │ │ │ │ └── multipart.js │ │ │ │ │ │ │ ├── integration │ │ │ │ │ │ │ │ └── test-fixtures.js │ │ │ │ │ │ │ ├── legacy │ │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ │ ├── integration │ │ │ │ │ │ │ │ │ └── test-multipart-parser.js │ │ │ │ │ │ │ │ ├── simple │ │ │ │ │ │ │ │ │ ├── test-file.js │ │ │ │ │ │ │ │ │ ├── test-incoming-form.js │ │ │ │ │ │ │ │ │ ├── test-multipart-parser.js │ │ │ │ │ │ │ │ │ └── test-querystring-parser.js │ │ │ │ │ │ │ │ └── system │ │ │ │ │ │ │ │ │ └── test-multi-video-upload.js │ │ │ │ │ │ │ ├── run.js │ │ │ │ │ │ │ └── unit │ │ │ │ │ │ │ │ └── test-incoming-form.js │ │ │ │ │ │ └── tool │ │ │ │ │ │ │ └── record.js │ │ │ │ │ ├── pause │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── History.md │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ └── qs │ │ │ │ │ │ ├── .gitmodules │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── .travis.yml │ │ │ │ │ │ ├── History.md │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ ├── benchmark.js │ │ │ │ │ │ ├── component.json │ │ │ │ │ │ ├── examples.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── lib │ │ │ │ │ │ ├── head.js │ │ │ │ │ │ ├── querystring.js │ │ │ │ │ │ └── tail.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── querystring.js │ │ │ │ │ │ └── test │ │ │ │ │ │ ├── browser │ │ │ │ │ │ ├── expect.js │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ ├── mocha.css │ │ │ │ │ │ ├── mocha.js │ │ │ │ │ │ ├── qs.css │ │ │ │ │ │ └── qs.js │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ └── stringify.js │ │ │ │ ├── package.json │ │ │ │ └── test.js │ │ │ ├── cookie-signature │ │ │ │ ├── .npmignore │ │ │ │ ├── History.md │ │ │ │ ├── Makefile │ │ │ │ ├── Readme.md │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── cookie │ │ │ │ ├── .npmignore │ │ │ │ ├── .travis.yml │ │ │ │ ├── README.md │ │ │ │ ├── index.js │ │ │ │ ├── package.json │ │ │ │ └── test │ │ │ │ │ ├── mocha.opts │ │ │ │ │ ├── parse.js │ │ │ │ │ └── serialize.js │ │ │ ├── debug │ │ │ │ ├── .npmignore │ │ │ │ ├── History.md │ │ │ │ ├── Readme.md │ │ │ │ ├── component.json │ │ │ │ ├── debug.js │ │ │ │ ├── example │ │ │ │ │ ├── app.js │ │ │ │ │ ├── browser.html │ │ │ │ │ ├── wildcards.js │ │ │ │ │ └── worker.js │ │ │ │ ├── index.js │ │ │ │ ├── lib │ │ │ │ │ └── debug.js │ │ │ │ └── package.json │ │ │ ├── fresh │ │ │ │ ├── .npmignore │ │ │ │ ├── Makefile │ │ │ │ ├── Readme.md │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── methods │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ ├── mkdirp │ │ │ │ ├── .npmignore │ │ │ │ ├── .travis.yml │ │ │ │ ├── LICENSE │ │ │ │ ├── examples │ │ │ │ │ └── pow.js │ │ │ │ ├── index.js │ │ │ │ ├── package.json │ │ │ │ ├── readme.markdown │ │ │ │ └── test │ │ │ │ │ ├── chmod.js │ │ │ │ │ ├── clobber.js │ │ │ │ │ ├── mkdirp.js │ │ │ │ │ ├── perm.js │ │ │ │ │ ├── perm_sync.js │ │ │ │ │ ├── race.js │ │ │ │ │ ├── rel.js │ │ │ │ │ ├── return.js │ │ │ │ │ ├── return_sync.js │ │ │ │ │ ├── root.js │ │ │ │ │ ├── sync.js │ │ │ │ │ ├── umask.js │ │ │ │ │ └── umask_sync.js │ │ │ ├── range-parser │ │ │ │ ├── .npmignore │ │ │ │ ├── History.md │ │ │ │ ├── Makefile │ │ │ │ ├── Readme.md │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ └── send │ │ │ │ ├── .npmignore │ │ │ │ ├── History.md │ │ │ │ ├── Makefile │ │ │ │ ├── Readme.md │ │ │ │ ├── index.js │ │ │ │ ├── lib │ │ │ │ ├── send.js │ │ │ │ └── utils.js │ │ │ │ ├── node_modules │ │ │ │ └── mime │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── mime.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── test.js │ │ │ │ │ └── types │ │ │ │ │ ├── mime.types │ │ │ │ │ └── node.types │ │ │ │ └── package.json │ │ ├── package.json │ │ └── test.js │ ├── json2csv │ │ ├── .idea │ │ │ ├── .name │ │ │ ├── encodings.xml │ │ │ ├── json2csv.iml │ │ │ ├── misc.xml │ │ │ ├── modules.xml │ │ │ ├── scopes │ │ │ │ └── scope_settings.xml │ │ │ ├── vcs.xml │ │ │ └── workspace.xml │ │ ├── .npmignore │ │ ├── .travis.yml │ │ ├── History.md │ │ ├── Makefile │ │ ├── README.md │ │ ├── bin │ │ │ └── json2csv.js │ │ ├── lib │ │ │ └── json2csv.js │ │ ├── node_modules │ │ │ ├── async │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── component.json │ │ │ │ ├── lib │ │ │ │ │ └── async.js │ │ │ │ └── package.json │ │ │ ├── cli-table │ │ │ │ ├── .npmignore │ │ │ │ ├── History.md │ │ │ │ ├── Makefile │ │ │ │ ├── README.md │ │ │ │ ├── examples │ │ │ │ │ ├── revs.js │ │ │ │ │ └── table.js │ │ │ │ ├── index.js │ │ │ │ ├── lib │ │ │ │ │ └── cli-table │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── utils.js │ │ │ │ ├── node_modules │ │ │ │ │ └── colors │ │ │ │ │ │ ├── MIT-LICENSE.txt │ │ │ │ │ │ ├── ReadMe.md │ │ │ │ │ │ ├── colors.js │ │ │ │ │ │ ├── example.js │ │ │ │ │ │ └── package.json │ │ │ │ ├── package.json │ │ │ │ └── test │ │ │ │ │ ├── index.test.js │ │ │ │ │ └── newlines.test.js │ │ │ └── commander │ │ │ │ ├── .npmignore │ │ │ │ ├── .travis.yml │ │ │ │ ├── History.md │ │ │ │ ├── Makefile │ │ │ │ ├── Readme.md │ │ │ │ ├── index.js │ │ │ │ ├── lib │ │ │ │ └── commander.js │ │ │ │ ├── node_modules │ │ │ │ └── keypress │ │ │ │ │ ├── README.md │ │ │ │ │ ├── index.js │ │ │ │ │ ├── package.json │ │ │ │ │ └── test.js │ │ │ │ └── package.json │ │ ├── package.json │ │ └── test │ │ │ ├── fixtures │ │ │ ├── in-quotes.json │ │ │ ├── in.json │ │ │ ├── out-fieldNames.csv │ │ │ ├── out-quotes.csv │ │ │ ├── out-reversed.csv │ │ │ ├── out-selected.csv │ │ │ ├── out.csv │ │ │ └── out.tsv │ │ │ └── test.js │ ├── redis │ │ ├── .npmignore │ │ ├── README.md │ │ ├── benches │ │ │ ├── buffer_bench.js │ │ │ ├── hiredis_parser.js │ │ │ ├── re_sub_test.js │ │ │ ├── reconnect_test.js │ │ │ ├── stress │ │ │ │ ├── codec.js │ │ │ │ ├── pubsub │ │ │ │ │ ├── pub.js │ │ │ │ │ ├── run │ │ │ │ │ └── server.js │ │ │ │ ├── rpushblpop │ │ │ │ │ ├── pub.js │ │ │ │ │ ├── run │ │ │ │ │ └── server.js │ │ │ │ └── speed │ │ │ │ │ ├── 00 │ │ │ │ │ ├── plot │ │ │ │ │ ├── size-rate.png │ │ │ │ │ └── speed.js │ │ │ └── sub_quit_test.js │ │ ├── changelog.md │ │ ├── diff_multi_bench_output.js │ │ ├── examples │ │ │ ├── auth.js │ │ │ ├── backpressure_drain.js │ │ │ ├── eval.js │ │ │ ├── extend.js │ │ │ ├── file.js │ │ │ ├── mget.js │ │ │ ├── monitor.js │ │ │ ├── multi.js │ │ │ ├── multi2.js │ │ │ ├── psubscribe.js │ │ │ ├── pub_sub.js │ │ │ ├── simple.js │ │ │ ├── sort.js │ │ │ ├── subqueries.js │ │ │ ├── subquery.js │ │ │ ├── unix_socket.js │ │ │ └── web_server.js │ │ ├── generate_commands.js │ │ ├── index.js │ │ ├── lib │ │ │ ├── commands.js │ │ │ ├── parser │ │ │ │ ├── hiredis.js │ │ │ │ └── javascript.js │ │ │ ├── queue.js │ │ │ ├── to_array.js │ │ │ └── util.js │ │ ├── multi_bench.js │ │ ├── package.json │ │ └── test.js │ └── underscore │ │ ├── .npmignore │ │ ├── .travis.yml │ │ ├── CNAME │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── favicon.ico │ │ ├── index.js │ │ ├── package.json │ │ ├── underscore-min.map │ │ └── underscore.js ├── package.json ├── public │ ├── components │ │ ├── d3js │ │ │ └── d3.v3.min.js │ │ ├── science.js │ │ │ ├── .bower.json │ │ │ ├── .gitignore │ │ │ ├── LICENSE │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── examples │ │ │ │ ├── kde │ │ │ │ │ ├── faithful.json │ │ │ │ │ ├── kde.css │ │ │ │ │ ├── kde.html │ │ │ │ │ └── kde.js │ │ │ │ └── loess │ │ │ │ │ ├── loess.html │ │ │ │ │ └── loess.js │ │ │ ├── index.js │ │ │ ├── lib │ │ │ │ ├── commons-math │ │ │ │ │ └── LICENSE.txt │ │ │ │ └── d3 │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── Makefile │ │ │ │ │ ├── d3.chart.js │ │ │ │ │ ├── d3.chart.min.js │ │ │ │ │ ├── d3.csv.js │ │ │ │ │ ├── d3.csv.min.js │ │ │ │ │ ├── d3.geo.js │ │ │ │ │ ├── d3.geo.min.js │ │ │ │ │ ├── d3.geom.js │ │ │ │ │ ├── d3.geom.min.js │ │ │ │ │ ├── d3.js │ │ │ │ │ ├── d3.layout.js │ │ │ │ │ ├── d3.layout.min.js │ │ │ │ │ ├── d3.min.js │ │ │ │ │ ├── d3.time.js │ │ │ │ │ └── d3.time.min.js │ │ │ ├── package.json │ │ │ ├── science.v1.js │ │ │ ├── science.v1.min.js │ │ │ ├── src │ │ │ │ ├── core │ │ │ │ │ ├── ascending.js │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── core.js │ │ │ │ │ ├── expm1.js │ │ │ │ │ ├── functor.js │ │ │ │ │ ├── hypot.js │ │ │ │ │ ├── quadratic.js │ │ │ │ │ └── zeroes.js │ │ │ │ ├── lin │ │ │ │ │ ├── cross.js │ │ │ │ │ ├── decompose.js │ │ │ │ │ ├── determinant.js │ │ │ │ │ ├── dot.js │ │ │ │ │ ├── gaussjordan.js │ │ │ │ │ ├── inverse.js │ │ │ │ │ ├── length.js │ │ │ │ │ ├── lin.js │ │ │ │ │ ├── multiply.js │ │ │ │ │ ├── normalize.js │ │ │ │ │ ├── transpose.js │ │ │ │ │ └── tridag.js │ │ │ │ ├── package.js │ │ │ │ └── stats │ │ │ │ │ ├── bandwidth.js │ │ │ │ │ ├── distance.js │ │ │ │ │ ├── distribution.js │ │ │ │ │ ├── distribution │ │ │ │ │ └── gaussian.js │ │ │ │ │ ├── erf.js │ │ │ │ │ ├── hcluster.js │ │ │ │ │ ├── iqr.js │ │ │ │ │ ├── kde.js │ │ │ │ │ ├── kernel.js │ │ │ │ │ ├── kmeans.js │ │ │ │ │ ├── loess.js │ │ │ │ │ ├── mean.js │ │ │ │ │ ├── median.js │ │ │ │ │ ├── mode.js │ │ │ │ │ ├── phi.js │ │ │ │ │ ├── quantiles.js │ │ │ │ │ ├── stats.js │ │ │ │ │ └── variance.js │ │ │ └── test │ │ │ │ ├── core │ │ │ │ ├── ascending-test.js │ │ │ │ ├── expm1-test.js │ │ │ │ ├── hypot-test.js │ │ │ │ ├── quadratic-test.js │ │ │ │ └── zeroes-test.js │ │ │ │ ├── env-assert.js │ │ │ │ ├── lin │ │ │ │ ├── decompose-test.js │ │ │ │ └── tridag-test.js │ │ │ │ └── stats │ │ │ │ ├── bandwidth-test.js │ │ │ │ ├── distance-test.js │ │ │ │ ├── distribution │ │ │ │ └── gaussian-test.js │ │ │ │ ├── erf-test.js │ │ │ │ ├── hcluster-test.js │ │ │ │ ├── iqr-test.js │ │ │ │ ├── kmeans-test.js │ │ │ │ ├── loess-test.js │ │ │ │ ├── mean-test.js │ │ │ │ ├── median-test.js │ │ │ │ ├── mode-test.js │ │ │ │ ├── phi-test.js │ │ │ │ └── variance-test.js │ │ └── underscore │ │ │ ├── .bower.json │ │ │ ├── .gitignore │ │ │ ├── .travis.yml │ │ │ ├── CNAME │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── Rakefile │ │ │ ├── docs │ │ │ ├── docco.css │ │ │ ├── favicon.ico │ │ │ ├── images │ │ │ │ ├── background.png │ │ │ │ └── underscore.png │ │ │ ├── public │ │ │ │ ├── fonts │ │ │ │ │ ├── aller-bold.eot │ │ │ │ │ ├── aller-bold.ttf │ │ │ │ │ ├── aller-bold.woff │ │ │ │ │ ├── aller-light.eot │ │ │ │ │ ├── aller-light.ttf │ │ │ │ │ ├── aller-light.woff │ │ │ │ │ ├── novecento-bold.eot │ │ │ │ │ ├── novecento-bold.ttf │ │ │ │ │ └── novecento-bold.woff │ │ │ │ └── stylesheets │ │ │ │ │ └── normalize.css │ │ │ └── underscore.html │ │ │ ├── favicon.ico │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── test │ │ │ ├── arrays.js │ │ │ ├── chaining.js │ │ │ ├── collections.js │ │ │ ├── functions.js │ │ │ ├── index.html │ │ │ ├── objects.js │ │ │ ├── speed.js │ │ │ ├── utility.js │ │ │ └── vendor │ │ │ │ ├── jquery.js │ │ │ │ ├── jslitmus.js │ │ │ │ ├── qunit.css │ │ │ │ ├── qunit.js │ │ │ │ └── runner.js │ │ │ ├── underscore-min.js │ │ │ ├── underscore-min.map │ │ │ └── underscore.js │ ├── experimentr.js │ ├── index.html │ ├── modules │ │ ├── JND │ │ │ ├── consent.html │ │ │ ├── debrief.html │ │ │ ├── demographics.html │ │ │ ├── practice.html │ │ │ ├── training.html │ │ │ └── trials.html │ │ ├── blocked-workers.json │ │ ├── generate.browser.js │ │ ├── paste-on-mturk.html │ │ └── vis.js │ └── util.js └── redis.conf └── ranking-correlation.Rproj /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | .pdf 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Visualization ranking](docs/img/ranking.png?raw=true) 2 | 3 | Ranking Visualizations of Correlation Using Weber's Law 4 | =================== 5 | 6 | This repo contains the experiment data and code from our [InfoVis '14 paper](docs/harrison2014ranking.pdf?raw=true). 7 | 8 | Data 9 | --- 10 | 11 | The raw data from our experiment and an overall ranking for the visualizations tested is in the [data](data) folder. 12 | 13 | Analysis 14 | --- 15 | 16 | The R files we used to compute statistics and produce figures are in the [R](R/) folder. 17 | 18 | Experiment 19 | --- 20 | 21 | The code for reproducing our web-based experiment is in the [experiment](experiment) folder. 22 | 23 | 24 | Bibtex 25 | --- 26 | @article{harrison2014ranking, 27 | title = {Ranking Visualizations of Correlation using Weber's Law}, 28 | author = {Lane Harrison AND Fumeng Yang AND Steven Franconeri AND Remco Chang}, 29 | journal = {IEEE Conference on Information Visualization (InfoVis)}, 30 | year = {2014} 31 | } 32 | -------------------------------------------------------------------------------- /docs/harrison2014ranking-slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/docs/harrison2014ranking-slides.pdf -------------------------------------------------------------------------------- /docs/harrison2014ranking.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/docs/harrison2014ranking.pdf -------------------------------------------------------------------------------- /docs/img/ranking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/docs/img/ranking.png -------------------------------------------------------------------------------- /experiment/README.md: -------------------------------------------------------------------------------- 1 | Experimentr 2 | ======== 3 | 4 | Experimentr is a hosting/data-collection backend and module-based frontend for web-based visualization studies. See [github.com/codementum/experimentr](https://github.com/codementum/experimentr/) for more. 5 | 6 | Running the server 7 | -------- 8 | 9 | Start redis: 10 | 11 | redis-server redis.conf 12 | 13 | Run the server: 14 | 15 | node app.js 16 | 17 | Then access the page at [localhost:8000](http://localhost:8000). 18 | 19 | Getting the data 20 | ------- 21 | 22 | In the `analysis` folder, you'll find scripts like `pull.sh` that move data from the redis database to json files. 23 | 24 | Installation 25 | ------- 26 | 27 | - Node.js: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#ubuntu-mint 28 | - redis-server: http://redis.io/download 29 | - clone this repo 30 | - cd to this repo and run `npm install` 31 | 32 | Testing experiments 33 | ------- 34 | 35 | Use `debug` as your "worker id" when testing experiments, so you can filter out your data later. 36 | -------------------------------------------------------------------------------- /experiment/analysis/pull.sh: -------------------------------------------------------------------------------- 1 | node src/pull.js > results/data.json 2 | echo "Pulling from Redis to results/data.json." 3 | -------------------------------------------------------------------------------- /experiment/analysis/results/.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/analysis/results/.RData -------------------------------------------------------------------------------- /experiment/analysis/results/data.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/analysis/results/data.json -------------------------------------------------------------------------------- /experiment/analysis/src/pull.js: -------------------------------------------------------------------------------- 1 | /* global require:true, console:true, process:true, __dirname:true */ 2 | // Run pull.js to produce data.json 3 | // `node pull.js > ../results/data.json` 4 | 'use strict' 5 | 6 | var fs = require('fs') 7 | , dataset = [] 8 | , redis = require('redis') 9 | , client 10 | 11 | client = redis.createClient(6379) 12 | 13 | client.on('connect', keys) 14 | 15 | function keys () { 16 | client.keys("*", function (err, res) { 17 | res.forEach(data) 18 | client.quit() 19 | }); 20 | } 21 | 22 | function data (k, i, arr) { 23 | client.hgetall(k, function (err, obj) { 24 | dataset.push( JSON.parse(obj.data) ) 25 | if(i === arr.length-1) log(dataset) 26 | }); 27 | } 28 | 29 | function log (obj) { 30 | console.log(JSON.stringify(obj)) 31 | } 32 | -------------------------------------------------------------------------------- /experiment/node_modules/.bin/express: -------------------------------------------------------------------------------- 1 | ../express/bin/express -------------------------------------------------------------------------------- /experiment/node_modules/.bin/json2csv: -------------------------------------------------------------------------------- 1 | ../json2csv/bin/json2csv.js -------------------------------------------------------------------------------- /experiment/node_modules/csv/.travis.yml: -------------------------------------------------------------------------------- 1 | 2 | language: node_js 3 | node_js: 4 | - 0.6 5 | - 0.7 6 | - 0.8 7 | - 0.9 8 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/Makefile: -------------------------------------------------------------------------------- 1 | 2 | REPORTER = dot 3 | 4 | build: 5 | @./node_modules/.bin/coffee -b -o lib src/*.coffee 6 | 7 | doc: build 8 | @./node_modules/.bin/coffee src/doc $(CSV_DOC) 9 | 10 | test: build 11 | @NODE_ENV=test ./node_modules/.bin/mocha --compilers coffee:coffee-script \ 12 | --reporter $(REPORTER) 13 | 14 | coverage: build 15 | @jscoverage --no-highlight lib lib-cov 16 | @CSV_COV=1 $(MAKE) test REPORTER=html-cov > doc/coverage.html 17 | @rm -rf lib-cov 18 | 19 | .PHONY: test 20 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/doc/parser.md: -------------------------------------------------------------------------------- 1 | --- 2 | language: en 3 | layout: page 4 | title: "Parsing" 5 | date: 2013-01-05T06:10:44.660Z 6 | comments: false 7 | sharing: false 8 | footer: false 9 | navigation: csv 10 | github: https://github.com/wdavidw/node-csv-parser 11 | --- 12 | 13 | 14 | The library extend the [EventEmitter][event] and emit the following events: 15 | 16 | * *row* 17 | Emitted by the parser on each line with the line content as an array of fields. 18 | * *end* 19 | Emitted when no more data will be parsed. 20 | * *error* 21 | Emitted when an error occured. 22 | 23 | 24 | `parse(chars)` 25 | -------------- 26 | 27 | Parse a string which may hold multiple lines. 28 | Private state object is enriched on each character until 29 | transform is called on a new line. 30 | 31 | [event]: http://nodejs.org/api/events.html 32 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/doc/stringifier.md: -------------------------------------------------------------------------------- 1 | --- 2 | language: en 3 | layout: page 4 | title: "Stringifier" 5 | date: 2013-01-05T06:10:44.661Z 6 | comments: false 7 | sharing: false 8 | footer: false 9 | navigation: csv 10 | github: https://github.com/wdavidw/node-csv-parser 11 | --- 12 | 13 | 14 | Convert an array or an object into a CSV line. 15 | 16 | 17 | `write(line, [preserve])` 18 | ------------------------- 19 | 20 | Write a line to the written stream. Line may be an object, an array or a string 21 | The `preserve` argument is for the lines which are not considered as CSV data. 22 | 23 | 24 | 25 | `Stringifier(line)` 26 | ------------------- 27 | 28 | Convert a line to a string. Line may be an object, an array or a string. 29 | 30 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/index.js: -------------------------------------------------------------------------------- 1 | 2 | csv = require('./lib'); 3 | csv.generator = require('./lib/generator'); 4 | 5 | module.exports = csv; 6 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/lib/options.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.4.0 2 | /* 3 | Input and output options 4 | ======================== 5 | 6 | The `options` property provide access to the `from` and `to` object used to store options. This 7 | property is for internal usage and could be considered private. It is recommanded to use 8 | the `from.options()` and `to.options()` to access those objects. 9 | */ 10 | 11 | module.exports = function() { 12 | return { 13 | from: { 14 | delimiter: ',', 15 | quote: '"', 16 | escape: '"', 17 | columns: null, 18 | flags: 'r', 19 | encoding: 'utf8', 20 | trim: false, 21 | ltrim: false, 22 | rtrim: false 23 | }, 24 | to: { 25 | delimiter: null, 26 | quote: null, 27 | quoted: false, 28 | escape: null, 29 | columns: null, 30 | header: false, 31 | lineBreaks: null, 32 | flags: 'w', 33 | encoding: 'utf8', 34 | newColumns: false, 35 | end: true, 36 | eof: false 37 | } 38 | }; 39 | }; 40 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/lib/state.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.4.0 2 | 3 | module.exports = function() { 4 | return { 5 | count: 0, 6 | line: [], 7 | countWriten: 0, 8 | transforming: 0 9 | }; 10 | }; 11 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/lib/utils.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.4.0 2 | 3 | module.exports = { 4 | merge: function(obj1, obj2) { 5 | var key, r; 6 | r = obj1 || {}; 7 | for (key in obj2) { 8 | r[key] = obj2[key]; 9 | } 10 | return r; 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/columns.in: -------------------------------------------------------------------------------- 1 | id,lastname,firstname 2 | 82,Preisner,Zbigniew 3 | 94,Gainsbourg,Serge 4 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/columns.js: -------------------------------------------------------------------------------- 1 | 2 | var csv = require('..'); 3 | 4 | csv() 5 | .from.path(__dirname+'/columns.in', { 6 | columns: true 7 | }) 8 | .to.stream(process.stdout, { 9 | columns: ['id', 'name'], 10 | end: false 11 | }) 12 | .transform(function(data){ 13 | data.name = data.firstname + ' ' + data.lastname 14 | return data; 15 | }); 16 | 17 | /* 18 | 19 | `node samples/columns.js` 20 | 21 | 82,Zbigniew Preisner 22 | 94,Serge Gainsbourg 23 | 24 | */ 25 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/duplicate-headers.in: -------------------------------------------------------------------------------- 1 | ts,year,ms,chars,age,date 2 | 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 3 | 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 4 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/duplicate-headers.js: -------------------------------------------------------------------------------- 1 | // 2 | // This sample shows how the write function can be used 3 | // to write a new record into the output stream. 4 | // 5 | // In this rather contrived example, the first line read 6 | // is interpreted as a header and is inserted before 7 | // every other data line in the file. 8 | // 9 | 10 | var csv = require('..'); 11 | var header; 12 | 13 | process.stdin.resume(); 14 | 15 | parser = csv() 16 | .from.stream(process.stdin) 17 | .to.stream(process.stdout, {end: false}) 18 | .transform(function(data){ 19 | if (header) { 20 | parser.write(header); 21 | } else { 22 | header=data; 23 | return null; 24 | } 25 | return data; 26 | }) 27 | .on('end',function(error){ 28 | process.stdout.write("\n"); 29 | }) 30 | .on('error',function(error){ 31 | console.log(error.message); 32 | }); 33 | 34 | /* 35 | 36 | `node samples/duplicate-headers.js < samples/duplicate-headers.in` 37 | 38 | ts,year,ms,chars,age,date 39 | 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 40 | ts,year,ms,chars,age,date 41 | 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 42 | 43 | */ 44 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/new-columns.in: -------------------------------------------------------------------------------- 1 | id,lastname,firstname 2 | 82,Preisner,Zbigniew 3 | 94,Gainsbourg,Serge 4 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/new-columns.js: -------------------------------------------------------------------------------- 1 | 2 | var csv = require('..'); 3 | 4 | csv() 5 | .from.path(__dirname+'/columns.in',{ 6 | columns: true 7 | }) 8 | .to.stream(process.stdout, { 9 | newColumns: true 10 | }) 11 | .transform(function(data){ 12 | data.name = data.firstname + ' ' + data.lastname 13 | return data; 14 | }) 15 | .on('end', function(){ 16 | process.stdout.write('\n'); 17 | }); 18 | 19 | /* 20 | 21 | `node samples/new-columns.js` 22 | 23 | 82,Preisner,Zbigniew,Zbigniew Preisner 24 | 94,Gainsbourg,Serge,Serge Gainsbourg 25 | 26 | */ 27 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/sample-stdin.js: -------------------------------------------------------------------------------- 1 | 2 | var csv = require('..'); 3 | 4 | process.stdin.resume(); 5 | 6 | csv() 7 | .from.stream(process.stdin) 8 | .to.path(__dirname+'/sample.out') 9 | .transform(function(data){ 10 | data.unshift(data.pop()); 11 | return data; 12 | }) 13 | .on('record',function(record, index){ 14 | console.log('#'+index+' '+JSON.stringify(record)); 15 | }) 16 | .on('close',function(count){ 17 | console.log('Number of lines: '+count); 18 | }) 19 | .on('error',function(error){ 20 | console.log(error.message); 21 | }); 22 | 23 | /* 24 | 25 | `cat samples/sample.in | node samples/sample-stdin.js` 26 | 27 | #0 ["2000-01-01","20322051544","1979.0","8.8017226E7","ABC","45"] 28 | #1 ["2050-11-27","28392898392","1974.0","8.8392926E7","DEF","23"] 29 | Number of lines: 2 30 | 31 | */ 32 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/sample-stdout.js: -------------------------------------------------------------------------------- 1 | 2 | var csv = require('..'); 3 | 4 | var data = [ 5 | [1,2,3,4,5], 6 | [2,4,6,8,10] 7 | ]; 8 | 9 | // Note, in the latest version of Node.js, the pipe 10 | // method detect `process.stdout` and wont try to close it. 11 | 12 | csv() 13 | .from.array(data) 14 | .to.stream(process.stdout, {end: false}); 15 | 16 | /* 17 | 18 | `node samples/sample-stdout.js` 19 | 20 | 1,2,3,4,5 21 | 2,4,6,8,10 22 | 23 | */ 24 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/sample.in: -------------------------------------------------------------------------------- 1 | 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 2 | 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 3 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/sample.js: -------------------------------------------------------------------------------- 1 | 2 | var csv = require('..'); 3 | 4 | csv() 5 | .from.path(__dirname+'/sample.in') 6 | .to.path(__dirname+'/sample.out') 7 | .transform(function(data){ 8 | data.unshift(data.pop()); 9 | return data; 10 | }) 11 | .on('record', function(data, index){ 12 | console.log('#'+index+' '+JSON.stringify(data)); 13 | }) 14 | .on('end', function(count){ 15 | console.log('Number of lines: '+count); 16 | }) 17 | .on('error', function(error){ 18 | console.log(error.message); 19 | }); 20 | 21 | /* 22 | 23 | `node samples/sample.js` 24 | 25 | #0 ["2000-01-01","20322051544","1979.0","8.8017226E7","ABC","45"] 26 | #1 ["2050-11-27","28392898392","1974.0","8.8392926E7","DEF","23"] 27 | Number of lines: 2 28 | 29 | */ 30 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/simple.js: -------------------------------------------------------------------------------- 1 | 2 | csv = require('..'); 3 | 4 | // Parse a CSV text to an array 5 | csv() 6 | .from.string( '"1","2","3","4"\n"a","b","c","d"' ) 7 | .to.array( function(rows){ 8 | console.log(rows); 9 | // Stringify array to a CSV text 10 | csv() 11 | .from.array( rows ) 12 | .to.string( function(text){ 13 | console.log(text); 14 | } ); 15 | } ); 16 | 17 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/string.js: -------------------------------------------------------------------------------- 1 | 2 | var csv = require('..'); 3 | 4 | csv() 5 | .from( '"1","2","3","4"\n"a","b","c","d"' ) 6 | .to( console.log ) 7 | 8 | /* 9 | 10 | `node samples/string.js` 11 | 12 | 1,2,3,4 13 | a,b,c,d 14 | 15 | */ -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/transform.js: -------------------------------------------------------------------------------- 1 | 2 | var csv = require('..'); 3 | 4 | csv() 5 | .from('82,Preisner,Zbigniew\n94,Gainsbourg,Serge') 6 | .to(console.log) 7 | .transform(function(data,index){ 8 | return (index>0 ? ',' : '') + data[0] + ":" + data[2] + ' ' + data[1]; 9 | }); 10 | 11 | /* 12 | 13 | `node samples/transform.js` 14 | 15 | 82:Zbigniew Preisner,94:Serge Gainsbourg 16 | 17 | */ 18 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/samples/tsv.js: -------------------------------------------------------------------------------- 1 | 2 | csv = require('..'); 3 | 4 | csv() 5 | .from.string( "1 2 3\ra b c", {delimiter: '\t'}) 6 | .to.array( function(data){ 7 | console.log( JSON.stringify( data ) ); 8 | }); 9 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/src/options.coffee: -------------------------------------------------------------------------------- 1 | 2 | ### 3 | Input and output options 4 | ======================== 5 | 6 | The `options` property provide access to the `from` and `to` object used to store options. This 7 | property is for internal usage and could be considered private. It is recommanded to use 8 | the `from.options()` and `to.options()` to access those objects. 9 | 10 | ### 11 | module.exports = -> 12 | 13 | from: 14 | delimiter: ',' 15 | quote: '"' 16 | escape: '"' 17 | columns: null 18 | flags: 'r' 19 | encoding: 'utf8' 20 | trim: false 21 | ltrim: false 22 | rtrim: false 23 | 24 | to: 25 | delimiter: null 26 | quote: null 27 | quoted: false 28 | escape: null 29 | columns: null 30 | header: false 31 | lineBreaks: null 32 | flags: 'w' 33 | encoding: 'utf8' 34 | newColumns: false 35 | end: true 36 | eof: false 37 | 38 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/src/state.coffee: -------------------------------------------------------------------------------- 1 | 2 | module.exports = -> 3 | count: 0 4 | # field: '' 5 | line: [] 6 | # lastC: '' 7 | countWriten: 0 8 | # Are we currently inside the transform callback? If so, 9 | # we shouldn't increment `state.count` which count provided lines 10 | transforming: 0 11 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/src/utils.coffee: -------------------------------------------------------------------------------- 1 | 2 | module.exports = 3 | 4 | # Merge two objects 5 | merge: (obj1, obj2) -> 6 | r = obj1 or {} 7 | for key of obj2 8 | r[key] = obj2[key] 9 | r 10 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/eof.coffee: -------------------------------------------------------------------------------- 1 | 2 | ### 3 | Test CSV - Copyright David Worms (BSD Licensed) 4 | ### 5 | 6 | fs = require 'fs' 7 | should = require 'should' 8 | csv = if process.env.CSV_COV then require '../lib-cov' else require '../src' 9 | 10 | describe 'eof', -> 11 | 12 | it 'should work with `to.string`', (next) -> 13 | string = "a,b,c\n1,2,3" 14 | csv() 15 | .from.string(string) 16 | .to.string (data) -> 17 | data.should.eql "a,b,c\n1,2,3\n" 18 | next() 19 | , eof: true -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/event.coffee: -------------------------------------------------------------------------------- 1 | 2 | ### 3 | Test CSV - Copyright David Worms (BSD Licensed) 4 | ### 5 | 6 | fs = require 'fs' 7 | should = require 'should' 8 | csv = if process.env.CSV_COV then require '../lib-cov' else require '../src' 9 | 10 | describe 'event', -> 11 | 12 | describe 'record', -> 13 | 14 | it 'should call error event if exception is thrown', (next) -> 15 | count = 0 16 | errors = 0 17 | test = csv() 18 | .on 'record', (record, index) -> 19 | throw new Error "Error in record #{index}" if index % 10 is 0 20 | .on 'error', (e) -> 21 | e.message.should.equal 'Error in record 0' 22 | next() 23 | .on 'close', -> 24 | false.should.be.ok 25 | .to.string (result) -> 26 | should.not.be.true false 27 | for i in [0...1000] 28 | test.write ['Test '+i, i, '"'] if test.writable 29 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/from/file.csv: -------------------------------------------------------------------------------- 1 | "1","2","3","4","5" -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/from/file_bom.csv: -------------------------------------------------------------------------------- 1 | "1","2","3","4","5" -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/array_to_stream.out: -------------------------------------------------------------------------------- 1 | 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 2 | 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/encoding_latin1.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/csv/test/fromto/encoding_latin1.csv -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/encoding_latin1.tmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/csv/test/fromto/encoding_latin1.tmp -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/encoding_utf8.csv: -------------------------------------------------------------------------------- 1 | éô,tü ès là 2 | çà va,öù bîén -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/null.out: -------------------------------------------------------------------------------- 1 | ,,8.8017226E7,,45,2000-01-01 2 | ,1974.0,8.8392926E7,,23, -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/sample.in: -------------------------------------------------------------------------------- 1 | 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 2 | 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 3 | -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/sample.out: -------------------------------------------------------------------------------- 1 | 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 2 | 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/fromto/string_to_stream.out: -------------------------------------------------------------------------------- 1 | 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 2 | 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --compilers coffee:coffee-script -------------------------------------------------------------------------------- /experiment/node_modules/csv/test/pipe.coffee: -------------------------------------------------------------------------------- 1 | 2 | ### 3 | Test CSV - Copyright David Worms (BSD Licensed) 4 | ### 5 | 6 | fs = require 'fs' 7 | should = require 'should' 8 | csv = if process.env.CSV_COV then require '../lib-cov' else require '../src' 9 | generator = if process.env.CSV_COV then require '../lib-cov/generator' else require '../src/generator' 10 | 11 | describe 'pipe', -> 12 | 13 | it 'should pipe to a file writable stream', (next) -> 14 | path = "/tmp/large.out" 15 | w = generator(start: true, duration: 1000).pipe csv().to.path path 16 | w.on 'close', -> 17 | fs.unlink path, next -------------------------------------------------------------------------------- /experiment/node_modules/express/.npmignore: -------------------------------------------------------------------------------- 1 | .git* 2 | docs/ 3 | examples/ 4 | support/ 5 | test/ 6 | testing.js 7 | .DS_Store 8 | coverage.html 9 | lib-cov 10 | -------------------------------------------------------------------------------- /experiment/node_modules/express/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.8" 4 | - "0.10" 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2009-2011 TJ Holowaychuk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /experiment/node_modules/express/Makefile: -------------------------------------------------------------------------------- 1 | 2 | MOCHA_OPTS= --check-leaks 3 | REPORTER = dot 4 | 5 | check: test 6 | 7 | test: test-unit test-acceptance 8 | 9 | test-unit: 10 | @NODE_ENV=test ./node_modules/.bin/mocha \ 11 | --reporter $(REPORTER) \ 12 | $(MOCHA_OPTS) 13 | 14 | test-acceptance: 15 | @NODE_ENV=test ./node_modules/.bin/mocha \ 16 | --reporter $(REPORTER) \ 17 | --bail \ 18 | test/acceptance/*.js 19 | 20 | test-cov: lib-cov 21 | @EXPRESS_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html 22 | 23 | lib-cov: 24 | @jscoverage lib lib-cov 25 | 26 | benchmark: 27 | @./support/bench 28 | 29 | clean: 30 | rm -f coverage.html 31 | rm -fr lib-cov 32 | 33 | .PHONY: test test-unit test-acceptance benchmark clean 34 | -------------------------------------------------------------------------------- /experiment/node_modules/express/client.js: -------------------------------------------------------------------------------- 1 | 2 | var http = require('http'); 3 | 4 | var times = 50; 5 | 6 | while (times--) { 7 | var req = http.request({ 8 | port: 3000 9 | , method: 'POST' 10 | , headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 11 | }); 12 | 13 | req.on('response', function(res){ 14 | console.log(res.statusCode); 15 | }); 16 | 17 | var n = 500000; 18 | while (n--) { 19 | req.write('foo=bar&bar=baz&'); 20 | } 21 | 22 | req.write('foo=bar&bar=baz'); 23 | 24 | req.end(); 25 | } -------------------------------------------------------------------------------- /experiment/node_modules/express/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = process.env.EXPRESS_COV 3 | ? require('./lib-cov/express') 4 | : require('./lib/express'); -------------------------------------------------------------------------------- /experiment/node_modules/express/lib/middleware.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var utils = require('./utils'); 7 | 8 | /** 9 | * Initialization middleware, exposing the 10 | * request and response to eachother, as well 11 | * as defaulting the X-Powered-By header field. 12 | * 13 | * @param {Function} app 14 | * @return {Function} 15 | * @api private 16 | */ 17 | 18 | exports.init = function(app){ 19 | return function expressInit(req, res, next){ 20 | req.app = res.app = app; 21 | if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); 22 | req.res = res; 23 | res.req = req; 24 | req.next = next; 25 | 26 | req.__proto__ = app.request; 27 | res.__proto__ = app.response; 28 | 29 | res.locals = res.locals || utils.locals(res); 30 | 31 | next(); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/buffer-crc32/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/buffer-crc32/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | notifications: 6 | email: 7 | recipients: 8 | - brianloveswords@gmail.com -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/commander/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/commander/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/commander/Makefile: -------------------------------------------------------------------------------- 1 | 2 | TESTS = $(shell find test/test.*.js) 3 | 4 | test: 5 | @./test/run $(TESTS) 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/commander/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/commander'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/.npmignore: -------------------------------------------------------------------------------- 1 | *.markdown 2 | *.md 3 | .git* 4 | Makefile 5 | benchmarks/ 6 | docs/ 7 | examples/ 8 | install.sh 9 | support/ 10 | test/ 11 | .DS_Store 12 | coverage.html 13 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.6" 4 | - "0.8" 5 | - "0.10" -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2010 Sencha Inc. 4 | Copyright (c) 2011 LearnBoost 5 | Copyright (c) 2011 TJ Holowaychuk 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining 8 | a copy of this software and associated documentation files (the 9 | 'Software'), to deal in the Software without restriction, including 10 | without limitation the rights to use, copy, modify, merge, publish, 11 | distribute, sublicense, and/or sell copies of the Software, and to 12 | permit persons to whom the Software is furnished to do so, subject to 13 | the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = process.env.CONNECT_COV 3 | ? require('./lib-cov/connect') 4 | : require('./lib/connect'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - methodOverride 4 | * Copyright(c) 2010 Sencha Inc. 5 | * Copyright(c) 2011 TJ Holowaychuk 6 | * MIT Licensed 7 | */ 8 | 9 | /** 10 | * Method Override: 11 | * 12 | * Provides faux HTTP method support. 13 | * 14 | * Pass an optional `key` to use when checking for 15 | * a method override, othewise defaults to _\_method_. 16 | * The original method is available via `req.originalMethod`. 17 | * 18 | * @param {String} key 19 | * @return {Function} 20 | * @api public 21 | */ 22 | 23 | module.exports = function methodOverride(key){ 24 | key = key || "_method"; 25 | return function methodOverride(req, res, next) { 26 | req.originalMethod = req.originalMethod || req.method; 27 | 28 | // req.body 29 | if (req.body && key in req.body) { 30 | req.method = req.body[key].toUpperCase(); 31 | delete req.body[key]; 32 | // check X-HTTP-Method-Override 33 | } else if (req.headers['x-http-method-override']) { 34 | req.method = req.headers['x-http-method-override'].toUpperCase(); 35 | } 36 | 37 | next(); 38 | }; 39 | }; 40 | 41 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/middleware/query.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Connect - query 3 | * Copyright(c) 2011 TJ Holowaychuk 4 | * Copyright(c) 2011 Sencha Inc. 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Module dependencies. 10 | */ 11 | 12 | var qs = require('qs') 13 | , parse = require('../utils').parseUrl; 14 | 15 | /** 16 | * Query: 17 | * 18 | * Automatically parse the query-string when available, 19 | * populating the `req.query` object. 20 | * 21 | * Examples: 22 | * 23 | * connect() 24 | * .use(connect.query()) 25 | * .use(function(req, res){ 26 | * res.end(JSON.stringify(req.query)); 27 | * }); 28 | * 29 | * The `options` passed are provided to qs.parse function. 30 | * 31 | * @param {Object} options 32 | * @return {Function} 33 | * @api public 34 | */ 35 | 36 | module.exports = function query(options){ 37 | return function query(req, res, next){ 38 | if (!req.query) { 39 | req.query = ~req.url.indexOf('?') 40 | ? qs.parse(parse(req).query, options) 41 | : {}; 42 | } 43 | 44 | next(); 45 | }; 46 | }; 47 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/middleware/responseTime.js: -------------------------------------------------------------------------------- 1 | 2 | /*! 3 | * Connect - responseTime 4 | * Copyright(c) 2011 TJ Holowaychuk 5 | * MIT Licensed 6 | */ 7 | 8 | /** 9 | * Reponse time: 10 | * 11 | * Adds the `X-Response-Time` header displaying the response 12 | * duration in milliseconds. 13 | * 14 | * @return {Function} 15 | * @api public 16 | */ 17 | 18 | module.exports = function responseTime(){ 19 | return function(req, res, next){ 20 | var start = new Date; 21 | 22 | if (res._responseTime) return next(); 23 | res._responseTime = true; 24 | 25 | res.on('header', function(){ 26 | var duration = new Date - start; 27 | res.setHeader('X-Response-Time', duration + 'ms'); 28 | }); 29 | 30 | next(); 31 | }; 32 | }; 33 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {error} 5 | 6 | 7 | 8 |
9 |

{title}

10 |

{statusCode} {error}

11 |
    {stack}
12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/favicon.ico -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_add.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_code.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_error.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_find.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_go.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_green.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_key.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_link.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_red.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_save.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_word.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_word.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/lib/public/icons/page_world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/lib/public/icons/page_world.png -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | notifications: 6 | email: 7 | recipients: 8 | - brianloveswords@gmail.com -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/buffer-crc32/README.md: -------------------------------------------------------------------------------- 1 | # buffer-crc32 2 | 3 | [![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) 4 | 5 | crc32 that works with binary data and fancy character sets, outputs 6 | buffer, signed or unsigned data and has tests. 7 | 8 | Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix 9 | 10 | # install 11 | ``` 12 | npm install buffer-crc32 13 | ``` 14 | 15 | # example 16 | ```js 17 | var crc32 = require('buffer-crc32'); 18 | // works with buffers 19 | var buf = Buffer([[0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) 20 | crc32(buf) // -> 21 | 22 | // has convenience methods for getting signed or unsigned ints 23 | crc32.signed(buf) // -> -1805997238 24 | crc32.unsigned(buf) // -> 2488970058 25 | 26 | // will cast to buffer if given a string, so you can 27 | // directly use foreign characters safely 28 | crc32('自動販売機') // -> 29 | ``` 30 | 31 | # tests 32 | This was tested against the output of zlib's crc32 method. You can run 33 | the tests with`npm test` (requires tap) 34 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/bytes/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/bytes/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.2.0 / 2012-10-28 3 | ================== 4 | 5 | * bytes(200).should.eql('200b') 6 | 7 | 0.1.0 / 2012-07-04 8 | ================== 9 | 10 | * add bytes to string conversion [yields] 11 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/bytes/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --reporter spec \ 5 | --require should 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/bytes/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bytes", 3 | "description": "byte size string parser / serializer", 4 | "keywords": ["bytes", "utility"], 5 | "version": "0.1.0", 6 | "scripts": ["index.js"] 7 | } 8 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/bytes/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Parse byte `size` string. 4 | * 5 | * @param {String} size 6 | * @return {Number} 7 | * @api public 8 | */ 9 | 10 | module.exports = function(size) { 11 | if ('number' == typeof size) return convert(size); 12 | var parts = size.match(/^(\d+(?:\.\d+)?) *(kb|mb|gb)$/) 13 | , n = parseFloat(parts[1]) 14 | , type = parts[2]; 15 | 16 | var map = { 17 | kb: 1 << 10 18 | , mb: 1 << 20 19 | , gb: 1 << 30 20 | }; 21 | 22 | return map[type] * n; 23 | }; 24 | 25 | /** 26 | * convert bytes into string. 27 | * 28 | * @param {Number} b - bytes to convert 29 | * @return {String} 30 | * @api public 31 | */ 32 | 33 | function convert (b) { 34 | var gb = 1 << 30, mb = 1 << 20, kb = 1 << 10; 35 | if (b >= gb) return (Math.round(b / gb * 100) / 100) + 'gb'; 36 | if (b >= mb) return (Math.round(b / mb * 100) / 100) + 'mb'; 37 | if (b >= kb) return (Math.round(b / kb * 100) / 100) + 'kb'; 38 | return b + 'b'; 39 | } 40 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/.npmignore: -------------------------------------------------------------------------------- 1 | /test/tmp/ 2 | *.upload 3 | *.un~ 4 | *.http 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | test: 4 | @./test/run.js 5 | 6 | build: npm test 7 | 8 | npm: 9 | npm install . 10 | 11 | clean: 12 | rm test/tmp/* 13 | 14 | .PHONY: test clean build 15 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/TODO: -------------------------------------------------------------------------------- 1 | - Better bufferMaxSize handling approach 2 | - Add tests for JSON parser pull request and merge it 3 | - Implement QuerystringParser the same way as MultipartParser 4 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/formidable'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js: -------------------------------------------------------------------------------- 1 | var IncomingForm = require('./incoming_form').IncomingForm; 2 | IncomingForm.IncomingForm = IncomingForm; 3 | module.exports = IncomingForm; 4 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js: -------------------------------------------------------------------------------- 1 | if (global.GENTLY) require = GENTLY.hijack(require); 2 | 3 | // This is a buffering parser, not quite as nice as the multipart one. 4 | // If I find time I'll rewrite this to be fully streaming as well 5 | var querystring = require('querystring'); 6 | 7 | function QuerystringParser() { 8 | this.buffer = ''; 9 | }; 10 | exports.QuerystringParser = QuerystringParser; 11 | 12 | QuerystringParser.prototype.write = function(buffer) { 13 | this.buffer += buffer.toString('ascii'); 14 | return buffer.length; 15 | }; 16 | 17 | QuerystringParser.prototype.end = function() { 18 | var fields = querystring.parse(this.buffer); 19 | for (var field in fields) { 20 | this.onField(field, fields[field]); 21 | } 22 | this.buffer = ''; 23 | 24 | this.onEnd(); 25 | }; -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js: -------------------------------------------------------------------------------- 1 | // Backwards compatibility ... 2 | try { 3 | module.exports = require('util'); 4 | } catch (e) { 5 | module.exports = require('sys'); 6 | } 7 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile: -------------------------------------------------------------------------------- 1 | test: 2 | @find test/simple/test-*.js | xargs -n 1 -t node 3 | 4 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js: -------------------------------------------------------------------------------- 1 | require('../test/common'); 2 | function Dog() {} 3 | 4 | Dog.prototype.seeCat = function() { 5 | this.bark('whuf, whuf'); 6 | this.run(); 7 | } 8 | 9 | Dog.prototype.bark = function(bark) { 10 | require('sys').puts(bark); 11 | } 12 | 13 | var gently = new (require('gently')) 14 | , assert = require('assert') 15 | , dog = new Dog(); 16 | 17 | gently.expect(dog, 'bark', function(bark) { 18 | assert.equal(bark, 'whuf, whuf'); 19 | }); 20 | gently.expect(dog, 'run'); 21 | 22 | dog.seeCat(); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js: -------------------------------------------------------------------------------- 1 | require('../test/common'); 2 | var gently = new (require('gently')) 3 | , stream = new (require('fs').WriteStream)('my_file.txt'); 4 | 5 | gently.expect(stream, 'emit', function(event) { 6 | assert.equal(event, 'open'); 7 | }); 8 | 9 | gently.expect(stream, 'emit', function(event) { 10 | assert.equal(event, 'drain'); 11 | }); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/gently'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./gently'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gently", 3 | "version": "0.9.2", 4 | "directories": { 5 | "lib": "./lib/gently" 6 | }, 7 | "main": "./lib/gently/index", 8 | "dependencies": {}, 9 | "devDependencies": {}, 10 | "engines": { 11 | "node": "*" 12 | }, 13 | "optionalDependencies": {} 14 | } 15 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | , sys = require('sys'); 3 | 4 | require.paths.unshift(path.dirname(__dirname)+'/lib'); 5 | 6 | global.puts = sys.puts; 7 | global.p = function() {sys.error(sys.inspect.apply(null, arguments))};; 8 | global.assert = require('assert'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js: -------------------------------------------------------------------------------- 1 | var mysql = require('..'); 2 | var path = require('path'); 3 | 4 | var root = path.join(__dirname, '../'); 5 | exports.dir = { 6 | root : root, 7 | lib : root + '/lib', 8 | fixture : root + '/test/fixture', 9 | tmp : root + '/test/tmp', 10 | }; 11 | 12 | exports.port = 13532; 13 | 14 | exports.formidable = require('..'); 15 | exports.assert = require('assert'); 16 | 17 | exports.require = function(lib) { 18 | return require(exports.dir.lib + '/' + lib); 19 | }; 20 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt: -------------------------------------------------------------------------------- 1 | I am a text file with a funky name! 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt: -------------------------------------------------------------------------------- 1 | I am a plain text file 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md: -------------------------------------------------------------------------------- 1 | * Opera does not allow submitting this file, it shows a warning to the 2 | user that the file could not be found instead. Tested in 9.8, 11.51 on OSX. 3 | Reported to Opera on 08.09.2011 (tracking email DSK-346009@bugs.opera.com). 4 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js: -------------------------------------------------------------------------------- 1 | module.exports['generic.http'] = [ 2 | {type: 'file', name: 'upload', filename: '', fixture: 'plain.txt'}, 3 | ]; 4 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js: -------------------------------------------------------------------------------- 1 | var properFilename = 'funkyfilename.txt'; 2 | 3 | function expect(filename) { 4 | return [ 5 | {type: 'field', name: 'title', value: 'Weird filename'}, 6 | {type: 'file', name: 'upload', filename: filename, fixture: properFilename}, 7 | ]; 8 | }; 9 | 10 | var webkit = " ? % * | \" < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; 11 | var ffOrIe = " ? % * | \" < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; 12 | 13 | module.exports = { 14 | 'osx-chrome-13.http' : expect(webkit), 15 | 'osx-firefox-3.6.http' : expect(ffOrIe), 16 | 'osx-safari-5.http' : expect(webkit), 17 | 'xp-chrome-12.http' : expect(webkit), 18 | 'xp-ie-7.http' : expect(ffOrIe), 19 | 'xp-ie-8.http' : expect(ffOrIe), 20 | 'xp-safari-5.http' : expect(webkit), 21 | }; 22 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js: -------------------------------------------------------------------------------- 1 | var path = require('path'), 2 | fs = require('fs'); 3 | 4 | try { 5 | global.Gently = require('gently'); 6 | } catch (e) { 7 | throw new Error('this test suite requires node-gently'); 8 | } 9 | 10 | exports.lib = path.join(__dirname, '../../lib'); 11 | 12 | global.GENTLY = new Gently(); 13 | 14 | global.assert = require('assert'); 15 | global.TEST_PORT = 13532; 16 | global.TEST_FIXTURES = path.join(__dirname, '../fixture'); 17 | global.TEST_TMP = path.join(__dirname, '../tmp'); 18 | 19 | // Stupid new feature in node that complains about gently attaching too many 20 | // listeners to process 'exit'. This is a workaround until I can think of a 21 | // better way to deal with this. 22 | if (process.setMaxListeners) { 23 | process.setMaxListeners(10000); 24 | } 25 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('urun')(__dirname) 3 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/pause/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/pause/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.0.1 / 2010-01-03 3 | ================== 4 | 5 | * Initial release 6 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/pause/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter spec 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/pause/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = function(obj){ 3 | var onData 4 | , onEnd 5 | , events = []; 6 | 7 | // buffer data 8 | obj.on('data', onData = function(data, encoding){ 9 | events.push(['data', data, encoding]); 10 | }); 11 | 12 | // buffer end 13 | obj.on('end', onEnd = function(data, encoding){ 14 | events.push(['end', data, encoding]); 15 | }); 16 | 17 | return { 18 | end: function(){ 19 | obj.removeListener('data', onData); 20 | obj.removeListener('end', onEnd); 21 | }, 22 | resume: function(){ 23 | this.end(); 24 | for (var i = 0, len = events.length; i < len; ++i) { 25 | obj.emit.apply(obj, events[i]); 26 | } 27 | } 28 | }; 29 | }; -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "support/expresso"] 2 | path = support/expresso 3 | url = git://github.com/visionmedia/expresso.git 4 | [submodule "support/should"] 5 | path = support/should 6 | url = git://github.com/visionmedia/should.js.git 7 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.4 -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test/browser/qs.js: querystring.js 3 | component build package.json test/browser/qs 4 | 5 | querystring.js: lib/head.js lib/querystring.js lib/tail.js 6 | cat $^ > $@ 7 | 8 | test: 9 | @./node_modules/.bin/mocha \ 10 | --ui bdd 11 | 12 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/benchmark.js: -------------------------------------------------------------------------------- 1 | 2 | var qs = require('./'); 3 | 4 | var times = 100000 5 | , start = new Date 6 | , n = times; 7 | 8 | console.log('times: %d', times); 9 | 10 | while (n--) qs.parse('foo=bar'); 11 | console.log('simple: %dms', new Date - start); 12 | 13 | var start = new Date 14 | , n = times; 15 | 16 | while (n--) qs.parse('user[name][first]=tj&user[name][last]=holowaychuk'); 17 | console.log('nested: %dms', new Date - start); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "querystring", 3 | "description": "Querystring parser / stringifier with nesting support", 4 | "keywords": ["querystring", "query", "parser"], 5 | "main": "lib/querystring.js" 6 | } -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/querystring'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/lib/head.js: -------------------------------------------------------------------------------- 1 | ;(function(){ 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/lib/tail.js: -------------------------------------------------------------------------------- 1 | })(); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/test/browser/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Mocha 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/node_modules/qs/test/browser/qs.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/express/node_modules/connect/node_modules/qs/test/browser/qs.css -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/connect/test.js: -------------------------------------------------------------------------------- 1 | 2 | var connect = require('./'); 3 | var app = connect(); 4 | 5 | app.use(connect.logger('dev')); 6 | app.use(connect.bodyParser()); 7 | 8 | app.use(function(req, res, next){ 9 | if (req.checkContinue) { 10 | res.writeContinue(); 11 | } 12 | res.end('hello'); 13 | }); 14 | 15 | var server = app.listen(3000); 16 | 17 | server.on('checkContinue', function(req, res){ 18 | req.checkContinue = true; 19 | app(req, res); 20 | }); 21 | 22 | 23 | // var http = require('http'); 24 | 25 | // var app = http.createServer(function(req, res){ 26 | // console.log(req.headers); 27 | // }); 28 | 29 | // app.on('checkContinue', function(req, res){ 30 | // if ('application/json' == req.headers['content-type']) { 31 | // res.writeContinue(); 32 | // console.log('ok'); 33 | // res.end('thanks') 34 | // } else { 35 | // res.writeHead(400); 36 | // res.end('bad request, json only'); 37 | // } 38 | // }); 39 | 40 | // app.listen(3000); 41 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie-signature/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie-signature/History.md: -------------------------------------------------------------------------------- 1 | 2 | 1.0.1 / 2013-04-15 3 | ================== 4 | 5 | * Revert "Changed underlying HMAC algo. to sha512." 6 | * Revert "Fix for timing attacks on MAC verification." 7 | 8 | 0.0.1 / 2010-01-03 9 | ================== 10 | 11 | * Initial release 12 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie-signature/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter spec 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie-signature/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var crypto = require('crypto'); 7 | 8 | /** 9 | * Sign the given `val` with `secret`. 10 | * 11 | * @param {String} val 12 | * @param {String} secret 13 | * @return {String} 14 | * @api private 15 | */ 16 | 17 | exports.sign = function(val, secret){ 18 | if ('string' != typeof val) throw new TypeError('cookie required'); 19 | if ('string' != typeof secret) throw new TypeError('secret required'); 20 | return val + '.' + crypto 21 | .createHmac('sha256', secret) 22 | .update(val) 23 | .digest('base64') 24 | .replace(/\=+$/, ''); 25 | }; 26 | 27 | /** 28 | * Unsign and decode the given `val` with `secret`, 29 | * returning `false` if the signature is invalid. 30 | * 31 | * @param {String} val 32 | * @param {String} secret 33 | * @return {String|Boolean} 34 | * @api private 35 | */ 36 | 37 | exports.unsign = function(val, secret){ 38 | if ('string' != typeof val) throw new TypeError('cookie required'); 39 | if ('string' != typeof secret) throw new TypeError('secret required'); 40 | var str = val.slice(0, val.lastIndexOf('.')); 41 | return exports.sign(str, secret) == val ? str : false; 42 | }; 43 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --ui qunit 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/cookie/test/parse.js: -------------------------------------------------------------------------------- 1 | 2 | var assert = require('assert'); 3 | 4 | var cookie = require('..'); 5 | 6 | suite('parse'); 7 | 8 | test('basic', function() { 9 | assert.deepEqual({ foo: 'bar' }, cookie.parse('foo=bar')); 10 | assert.deepEqual({ foo: '123' }, cookie.parse('foo=123')); 11 | }); 12 | 13 | test('ignore spaces', function() { 14 | assert.deepEqual({ FOO: 'bar', baz: 'raz' }, 15 | cookie.parse('FOO = bar; baz = raz')); 16 | }); 17 | 18 | test('escaping', function() { 19 | assert.deepEqual({ foo: 'bar=123456789&name=Magic+Mouse' }, 20 | cookie.parse('foo="bar=123456789&name=Magic+Mouse"')); 21 | 22 | assert.deepEqual({ email: ' ",;/' }, 23 | cookie.parse('email=%20%22%2c%3b%2f')); 24 | }); 25 | 26 | test('ignore escaping error and return original value', function() { 27 | assert.deepEqual({ foo: '%1', bar: 'bar' }, cookie.parse('foo=%1;bar=bar')); 28 | }); 29 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/debug/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/debug/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "debug", 3 | "repo": "visionmedia/debug", 4 | "description": "small debugging utility", 5 | "version": "0.7.2", 6 | "keywords": ["debug", "log", "debugger"], 7 | "scripts": ["index.js", "debug.js"], 8 | "dependencies": {} 9 | } 10 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/debug/example/app.js: -------------------------------------------------------------------------------- 1 | 2 | var debug = require('../')('http') 3 | , http = require('http') 4 | , name = 'My App'; 5 | 6 | // fake app 7 | 8 | debug('booting %s', name); 9 | 10 | http.createServer(function(req, res){ 11 | debug(req.method + ' ' + req.url); 12 | res.end('hello\n'); 13 | }).listen(3000, function(){ 14 | debug('listening'); 15 | }); 16 | 17 | // fake worker of some kind 18 | 19 | require('./worker'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/debug/example/browser.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | debug() 4 | 5 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/debug/example/wildcards.js: -------------------------------------------------------------------------------- 1 | 2 | var debug = { 3 | foo: require('../')('test:foo'), 4 | bar: require('../')('test:bar'), 5 | baz: require('../')('test:baz') 6 | }; 7 | 8 | debug.foo('foo') 9 | debug.bar('bar') 10 | debug.baz('baz') -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/debug/example/worker.js: -------------------------------------------------------------------------------- 1 | 2 | // DEBUG=* node example/worker 3 | // DEBUG=worker:* node example/worker 4 | // DEBUG=worker:a node example/worker 5 | // DEBUG=worker:b node example/worker 6 | 7 | var a = require('../')('worker:a') 8 | , b = require('../')('worker:b'); 9 | 10 | function work() { 11 | a('doing lots of uninteresting work'); 12 | setTimeout(work, Math.random() * 1000); 13 | } 14 | 15 | work(); 16 | 17 | function workb() { 18 | b('doing some work'); 19 | setTimeout(workb, Math.random() * 2000); 20 | } 21 | 22 | workb(); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/debug/index.js: -------------------------------------------------------------------------------- 1 | if ('undefined' == typeof window) { 2 | module.exports = require('./lib/debug'); 3 | } else { 4 | module.exports = require('./debug'); 5 | } 6 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/fresh/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/fresh/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --reporter spec \ 5 | --require should 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/fresh/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # node-fresh 3 | 4 | HTTP response freshness testing 5 | 6 | ## fresh(req, res) 7 | 8 | Check freshness of `req` and `res` headers. 9 | 10 | When the cache is "fresh" __true__ is returned, 11 | otherwise __false__ is returned to indicate that 12 | the cache is now stale. 13 | 14 | ## Example: 15 | 16 | ```js 17 | var req = { 'if-none-match': 'tobi' }; 18 | var res = { 'etag': 'luna' }; 19 | fresh(req, res); 20 | // => false 21 | 22 | var req = { 'if-none-match': 'tobi' }; 23 | var res = { 'etag': 'tobi' }; 24 | fresh(req, res); 25 | // => true 26 | ``` 27 | 28 | ## Installation 29 | 30 | ``` 31 | $ npm install fresh 32 | ``` -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/fresh/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fresh", 3 | "author": { 4 | "name": "TJ Holowaychuk", 5 | "email": "tj@vision-media.ca", 6 | "url": "http://tjholowaychuk.com" 7 | }, 8 | "description": "HTTP response freshness testing", 9 | "version": "0.1.0", 10 | "main": "index.js", 11 | "dependencies": {}, 12 | "devDependencies": { 13 | "mocha": "*", 14 | "should": "*" 15 | }, 16 | "readme": "\n# node-fresh\n\n HTTP response freshness testing\n\n## fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example:\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## Installation\n\n```\n$ npm install fresh\n```", 17 | "readmeFilename": "Readme.md", 18 | "_id": "fresh@0.1.0", 19 | "_from": "fresh@0.1.0" 20 | } 21 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/methods/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = [ 3 | 'get' 4 | , 'post' 5 | , 'put' 6 | , 'head' 7 | , 'delete' 8 | , 'options' 9 | , 'trace' 10 | , 'copy' 11 | , 'lock' 12 | , 'mkcol' 13 | , 'move' 14 | , 'propfind' 15 | , 'proppatch' 16 | , 'unlock' 17 | , 'report' 18 | , 'mkactivity' 19 | , 'checkout' 20 | , 'merge' 21 | , 'm-search' 22 | , 'notify' 23 | , 'subscribe' 24 | , 'unsubscribe' 25 | , 'patch' 26 | ]; -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/methods/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "methods", 3 | "version": "0.0.1", 4 | "description": "HTTP methods that node supports", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "http", 11 | "methods" 12 | ], 13 | "author": { 14 | "name": "TJ Holowaychuk" 15 | }, 16 | "license": "MIT", 17 | "_id": "methods@0.0.1", 18 | "readme": "ERROR: No README.md file found!", 19 | "_from": "methods@0.0.1" 20 | } 21 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | npm-debug.log -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.6 4 | - 0.8 5 | - 0.9 6 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2010 James Halliday (mail@substack.net) 2 | 3 | This project is free software released under the MIT/X11 license: 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/examples/pow.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('mkdirp'); 2 | 3 | mkdirp('/tmp/foo/bar/baz', function (err) { 4 | if (err) console.error(err) 5 | else console.log('pow!') 6 | }); 7 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/chmod.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../').mkdirp; 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | var ps = [ '', 'tmp' ]; 7 | 8 | for (var i = 0; i < 25; i++) { 9 | var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | ps.push(dir); 11 | } 12 | 13 | var file = ps.join('/'); 14 | 15 | test('chmod-pre', function (t) { 16 | var mode = 0744 17 | mkdirp(file, mode, function (er) { 18 | t.ifError(er, 'should not error'); 19 | fs.stat(file, function (er, stat) { 20 | t.ifError(er, 'should exist'); 21 | t.ok(stat && stat.isDirectory(), 'should be directory'); 22 | t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); 23 | t.end(); 24 | }); 25 | }); 26 | }); 27 | 28 | test('chmod', function (t) { 29 | var mode = 0755 30 | mkdirp(file, mode, function (er) { 31 | t.ifError(er, 'should not error'); 32 | fs.stat(file, function (er, stat) { 33 | t.ifError(er, 'should exist'); 34 | t.ok(stat && stat.isDirectory(), 'should be directory'); 35 | t.end(); 36 | }); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/clobber.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../').mkdirp; 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | var ps = [ '', 'tmp' ]; 7 | 8 | for (var i = 0; i < 25; i++) { 9 | var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | ps.push(dir); 11 | } 12 | 13 | var file = ps.join('/'); 14 | 15 | // a file in the way 16 | var itw = ps.slice(0, 3).join('/'); 17 | 18 | 19 | test('clobber-pre', function (t) { 20 | console.error("about to write to "+itw) 21 | fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); 22 | 23 | fs.stat(itw, function (er, stat) { 24 | t.ifError(er) 25 | t.ok(stat && stat.isFile(), 'should be file') 26 | t.end() 27 | }) 28 | }) 29 | 30 | test('clobber', function (t) { 31 | t.plan(2); 32 | mkdirp(file, 0755, function (err) { 33 | t.ok(err); 34 | t.equal(err.code, 'ENOTDIR'); 35 | t.end(); 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/mkdirp.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('woo', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | mkdirp(file, 0755, function (err) { 15 | if (err) t.fail(err); 16 | else path.exists(file, function (ex) { 17 | if (!ex) t.fail('file not created') 18 | else fs.stat(file, function (err, stat) { 19 | if (err) t.fail(err) 20 | else { 21 | t.equal(stat.mode & 0777, 0755); 22 | t.ok(stat.isDirectory(), 'target not a directory'); 23 | t.end(); 24 | } 25 | }) 26 | }) 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/perm.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('async perm', function (t) { 7 | t.plan(2); 8 | var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); 9 | 10 | mkdirp(file, 0755, function (err) { 11 | if (err) t.fail(err); 12 | else path.exists(file, function (ex) { 13 | if (!ex) t.fail('file not created') 14 | else fs.stat(file, function (err, stat) { 15 | if (err) t.fail(err) 16 | else { 17 | t.equal(stat.mode & 0777, 0755); 18 | t.ok(stat.isDirectory(), 'target not a directory'); 19 | t.end(); 20 | } 21 | }) 22 | }) 23 | }); 24 | }); 25 | 26 | test('async root perm', function (t) { 27 | mkdirp('/tmp', 0755, function (err) { 28 | if (err) t.fail(err); 29 | t.end(); 30 | }); 31 | t.end(); 32 | }); 33 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/rel.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('rel', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var cwd = process.cwd(); 13 | process.chdir('/tmp'); 14 | 15 | var file = [x,y,z].join('/'); 16 | 17 | mkdirp(file, 0755, function (err) { 18 | if (err) t.fail(err); 19 | else path.exists(file, function (ex) { 20 | if (!ex) t.fail('file not created') 21 | else fs.stat(file, function (err, stat) { 22 | if (err) t.fail(err) 23 | else { 24 | process.chdir(cwd); 25 | t.equal(stat.mode & 0777, 0755); 26 | t.ok(stat.isDirectory(), 'target not a directory'); 27 | t.end(); 28 | } 29 | }) 30 | }) 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/return.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('return value', function (t) { 7 | t.plan(4); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | // should return the first dir created. 15 | // By this point, it would be profoundly surprising if /tmp didn't 16 | // already exist, since every other test makes things in there. 17 | mkdirp(file, function (err, made) { 18 | t.ifError(err); 19 | t.equal(made, '/tmp/' + x); 20 | mkdirp(file, function (err, made) { 21 | t.ifError(err); 22 | t.equal(made, null); 23 | }); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/return_sync.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('return value', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | // should return the first dir created. 15 | // By this point, it would be profoundly surprising if /tmp didn't 16 | // already exist, since every other test makes things in there. 17 | // Note that this will throw on failure, which will fail the test. 18 | var made = mkdirp.sync(file); 19 | t.equal(made, '/tmp/' + x); 20 | 21 | // making the same file again should have no effect. 22 | made = mkdirp.sync(file); 23 | t.equal(made, null); 24 | }); 25 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/root.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('root', function (t) { 7 | // '/' on unix, 'c:/' on windows. 8 | var file = path.resolve('/'); 9 | 10 | mkdirp(file, 0755, function (err) { 11 | if (err) throw err 12 | fs.stat(file, function (er, stat) { 13 | if (er) throw er 14 | t.ok(stat.isDirectory(), 'target is a directory'); 15 | t.end(); 16 | }) 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/sync.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('sync', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | try { 15 | mkdirp.sync(file, 0755); 16 | } catch (err) { 17 | t.fail(err); 18 | return t.end(); 19 | } 20 | 21 | path.exists(file, function (ex) { 22 | if (!ex) t.fail('file not created') 23 | else fs.stat(file, function (err, stat) { 24 | if (err) t.fail(err) 25 | else { 26 | t.equal(stat.mode & 0777, 0755); 27 | t.ok(stat.isDirectory(), 'target not a directory'); 28 | t.end(); 29 | } 30 | }); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/umask.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('implicit mode from umask', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | mkdirp(file, function (err) { 15 | if (err) t.fail(err); 16 | else path.exists(file, function (ex) { 17 | if (!ex) t.fail('file not created') 18 | else fs.stat(file, function (err, stat) { 19 | if (err) t.fail(err) 20 | else { 21 | t.equal(stat.mode & 0777, 0777 & (~process.umask())); 22 | t.ok(stat.isDirectory(), 'target not a directory'); 23 | t.end(); 24 | } 25 | }) 26 | }) 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/mkdirp/test/umask_sync.js: -------------------------------------------------------------------------------- 1 | var mkdirp = require('../'); 2 | var path = require('path'); 3 | var fs = require('fs'); 4 | var test = require('tap').test; 5 | 6 | test('umask sync modes', function (t) { 7 | t.plan(2); 8 | var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 9 | var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 10 | var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); 11 | 12 | var file = '/tmp/' + [x,y,z].join('/'); 13 | 14 | try { 15 | mkdirp.sync(file); 16 | } catch (err) { 17 | t.fail(err); 18 | return t.end(); 19 | } 20 | 21 | path.exists(file, function (ex) { 22 | if (!ex) t.fail('file not created') 23 | else fs.stat(file, function (err, stat) { 24 | if (err) t.fail(err) 25 | else { 26 | t.equal(stat.mode & 0777, (0777 & (~process.umask()))); 27 | t.ok(stat.isDirectory(), 'target not a directory'); 28 | t.end(); 29 | } 30 | }); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/range-parser/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/range-parser/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.0.4 / 2012-06-17 3 | ================== 4 | 5 | * changed: ret -1 for unsatisfiable and -2 when invalid 6 | 7 | 0.0.3 / 2012-06-17 8 | ================== 9 | 10 | * fix last-byte-pos default to len - 1 11 | 12 | 0.0.2 / 2012-06-14 13 | ================== 14 | 15 | * add `.type` 16 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/range-parser/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --reporter spec \ 5 | --require should 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/range-parser/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Parse "Range" header `str` relative to the given file `size`. 4 | * 5 | * @param {Number} size 6 | * @param {String} str 7 | * @return {Array} 8 | * @api public 9 | */ 10 | 11 | module.exports = function(size, str){ 12 | var valid = true; 13 | var i = str.indexOf('='); 14 | 15 | if (-1 == i) return -2; 16 | 17 | var arr = str.slice(i + 1).split(',').map(function(range){ 18 | var range = range.split('-') 19 | , start = parseInt(range[0], 10) 20 | , end = parseInt(range[1], 10); 21 | 22 | // -nnn 23 | if (isNaN(start)) { 24 | start = size - end; 25 | end = size - 1; 26 | // nnn- 27 | } else if (isNaN(end)) { 28 | end = size - 1; 29 | } 30 | 31 | // limit last-byte-pos to current length 32 | if (end > size - 1) end = size - 1; 33 | 34 | // invalid 35 | if (isNaN(start) 36 | || isNaN(end) 37 | || start > end 38 | || start < 0) valid = false; 39 | 40 | return { 41 | start: start, 42 | end: end 43 | }; 44 | }); 45 | 46 | arr.type = str.slice(0, i); 47 | 48 | return valid ? arr : -1; 49 | }; -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/send/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/send/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.1.0 / 2012-08-25 3 | ================== 4 | 5 | * add options parameter to send() that is passed to fs.createReadStream() [kanongil] 6 | 7 | 0.0.4 / 2012-08-16 8 | ================== 9 | 10 | * allow custom "Accept-Ranges" definition 11 | 12 | 0.0.3 / 2012-07-16 13 | ================== 14 | 15 | * fix normalization of the root directory. Closes #3 16 | 17 | 0.0.2 / 2012-07-09 18 | ================== 19 | 20 | * add passing of req explicitly for now (YUCK) 21 | 22 | 0.0.1 / 2010-01-03 23 | ================== 24 | 25 | * Initial release 26 | -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/send/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter spec \ 6 | --bail 7 | 8 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/send/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/send'); -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/send/lib/utils.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Return an ETag in the form of `"-"` 4 | * from the given `stat`. 5 | * 6 | * @param {Object} stat 7 | * @return {String} 8 | * @api private 9 | */ 10 | 11 | exports.etag = function(stat) { 12 | return '"' + stat.size + '-' + Number(stat.mtime) + '"'; 13 | }; 14 | 15 | /** 16 | * decodeURIComponent. 17 | * 18 | * Allows V8 to only deoptimize this fn instead of all 19 | * of send(). 20 | * 21 | * @param {String} path 22 | * @api private 23 | */ 24 | 25 | exports.decode = function(path){ 26 | try { 27 | return decodeURIComponent(path); 28 | } catch (err) { 29 | return -1; 30 | } 31 | }; 32 | 33 | /** 34 | * Escape the given string of `html`. 35 | * 36 | * @param {String} html 37 | * @return {String} 38 | * @api private 39 | */ 40 | 41 | exports.escape = function(html){ 42 | return String(html) 43 | .replace(/&(?!\w+;)/g, '&') 44 | .replace(//g, '>') 46 | .replace(/"/g, '"'); 47 | }; -------------------------------------------------------------------------------- /experiment/node_modules/express/node_modules/send/node_modules/mime/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Benjamin Thomas, Robert Kieffer 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /experiment/node_modules/express/test.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var express = require('./') 7 | , app = express() 8 | 9 | app.get('/:foo?/:bar?', function(req, res){ 10 | console.log(req.params); 11 | }); 12 | 13 | 14 | app.post('/:foo?/:bar?', function(req, res){ 15 | console.log(req.params); 16 | }); 17 | 18 | 19 | app.listen(5555); 20 | console.log('listening on 5555'); 21 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.idea/.name: -------------------------------------------------------------------------------- 1 | json2csv -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.idea/json2csv.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.idea/scopes/scope_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .tm_properties 4 | server.* 5 | published -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.8 -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/History.md: -------------------------------------------------------------------------------- 1 | 2.1.0 / 2013-06-11 2 | ================== 3 | 4 | * quote titles in the first row 5 | 6 | 2.0.0 / 2013-03-04 7 | ================== 8 | 9 | * err in callback function 10 | 11 | 1.3.1 / 2013-02-20 12 | ================== 13 | 14 | * fix stdin encoding 15 | 16 | 1.3.0 / 2013-02-20 17 | ================== 18 | 19 | * support reading from stdin [#9](https://github.com/zeMirco/json2csv/pull/9) 20 | 21 | 1.2.0 / 2013-02-20 22 | ================== 23 | 24 | * support custom field names [#8](https://github.com/zeMirco/json2csv/pull/8) 25 | 26 | 1.1.0 / 2013-01-19 27 | ================== 28 | 29 | * add optional custom delimiter -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/Makefile: -------------------------------------------------------------------------------- 1 | test: 2 | ./node_modules/.bin/mocha --reporter spec 3 | 4 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/async/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Caolan McMahon 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/async/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "async", 3 | "repo": "caolan/async", 4 | "description": "Higher-order functions and common patterns for asynchronous code", 5 | "version": "0.1.23", 6 | "keywords": [], 7 | "dependencies": {}, 8 | "development": {}, 9 | "main": "lib/async.js", 10 | "scripts": [ "lib/async.js" ] 11 | } 12 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/.npmignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | node_modules 3 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/History.md: -------------------------------------------------------------------------------- 1 | 2 | 0.2.0 / 2012-10-21 3 | ================== 4 | 5 | * test: avoid module dep in tests 6 | * fix type bug on integer vertical table value 7 | * handle newlines in vertical and cross tables 8 | * factor out common style setting function 9 | * handle newlines in body cells 10 | * fix render bug when no header provided 11 | * correctly calculate width of cells with newlines 12 | * handles newlines in header cells 13 | * ability to create cross tables 14 | * changing table chars to ones that windows supports 15 | * allow empty arguments to Table constructor 16 | * fix headless tables containing empty first row 17 | * add vertical tables 18 | * remove reference to require.paths 19 | * compact style for dense tables 20 | * fix toString without col widths by cloning array 21 | * [api]: Added abiltity to strip out ANSI color escape codes when calculating cell padding 22 | 23 | 0.0.1 / 2011-01-03 24 | ================== 25 | 26 | Initial release 27 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @NODE_ENV=test ./node_modules/.bin/expresso $(TESTFLAGS) test/*.test.js 4 | 5 | test-cov: 6 | @TESTFLAGS=--cov $(MAKE) test 7 | 8 | .PHONY: test test-cov 9 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/examples/table.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module requirements. 4 | */ 5 | 6 | // this line is only needed if you refuse to use npm 7 | require.paths.unshift(__dirname + '/../support/colors'); 8 | 9 | var Table = require('../lib/cli-table'); 10 | 11 | /** 12 | * Example. 13 | */ 14 | 15 | var table = new Table({ 16 | head: ['First', 'Last', 'Email', 'Twitter'] 17 | , chars: { 18 | 'top': '-' 19 | , 'top-mid': '-' 20 | , 'top-left': '-' 21 | , 'top-right': '-' 22 | , 'bottom': '-' 23 | , 'bottom-mid': '-' 24 | , 'bottom-left': '-' 25 | , 'bottom-right': '-' 26 | , 'left': '|' 27 | , 'left-mid': '|' 28 | , 'mid': '-' 29 | , 'mid-mid': '-' 30 | , 'right': '|' 31 | , 'right-mid': '-' 32 | } 33 | , colWidths: [14, 10, 25, 17] 34 | }); 35 | 36 | table.push( 37 | ['Guillermo', 'Rauch', 'rauchg@gmail.com', 'rauchg'] 38 | ); 39 | 40 | console.log(table.toString()); 41 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/cli-table'); 3 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/node_modules/colors/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010 Marak Squires http://github.com/marak/say.js/ 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/node_modules/colors/ReadMe.md: -------------------------------------------------------------------------------- 1 |

colors.js - get color and style in your node.js console like what

2 | 3 | 4 | 5 | var sys = require('sys'); 6 | var colors = require('./colors'); 7 | 8 | sys.puts('hello'.green); // outputs green text 9 | sys.puts('i like cake and pies'.underline.red) // outputs red underlined text 10 | sys.puts('inverse the color'.inverse); // inverses the color 11 | sys.puts('OMG Rainbows!'.rainbow); // rainbow (ignores spaces) 12 | 13 |

colors and styles!

14 | - bold 15 | - italic 16 | - underline 17 | - inverse 18 | - yellow 19 | - cyan 20 | - white 21 | - magenta 22 | - green 23 | - red 24 | - grey 25 | - blue 26 | 27 | 28 | ### Authors 29 | 30 | #### Alexis Sellier (cloudhead) , Marak Squires , Justin Campbell 31 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/cli-table/node_modules/colors/example.js: -------------------------------------------------------------------------------- 1 | var sys = require('sys'); 2 | var colors = require('./colors'); 3 | 4 | sys.puts('Rainbows are fun!'.rainbow); 5 | sys.puts('So '.italic + 'are'.underline + ' styles! '.bold + 'inverse'.inverse); // styles not widely supported 6 | sys.puts('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/commander/.npmignore: -------------------------------------------------------------------------------- 1 | support 2 | test 3 | examples 4 | *.sock 5 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/commander/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.4 4 | - 0.6 5 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/commander/Makefile: -------------------------------------------------------------------------------- 1 | 2 | TESTS = $(shell find test/test.*.js) 3 | 4 | test: 5 | @./test/run $(TESTS) 6 | 7 | .PHONY: test -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/commander/index.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = require('./lib/commander'); -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/node_modules/commander/node_modules/keypress/test.js: -------------------------------------------------------------------------------- 1 | 2 | var keypress = require('./') 3 | keypress(process.stdin) 4 | 5 | if (process.stdin.setRawMode) 6 | process.stdin.setRawMode(true) 7 | else 8 | require('tty').setRawMode(true) 9 | 10 | process.stdin.on('keypress', function (c, key) { 11 | console.log(0, c, key) 12 | if (key && key.ctrl && key.name == 'c') { 13 | process.stdin.pause() 14 | } 15 | }) 16 | process.stdin.on('mousepress', function (mouse) { 17 | console.log(mouse) 18 | }) 19 | 20 | keypress.enableMouse(process.stdout) 21 | process.on('exit', function () { 22 | //disable mouse on exit, so that the state is back to normal 23 | //for the terminal. 24 | keypress.disableMouse(process.stdout) 25 | }) 26 | 27 | process.stdin.resume() 28 | 29 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/in-quotes.json: -------------------------------------------------------------------------------- 1 | [ 2 | {"a string": "with a description"}, 3 | {"a string": "with a description and \"quotes\""} 4 | ] -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/in.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "carModel" : "Audi", "price" : 10000, "color" : "blue" } 3 | , { "carModel" : "BMW", "price" : 15000, "color" : "red" } 4 | , { "carModel" : "Mercedes", "price" : 20000, "color" : "yellow" } 5 | , { "carModel" : "Porsche", "price" : 30000, "color" : "green" } 6 | ] 7 | -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/out-fieldNames.csv: -------------------------------------------------------------------------------- 1 | "Car Model","Price USD" 2 | "Audi",10000 3 | "BMW",15000 4 | "Mercedes",20000 5 | "Porsche",30000 -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/out-quotes.csv: -------------------------------------------------------------------------------- 1 | "a string" 2 | "with a description" 3 | "with a description and ""quotes""" -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/out-reversed.csv: -------------------------------------------------------------------------------- 1 | "price","carModel" 2 | 10000,"Audi" 3 | 15000,"BMW" 4 | 20000,"Mercedes" 5 | 30000,"Porsche" -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/out-selected.csv: -------------------------------------------------------------------------------- 1 | "carModel","price" 2 | "Audi",10000 3 | "BMW",15000 4 | "Mercedes",20000 5 | "Porsche",30000 -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/out.csv: -------------------------------------------------------------------------------- 1 | "carModel","price","color" 2 | "Audi",10000,"blue" 3 | "BMW",15000,"red" 4 | "Mercedes",20000,"yellow" 5 | "Porsche",30000,"green" -------------------------------------------------------------------------------- /experiment/node_modules/json2csv/test/fixtures/out.tsv: -------------------------------------------------------------------------------- 1 | "carModel" "price" "color" 2 | "Audi" 10000 "blue" 3 | "BMW" 15000 "red" 4 | "Mercedes" 20000 "yellow" 5 | "Porsche" 30000 "green" -------------------------------------------------------------------------------- /experiment/node_modules/redis/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/hiredis_parser.js: -------------------------------------------------------------------------------- 1 | var Parser = require('../lib/parser/hiredis').Parser; 2 | var assert = require('assert'); 3 | 4 | /* 5 | This test makes sure that exceptions thrown inside of "reply" event handlers 6 | are not trapped and mistakenly emitted as parse errors. 7 | */ 8 | (function testExecuteDoesNotCatchReplyCallbackExceptions() { 9 | var parser = new Parser(); 10 | var replies = [{}]; 11 | 12 | parser.reader = { 13 | feed: function() {}, 14 | get: function() { 15 | return replies.shift(); 16 | } 17 | }; 18 | 19 | var emittedError = false; 20 | var caughtException = false; 21 | 22 | parser 23 | .on('error', function() { 24 | emittedError = true; 25 | }) 26 | .on('reply', function() { 27 | throw new Error('bad'); 28 | }); 29 | 30 | try { 31 | parser.execute(); 32 | } catch (err) { 33 | caughtException = true; 34 | } 35 | 36 | assert.equal(caughtException, true); 37 | assert.equal(emittedError, false); 38 | })(); 39 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/re_sub_test.js: -------------------------------------------------------------------------------- 1 | var client = require('../index').createClient() 2 | , client2 = require('../index').createClient() 3 | , assert = require('assert'); 4 | 5 | client.once('subscribe', function (channel, count) { 6 | client.unsubscribe('x'); 7 | client.subscribe('x', function () { 8 | client.quit(); 9 | client2.quit(); 10 | }); 11 | client2.publish('x', 'hi'); 12 | }); 13 | 14 | client.subscribe('x'); 15 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/reconnect_test.js: -------------------------------------------------------------------------------- 1 | var redis = require("../index").createClient(null, null, { 2 | // max_attempts: 4 3 | }); 4 | 5 | redis.on("error", function (err) { 6 | console.log("Redis says: " + err); 7 | }); 8 | 9 | redis.on("ready", function () { 10 | console.log("Redis ready."); 11 | }); 12 | 13 | redis.on("reconnecting", function (arg) { 14 | console.log("Redis reconnecting: " + JSON.stringify(arg)); 15 | }); 16 | redis.on("connect", function () { 17 | console.log("Redis connected."); 18 | }); 19 | 20 | setInterval(function () { 21 | var now = Date.now(); 22 | redis.set("now", now, function (err, res) { 23 | if (err) { 24 | console.log(now + " Redis reply error: " + err); 25 | } else { 26 | console.log(now + " Redis reply: " + res); 27 | } 28 | }); 29 | }, 100); 30 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/codec.js: -------------------------------------------------------------------------------- 1 | var json = { 2 | encode: JSON.stringify, 3 | decode: JSON.parse 4 | }; 5 | 6 | var MsgPack = require('node-msgpack'); 7 | msgpack = { 8 | encode: MsgPack.pack, 9 | decode: function(str) { return MsgPack.unpack(new Buffer(str)); } 10 | }; 11 | 12 | bison = require('bison'); 13 | 14 | module.exports = json; 15 | //module.exports = msgpack; 16 | //module.exports = bison; 17 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/pubsub/pub.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var freemem = require('os').freemem; 4 | var profiler = require('v8-profiler'); 5 | var codec = require('../codec'); 6 | 7 | var sent = 0; 8 | 9 | var pub = require('redis').createClient(null, null, { 10 | //command_queue_high_water: 5, 11 | //command_queue_low_water: 1 12 | }) 13 | .on('ready', function() { 14 | this.emit('drain'); 15 | }) 16 | .on('drain', function() { 17 | process.nextTick(exec); 18 | }); 19 | 20 | var payload = '1'; for (var i = 0; i < 12; ++i) payload += payload; 21 | console.log('Message payload length', payload.length); 22 | 23 | function exec() { 24 | pub.publish('timeline', codec.encode({ foo: payload })); 25 | ++sent; 26 | if (!pub.should_buffer) { 27 | process.nextTick(exec); 28 | } 29 | } 30 | 31 | profiler.takeSnapshot('s_0'); 32 | 33 | exec(); 34 | 35 | setInterval(function() { 36 | profiler.takeSnapshot('s_' + sent); 37 | console.error('sent', sent, 'free', freemem(), 'cmdqlen', pub.command_queue.length, 'offqlen', pub.offline_queue.length); 38 | }, 2000); 39 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/pubsub/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | node server.js & 3 | node server.js & 4 | node server.js & 5 | node server.js & 6 | node server.js & 7 | node server.js & 8 | node server.js & 9 | node server.js & 10 | node --debug pub.js 11 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/pubsub/server.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var freemem = require('os').freemem; 4 | var codec = require('../codec'); 5 | 6 | var id = Math.random(); 7 | var recv = 0; 8 | 9 | var sub = require('redis').createClient() 10 | .on('ready', function() { 11 | this.subscribe('timeline'); 12 | }) 13 | .on('message', function(channel, message) { 14 | var self = this; 15 | if (message) { 16 | message = codec.decode(message); 17 | ++recv; 18 | } 19 | }); 20 | 21 | setInterval(function() { 22 | console.error('id', id, 'received', recv, 'free', freemem()); 23 | }, 2000); 24 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/rpushblpop/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | node server.js & 3 | #node server.js & 4 | #node server.js & 5 | #node server.js & 6 | node --debug pub.js 7 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/rpushblpop/server.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var freemem = require('os').freemem; 4 | var codec = require('../codec'); 5 | 6 | var id = Math.random(); 7 | var recv = 0; 8 | 9 | var cmd = require('redis').createClient(); 10 | var sub = require('redis').createClient() 11 | .on('ready', function() { 12 | this.emit('timeline'); 13 | }) 14 | .on('timeline', function() { 15 | var self = this; 16 | this.blpop('timeline', 0, function(err, result) { 17 | var message = result[1]; 18 | if (message) { 19 | message = codec.decode(message); 20 | ++recv; 21 | } 22 | self.emit('timeline'); 23 | }); 24 | }); 25 | 26 | setInterval(function() { 27 | cmd.llen('timeline', function(err, result) { 28 | console.error('id', id, 'received', recv, 'free', freemem(), 'llen', result); 29 | }); 30 | }, 2000); 31 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/speed/00: -------------------------------------------------------------------------------- 1 | # size JSON msgpack bison 2 | 26602 2151.0170848180414 3 | 25542 ? 2842.589272665782 4 | 24835 ? ? 7280.4538397469805 5 | 6104 6985.234528557929 6 | 5045 ? 7217.461392841478 7 | 4341 ? ? 14261.406335354604 8 | 4180 15864.633685636572 9 | 4143 ? 12954.806235781925 10 | 4141 ? ? 44650.70733912719 11 | 75 114227.07313350472 12 | 40 ? 30162.440062810834 13 | 39 ? ? 119815.66013519121 14 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/speed/plot: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | gnuplot >size-rate.jpg << _EOF_ 4 | 5 | set terminal png nocrop enhanced font verdana 12 size 640,480 6 | set logscale x 7 | set logscale y 8 | set grid 9 | set xlabel 'Serialized object size, octets' 10 | set ylabel 'decode(encode(obj)) rate, 1/sec' 11 | plot '00' using 1:2 title 'json' smooth bezier, '00' using 1:3 title 'msgpack' smooth bezier, '00' using 1:4 title 'bison' smooth bezier 12 | 13 | _EOF_ 14 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/stress/speed/size-rate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/redis/benches/stress/speed/size-rate.png -------------------------------------------------------------------------------- /experiment/node_modules/redis/benches/sub_quit_test.js: -------------------------------------------------------------------------------- 1 | var client = require("redis").createClient(), 2 | client2 = require("redis").createClient(); 3 | 4 | client.subscribe("something"); 5 | client.on("subscribe", function (channel, count) { 6 | console.log("Got sub: " + channel); 7 | client.unsubscribe("something"); 8 | }); 9 | 10 | client.on("unsubscribe", function (channel, count) { 11 | console.log("Got unsub: " + channel + ", quitting"); 12 | client.quit(); 13 | }); 14 | 15 | // exercise unsub before sub 16 | client2.unsubscribe("something"); 17 | client2.subscribe("another thing"); 18 | client2.quit(); 19 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/auth.js: -------------------------------------------------------------------------------- 1 | var redis = require("redis"), 2 | client = redis.createClient(); 3 | 4 | // This command is magical. Client stashes the password and will issue on every connect. 5 | client.auth("somepass"); 6 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/backpressure_drain.js: -------------------------------------------------------------------------------- 1 | var redis = require("../index"), 2 | client = redis.createClient(null, null, { 3 | command_queue_high_water: 5, 4 | command_queue_low_water: 1 5 | }), 6 | remaining_ops = 100000, paused = false; 7 | 8 | function op() { 9 | if (remaining_ops <= 0) { 10 | console.error("Finished."); 11 | process.exit(0); 12 | } 13 | 14 | remaining_ops--; 15 | if (client.hset("test hash", "val " + remaining_ops, remaining_ops) === false) { 16 | console.log("Pausing at " + remaining_ops); 17 | paused = true; 18 | } else { 19 | process.nextTick(op); 20 | } 21 | } 22 | 23 | client.on("drain", function () { 24 | if (paused) { 25 | console.log("Resuming at " + remaining_ops); 26 | paused = false; 27 | process.nextTick(op); 28 | } else { 29 | console.log("Got drain while not paused at " + remaining_ops); 30 | } 31 | }); 32 | 33 | op(); 34 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/eval.js: -------------------------------------------------------------------------------- 1 | var redis = require("../index"), 2 | client = redis.createClient(); 3 | 4 | redis.debug_mode = true; 5 | 6 | client.eval("return 100.5", 0, function (err, res) { 7 | console.dir(err); 8 | console.dir(res); 9 | }); 10 | 11 | client.eval([ "return 100.5", 0 ], function (err, res) { 12 | console.dir(err); 13 | console.dir(res); 14 | }); 15 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/extend.js: -------------------------------------------------------------------------------- 1 | var redis = require("redis"), 2 | client = redis.createClient(); 3 | 4 | // Extend the RedisClient prototype to add a custom method 5 | // This one converts the results from "INFO" into a JavaScript Object 6 | 7 | redis.RedisClient.prototype.parse_info = function (callback) { 8 | this.info(function (err, res) { 9 | var lines = res.toString().split("\r\n").sort(); 10 | var obj = {}; 11 | lines.forEach(function (line) { 12 | var parts = line.split(':'); 13 | if (parts[1]) { 14 | obj[parts[0]] = parts[1]; 15 | } 16 | }); 17 | callback(obj) 18 | }); 19 | }; 20 | 21 | client.parse_info(function (info) { 22 | console.dir(info); 23 | client.quit(); 24 | }); 25 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/mget.js: -------------------------------------------------------------------------------- 1 | var client = require("redis").createClient(); 2 | 3 | client.mget(["sessions started", "sessions started", "foo"], function (err, res) { 4 | console.dir(res); 5 | }); -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/monitor.js: -------------------------------------------------------------------------------- 1 | var client = require("../index").createClient(), 2 | util = require("util"); 3 | 4 | client.monitor(function (err, res) { 5 | console.log("Entering monitoring mode."); 6 | }); 7 | 8 | client.on("monitor", function (time, args) { 9 | console.log(time + ": " + util.inspect(args)); 10 | }); 11 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/multi2.js: -------------------------------------------------------------------------------- 1 | var redis = require("redis"), 2 | client = redis.createClient(), multi; 3 | 4 | // start a separate command queue for multi 5 | multi = client.multi(); 6 | multi.incr("incr thing", redis.print); 7 | multi.incr("incr other thing", redis.print); 8 | 9 | // runs immediately 10 | client.mset("incr thing", 100, "incr other thing", 1, redis.print); 11 | 12 | // drains multi queue and runs atomically 13 | multi.exec(function (err, replies) { 14 | console.log(replies); // 101, 2 15 | }); 16 | 17 | // you can re-run the same transaction if you like 18 | multi.exec(function (err, replies) { 19 | console.log(replies); // 102, 3 20 | client.quit(); 21 | }); 22 | 23 | client.multi([ 24 | ["mget", "multifoo", "multibar", redis.print], 25 | ["incr", "multifoo"], 26 | ["incr", "multibar"] 27 | ]).exec(function (err, replies) { 28 | console.log(replies.toString()); 29 | }); 30 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/psubscribe.js: -------------------------------------------------------------------------------- 1 | var redis = require("redis"), 2 | client1 = redis.createClient(), 3 | client2 = redis.createClient(), 4 | client3 = redis.createClient(), 5 | client4 = redis.createClient(), 6 | msg_count = 0; 7 | 8 | redis.debug_mode = false; 9 | 10 | client1.on("psubscribe", function (pattern, count) { 11 | console.log("client1 psubscribed to " + pattern + ", " + count + " total subscriptions"); 12 | client2.publish("channeltwo", "Me!"); 13 | client3.publish("channelthree", "Me too!"); 14 | client4.publish("channelfour", "And me too!"); 15 | }); 16 | 17 | client1.on("punsubscribe", function (pattern, count) { 18 | console.log("client1 punsubscribed from " + pattern + ", " + count + " total subscriptions"); 19 | client4.end(); 20 | client3.end(); 21 | client2.end(); 22 | client1.end(); 23 | }); 24 | 25 | client1.on("pmessage", function (pattern, channel, message) { 26 | console.log("("+ pattern +")" + " client1 received message on " + channel + ": " + message); 27 | msg_count += 1; 28 | if (msg_count === 3) { 29 | client1.punsubscribe(); 30 | } 31 | }); 32 | 33 | client1.psubscribe("channel*"); 34 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/simple.js: -------------------------------------------------------------------------------- 1 | var redis = require("redis"), 2 | client = redis.createClient(); 3 | 4 | client.on("error", function (err) { 5 | console.log("error event - " + client.host + ":" + client.port + " - " + err); 6 | }); 7 | 8 | client.set("string key", "string val", redis.print); 9 | client.hset("hash key", "hashtest 1", "some value", redis.print); 10 | client.hset(["hash key", "hashtest 2", "some other value"], redis.print); 11 | client.hkeys("hash key", function (err, replies) { 12 | if (err) { 13 | return console.error("error response - " + err); 14 | } 15 | 16 | console.log(replies.length + " replies:"); 17 | replies.forEach(function (reply, i) { 18 | console.log(" " + i + ": " + reply); 19 | }); 20 | }); 21 | 22 | client.quit(function (err, res) { 23 | console.log("Exiting from quit command."); 24 | }); 25 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/sort.js: -------------------------------------------------------------------------------- 1 | var redis = require("redis"), 2 | client = redis.createClient(); 3 | 4 | client.sadd("mylist", 1); 5 | client.sadd("mylist", 2); 6 | client.sadd("mylist", 3); 7 | 8 | client.set("weight_1", 5); 9 | client.set("weight_2", 500); 10 | client.set("weight_3", 1); 11 | 12 | client.set("object_1", "foo"); 13 | client.set("object_2", "bar"); 14 | client.set("object_3", "qux"); 15 | 16 | client.sort("mylist", "by", "weight_*", "get", "object_*", redis.print); 17 | // Prints Reply: qux,foo,bar -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/subqueries.js: -------------------------------------------------------------------------------- 1 | // Sending commands in response to other commands. 2 | // This example runs "type" against every key in the database 3 | // 4 | var client = require("redis").createClient(); 5 | 6 | client.keys("*", function (err, keys) { 7 | keys.forEach(function (key, pos) { 8 | client.type(key, function (err, keytype) { 9 | console.log(key + " is " + keytype); 10 | if (pos === (keys.length - 1)) { 11 | client.quit(); 12 | } 13 | }); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/subquery.js: -------------------------------------------------------------------------------- 1 | var client = require("redis").createClient(); 2 | 3 | function print_results(obj) { 4 | console.dir(obj); 5 | } 6 | 7 | // build a map of all keys and their types 8 | client.keys("*", function (err, all_keys) { 9 | var key_types = {}; 10 | 11 | all_keys.forEach(function (key, pos) { // use second arg of forEach to get pos 12 | client.type(key, function (err, type) { 13 | key_types[key] = type; 14 | if (pos === all_keys.length - 1) { // callbacks all run in order 15 | print_results(key_types); 16 | } 17 | }); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/examples/unix_socket.js: -------------------------------------------------------------------------------- 1 | var redis = require("redis"), 2 | client = redis.createClient("/tmp/redis.sock"), 3 | profiler = require("v8-profiler"); 4 | 5 | client.on("connect", function () { 6 | console.log("Got Unix socket connection.") 7 | }); 8 | 9 | client.on("error", function (err) { 10 | console.log(err.message); 11 | }); 12 | 13 | client.set("space chars", "space value"); 14 | 15 | setInterval(function () { 16 | client.get("space chars"); 17 | }, 100); 18 | 19 | function done() { 20 | client.info(function (err, reply) { 21 | console.log(reply.toString()); 22 | client.quit(); 23 | }); 24 | } 25 | 26 | setTimeout(function () { 27 | console.log("Taking snapshot."); 28 | var snap = profiler.takeSnapshot(); 29 | }, 5000); 30 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/lib/to_array.js: -------------------------------------------------------------------------------- 1 | function to_array(args) { 2 | var len = args.length, 3 | arr = new Array(len), i; 4 | 5 | for (i = 0; i < len; i += 1) { 6 | arr[i] = args[i]; 7 | } 8 | 9 | return arr; 10 | } 11 | 12 | module.exports = to_array; 13 | -------------------------------------------------------------------------------- /experiment/node_modules/redis/lib/util.js: -------------------------------------------------------------------------------- 1 | // Support for very old versions of node where the module was called "sys". At some point, we should abandon this. 2 | 3 | var util; 4 | 5 | try { 6 | util = require("util"); 7 | } catch (err) { 8 | util = require("sys"); 9 | } 10 | 11 | module.exports = util; 12 | -------------------------------------------------------------------------------- /experiment/node_modules/underscore/.npmignore: -------------------------------------------------------------------------------- 1 | test/ 2 | Rakefile 3 | docs/ 4 | raw/ 5 | index.html 6 | underscore-min.js 7 | -------------------------------------------------------------------------------- /experiment/node_modules/underscore/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.8 4 | notifications: 5 | email: false 6 | -------------------------------------------------------------------------------- /experiment/node_modules/underscore/CNAME: -------------------------------------------------------------------------------- 1 | underscorejs.org 2 | -------------------------------------------------------------------------------- /experiment/node_modules/underscore/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## How to contribute to Underscore.js 2 | 3 | * Before you open a ticket or send a pull request, [search](https://github.com/jashkenas/underscore/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one. 4 | 5 | * Before sending a pull request for a feature, be sure to have [tests](http://underscorejs.org/test/). 6 | 7 | * Use the same coding style as the rest of the [codebase](https://github.com/jashkenas/underscore/blob/master/underscore.js). 8 | 9 | * In your pull request, do not add documentation or re-build the minified `underscore-min.js` file. We'll do those things before cutting a new release. 10 | -------------------------------------------------------------------------------- /experiment/node_modules/underscore/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative 2 | Reporters & Editors 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /experiment/node_modules/underscore/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TuftsVALT/ranking-correlation/bc4c55d24aab8e23d800d067daf45d947794e5d2/experiment/node_modules/underscore/favicon.ico -------------------------------------------------------------------------------- /experiment/node_modules/underscore/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./underscore'); 2 | -------------------------------------------------------------------------------- /experiment/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "experimentr", 3 | "description": "captures input for data visualization studies", 4 | "version": "0.0.1", 5 | "private": true, 6 | "dependencies": { 7 | "express": "3.x", 8 | "csv": "0.2.x", 9 | "json2csv": "2.x", 10 | "redis": "0.8.x", 11 | "underscore": "~1.5.1" 12 | }, 13 | "scripts": { 14 | "start": "node app.js" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "science.js", 3 | "homepage": "https://github.com/jasondavies/science.js", 4 | "version": "1.9.1", 5 | "_release": "1.9.1", 6 | "_resolution": { 7 | "type": "version", 8 | "tag": "v1.9.1", 9 | "commit": "6edf64386277e0230bd870de74016d8dcdae8f80" 10 | }, 11 | "_source": "https://github.com/jasondavies/science.js.git", 12 | "_target": "~1.9.1", 13 | "_originalSource": "https://github.com/jasondavies/science.js.git", 14 | "_direct": true 15 | } -------------------------------------------------------------------------------- /experiment/public/components/science.js/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/README.md: -------------------------------------------------------------------------------- 1 | # Science.js 2 | 3 | [Science.js](http://www.sciencejs.org/) is a JavaScript library for scientific 4 | and statistical computing. 5 | 6 | Currently, there are two modules: 7 | 8 | * `science.stats`, containing various implementations of statistical methods 9 | similar to those provided by [R](http://www.r-project.org/); 10 | * `science.lin`, for linear algebra. 11 | 12 | ## Development 13 | 14 | To help develop Science.js, you need to have [Node.js](http://www.nodejs.org) 15 | and [NPM](http://www.npmjs.org) installed. Once you have done that, run the 16 | following from the root directory of this repository to install the development 17 | dependencies: 18 | 19 | make install 20 | 21 | ## Thanks 22 | 23 | I originally started this in order to add a reusable statistics module to 24 | [D3.js](http://mbostock.github.com/d3/), but now it's grown into a whole new 25 | project of its own! 26 | 27 | The project structure and Makefile is based on that of D3, so a big thank you 28 | goes to [Mike Bostock](http://bost.ocks.org/mike/) for this. 29 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/examples/kde/faithful.json: -------------------------------------------------------------------------------- 1 | [ 2 | 79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47, 83, 52, 62, 84, 52, 79, 51, 47, 78, 69, 74, 83, 55, 76, 78, 79, 73, 77, 66, 80, 74, 52, 48, 80, 59, 90, 80, 58, 84, 58, 73, 83, 64, 53, 3 | 82, 59, 75, 90, 54, 80, 54, 83, 71, 64, 77, 81, 59, 84, 48, 82, 60, 92, 78, 78, 65, 73, 82, 56, 79, 71, 62, 76, 60, 78, 76, 83, 75, 82, 70, 65, 73, 88, 76, 80, 48, 86, 60, 90, 50, 78, 63, 72, 4 | 84, 75, 51, 82, 62, 88, 49, 83, 81, 47, 84, 52, 86, 81, 75, 59, 89, 79, 59, 81, 50, 85, 59, 87, 53, 69, 77, 56, 88, 81, 45, 82, 55, 90, 45, 83, 56, 89, 46, 82, 51, 86, 53, 79, 81, 60, 82, 77, 5 | 76, 59, 80, 49, 96, 53, 77, 77, 65, 81, 71, 70, 81, 93, 53, 89, 45, 86, 58, 78, 66, 76, 63, 88, 52, 93, 49, 57, 77, 68, 81, 81, 73, 50, 85, 74, 55, 77, 83, 83, 51, 78, 84, 46, 83, 55, 81, 57, 6 | 76, 84, 77, 81, 87, 77, 51, 78, 60, 82, 91, 53, 78, 46, 77, 84, 49, 83, 71, 80, 49, 75, 64, 76, 53, 94, 55, 76, 50, 82, 54, 75, 78, 79, 78, 78, 70, 79, 70, 54, 86, 50, 90, 54, 54, 77, 79, 64, 7 | 75, 47, 86, 63, 85, 82, 57, 82, 67, 74, 54, 83, 73, 73, 88, 80, 71, 83, 56, 79, 78, 84, 58, 83, 43, 60, 75, 81, 46, 90, 46, 74 8 | ] 9 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/examples/kde/kde.css: -------------------------------------------------------------------------------- 1 | body { 2 | font: 10px sans-serif; 3 | } 4 | 5 | path { 6 | stroke: #000; 7 | stroke-width: 1.5px; 8 | fill: none; 9 | } 10 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/examples/kde/kde.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Kernel Density Estimation 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/examples/loess/loess.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LOESS 6 | 7 | 8 | 9 | 18 | 19 | 20 |
21 | 22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/index.js: -------------------------------------------------------------------------------- 1 | require("./science.v1"); 2 | 3 | module.exports = science; 4 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/lib/d3/.gitignore: -------------------------------------------------------------------------------- 1 | _site -------------------------------------------------------------------------------- /experiment/public/components/science.js/lib/d3/d3.csv.min.js: -------------------------------------------------------------------------------- 1 | (function(){function a(a){return a.map(b).join(",")}function b(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}d3.csv=function(a,b){d3.text(a,"text/csv",function(a){b(a&&d3.csv.parse(a))})},d3.csv.parse=function(a){var b;return d3.csv.parseRows(a,function(a,c){if(c){var d={},e=-1,f=b.length;while(++e=a.length)return d;if(i)return i=!1,c;var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++ -1e-5) ? x + .5 * x * x : Math.exp(x) - 1; 4 | }; 5 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/core/functor.js: -------------------------------------------------------------------------------- 1 | science.functor = function(v) { 2 | return typeof v === "function" ? v : function() { return v; }; 3 | }; 4 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/core/hypot.js: -------------------------------------------------------------------------------- 1 | // Based on: 2 | // http://www.johndcook.com/blog/2010/06/02/whats-so-hard-about-finding-a-hypotenuse/ 3 | science.hypot = function(x, y) { 4 | x = Math.abs(x); 5 | y = Math.abs(y); 6 | var max, 7 | min; 8 | if (x > y) { max = x; min = y; } 9 | else { max = y; min = x; } 10 | var r = min / max; 11 | return max * Math.sqrt(1 + r * r); 12 | }; 13 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/core/quadratic.js: -------------------------------------------------------------------------------- 1 | science.quadratic = function() { 2 | var complex = false; 3 | 4 | function quadratic(a, b, c) { 5 | var d = b * b - 4 * a * c; 6 | if (d > 0) { 7 | d = Math.sqrt(d) / (2 * a); 8 | return complex 9 | ? [{r: -b - d, i: 0}, {r: -b + d, i: 0}] 10 | : [-b - d, -b + d]; 11 | } else if (d === 0) { 12 | d = -b / (2 * a); 13 | return complex ? [{r: d, i: 0}] : [d]; 14 | } else { 15 | if (complex) { 16 | d = Math.sqrt(-d) / (2 * a); 17 | return [ 18 | {r: -b, i: -d}, 19 | {r: -b, i: d} 20 | ]; 21 | } 22 | return []; 23 | } 24 | } 25 | 26 | quadratic.complex = function(x) { 27 | if (!arguments.length) return complex; 28 | complex = x; 29 | return quadratic; 30 | }; 31 | 32 | return quadratic; 33 | }; 34 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/core/zeroes.js: -------------------------------------------------------------------------------- 1 | // Constructs a multi-dimensional array filled with zeroes. 2 | science.zeroes = function(n) { 3 | var i = -1, 4 | a = []; 5 | if (arguments.length === 1) 6 | while (++i < n) 7 | a[i] = 0; 8 | else 9 | while (++i < n) 10 | a[i] = science.zeroes.apply( 11 | this, Array.prototype.slice.call(arguments, 1)); 12 | return a; 13 | }; 14 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/cross.js: -------------------------------------------------------------------------------- 1 | science.lin.cross = function(a, b) { 2 | // TODO how to handle non-3D vectors? 3 | // TODO handle 7D vectors? 4 | return [ 5 | a[1] * b[2] - a[2] * b[1], 6 | a[2] * b[0] - a[0] * b[2], 7 | a[0] * b[1] - a[1] * b[0] 8 | ]; 9 | }; 10 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/determinant.js: -------------------------------------------------------------------------------- 1 | // 4x4 matrix determinant. 2 | science.lin.determinant = function(matrix) { 3 | var m = matrix[0].concat(matrix[1]).concat(matrix[2]).concat(matrix[3]); 4 | return ( 5 | m[12] * m[9] * m[6] * m[3] - m[8] * m[13] * m[6] * m[3] - 6 | m[12] * m[5] * m[10] * m[3] + m[4] * m[13] * m[10] * m[3] + 7 | m[8] * m[5] * m[14] * m[3] - m[4] * m[9] * m[14] * m[3] - 8 | m[12] * m[9] * m[2] * m[7] + m[8] * m[13] * m[2] * m[7] + 9 | m[12] * m[1] * m[10] * m[7] - m[0] * m[13] * m[10] * m[7] - 10 | m[8] * m[1] * m[14] * m[7] + m[0] * m[9] * m[14] * m[7] + 11 | m[12] * m[5] * m[2] * m[11] - m[4] * m[13] * m[2] * m[11] - 12 | m[12] * m[1] * m[6] * m[11] + m[0] * m[13] * m[6] * m[11] + 13 | m[4] * m[1] * m[14] * m[11] - m[0] * m[5] * m[14] * m[11] - 14 | m[8] * m[5] * m[2] * m[15] + m[4] * m[9] * m[2] * m[15] + 15 | m[8] * m[1] * m[6] * m[15] - m[0] * m[9] * m[6] * m[15] - 16 | m[4] * m[1] * m[10] * m[15] + m[0] * m[5] * m[10] * m[15]); 17 | }; 18 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/dot.js: -------------------------------------------------------------------------------- 1 | science.lin.dot = function(a, b) { 2 | var s = 0, 3 | i = -1, 4 | n = Math.min(a.length, b.length); 5 | while (++i < n) s += a[i] * b[i]; 6 | return s; 7 | }; 8 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/inverse.js: -------------------------------------------------------------------------------- 1 | // Find matrix inverse using Gauss-Jordan. 2 | science.lin.inverse = function(m) { 3 | var n = m.length, 4 | i = -1; 5 | 6 | // Check if the matrix is square. 7 | if (n !== m[0].length) return; 8 | 9 | // Augment with identity matrix I to get AI. 10 | m = m.map(function(row, i) { 11 | var identity = new Array(n), 12 | j = -1; 13 | while (++j < n) identity[j] = i === j ? 1 : 0; 14 | return row.concat(identity); 15 | }); 16 | 17 | // Compute IA^-1. 18 | science.lin.gaussjordan(m); 19 | 20 | // Remove identity matrix I to get A^-1. 21 | while (++i < n) { 22 | m[i] = m[i].slice(n); 23 | } 24 | 25 | return m; 26 | }; 27 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/length.js: -------------------------------------------------------------------------------- 1 | science.lin.length = function(p) { 2 | return Math.sqrt(science.lin.dot(p, p)); 3 | }; 4 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/lin.js: -------------------------------------------------------------------------------- 1 | science.lin = {}; 2 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/multiply.js: -------------------------------------------------------------------------------- 1 | science.lin.multiply = function(a, b) { 2 | var m = a.length, 3 | n = b[0].length, 4 | p = b.length, 5 | i = -1, 6 | j, 7 | k; 8 | if (p !== a[0].length) throw {"error": "columns(a) != rows(b); " + a[0].length + " != " + p}; 9 | var ab = new Array(m); 10 | while (++i < m) { 11 | ab[i] = new Array(n); 12 | j = -1; while(++j < n) { 13 | var s = 0; 14 | k = -1; while (++k < p) s += a[i][k] * b[k][j]; 15 | ab[i][j] = s; 16 | } 17 | } 18 | return ab; 19 | }; 20 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/normalize.js: -------------------------------------------------------------------------------- 1 | science.lin.normalize = function(p) { 2 | var length = science.lin.length(p); 3 | return p.map(function(d) { return d / length; }); 4 | }; 5 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/transpose.js: -------------------------------------------------------------------------------- 1 | science.lin.transpose = function(a) { 2 | var m = a.length, 3 | n = a[0].length, 4 | i = -1, 5 | j, 6 | b = new Array(n); 7 | while (++i < n) { 8 | b[i] = new Array(m); 9 | j = -1; while (++j < m) b[i][j] = a[j][i]; 10 | } 11 | return b; 12 | }; 13 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/lin/tridag.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Solves tridiagonal systems of linear equations. 3 | * 4 | * Source: http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm 5 | * 6 | * @param {number[]} a 7 | * @param {number[]} b 8 | * @param {number[]} c 9 | * @param {number[]} d 10 | * @param {number[]} x 11 | * @param {number} n 12 | */ 13 | science.lin.tridag = function(a, b, c, d, x, n) { 14 | var i, 15 | m; 16 | for (i = 1; i < n; i++) { 17 | m = a[i] / b[i - 1]; 18 | b[i] -= m * c[i - 1]; 19 | d[i] -= m * d[i - 1]; 20 | } 21 | x[n - 1] = d[n - 1] / b[n - 1]; 22 | for (i = n - 2; i >= 0; i--) { 23 | x[i] = (d[i] - c[i] * x[i + 1]) / b[i]; 24 | } 25 | }; 26 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/package.js: -------------------------------------------------------------------------------- 1 | require("../science.v1"); 2 | 3 | require("util").puts(JSON.stringify({ 4 | "name": "science", 5 | "version": science.version, 6 | "description": "Scientific and statistical computing in JavaScript.", 7 | "keywords": ["science", "statistics", "mathematics"], 8 | "homepage": "https://github.com/jasondavies/science.js", 9 | "author": {"name": "Jason Davies", "url": "http://www.jasondavies.com/"}, 10 | "repository": {"type": "git", "url": "http://github.com/jasondavies/science.js.git"}, 11 | "devDependencies": { 12 | "uglify-js": "1.2.6", 13 | "vows": "0.6.0" 14 | } 15 | }, null, 2)); 16 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/bandwidth.js: -------------------------------------------------------------------------------- 1 | // Bandwidth selectors for Gaussian kernels. 2 | // Based on R's implementations in `stats.bw`. 3 | science.stats.bandwidth = { 4 | 5 | // Silverman, B. W. (1986) Density Estimation. London: Chapman and Hall. 6 | nrd0: function(x) { 7 | var hi = Math.sqrt(science.stats.variance(x)); 8 | if (!(lo = Math.min(hi, science.stats.iqr(x) / 1.34))) 9 | (lo = hi) || (lo = Math.abs(x[1])) || (lo = 1); 10 | return .9 * lo * Math.pow(x.length, -.2); 11 | }, 12 | 13 | // Scott, D. W. (1992) Multivariate Density Estimation: Theory, Practice, and 14 | // Visualization. Wiley. 15 | nrd: function(x) { 16 | var h = science.stats.iqr(x) / 1.34; 17 | return 1.06 * Math.min(Math.sqrt(science.stats.variance(x)), h) 18 | * Math.pow(x.length, -1/5); 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/distribution.js: -------------------------------------------------------------------------------- 1 | science.stats.distribution = { 2 | }; 3 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/erf.js: -------------------------------------------------------------------------------- 1 | // Based on implementation in http://picomath.org/. 2 | science.stats.erf = function(x) { 3 | var a1 = 0.254829592, 4 | a2 = -0.284496736, 5 | a3 = 1.421413741, 6 | a4 = -1.453152027, 7 | a5 = 1.061405429, 8 | p = 0.3275911; 9 | 10 | // Save the sign of x 11 | var sign = x < 0 ? -1 : 1; 12 | if (x < 0) { 13 | sign = -1; 14 | x = -x; 15 | } 16 | 17 | // A&S formula 7.1.26 18 | var t = 1 / (1 + p * x); 19 | return sign * ( 20 | 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) 21 | * t * Math.exp(-x * x)); 22 | }; 23 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/iqr.js: -------------------------------------------------------------------------------- 1 | science.stats.iqr = function(x) { 2 | var quartiles = science.stats.quantiles(x, [.25, .75]); 3 | return quartiles[1] - quartiles[0]; 4 | }; 5 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/kde.js: -------------------------------------------------------------------------------- 1 | // http://exploringdata.net/den_trac.htm 2 | science.stats.kde = function() { 3 | var kernel = science.stats.kernel.gaussian, 4 | sample = [], 5 | bandwidth = science.stats.bandwidth.nrd; 6 | 7 | function kde(points, i) { 8 | var bw = bandwidth.call(this, sample); 9 | return points.map(function(x) { 10 | var i = -1, 11 | y = 0, 12 | n = sample.length; 13 | while (++i < n) { 14 | y += kernel((x - sample[i]) / bw); 15 | } 16 | return [x, y / bw / n]; 17 | }); 18 | } 19 | 20 | kde.kernel = function(x) { 21 | if (!arguments.length) return kernel; 22 | kernel = x; 23 | return kde; 24 | }; 25 | 26 | kde.sample = function(x) { 27 | if (!arguments.length) return sample; 28 | sample = x; 29 | return kde; 30 | }; 31 | 32 | kde.bandwidth = function(x) { 33 | if (!arguments.length) return bandwidth; 34 | bandwidth = science.functor(x); 35 | return kde; 36 | }; 37 | 38 | return kde; 39 | }; 40 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/kernel.js: -------------------------------------------------------------------------------- 1 | // See . 2 | science.stats.kernel = { 3 | uniform: function(u) { 4 | if (u <= 1 && u >= -1) return .5; 5 | return 0; 6 | }, 7 | triangular: function(u) { 8 | if (u <= 1 && u >= -1) return 1 - Math.abs(u); 9 | return 0; 10 | }, 11 | epanechnikov: function(u) { 12 | if (u <= 1 && u >= -1) return .75 * (1 - u * u); 13 | return 0; 14 | }, 15 | quartic: function(u) { 16 | if (u <= 1 && u >= -1) { 17 | var tmp = 1 - u * u; 18 | return (15 / 16) * tmp * tmp; 19 | } 20 | return 0; 21 | }, 22 | triweight: function(u) { 23 | if (u <= 1 && u >= -1) { 24 | var tmp = 1 - u * u; 25 | return (35 / 32) * tmp * tmp * tmp; 26 | } 27 | return 0; 28 | }, 29 | gaussian: function(u) { 30 | return 1 / Math.sqrt(2 * Math.PI) * Math.exp(-.5 * u * u); 31 | }, 32 | cosine: function(u) { 33 | if (u <= 1 && u >= -1) return Math.PI / 4 * Math.cos(Math.PI / 2 * u); 34 | return 0; 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/mean.js: -------------------------------------------------------------------------------- 1 | // Welford's algorithm. 2 | science.stats.mean = function(x) { 3 | var n = x.length; 4 | if (n === 0) return NaN; 5 | var m = 0, 6 | i = -1; 7 | while (++i < n) m += (x[i] - m) / (i + 1); 8 | return m; 9 | }; 10 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/median.js: -------------------------------------------------------------------------------- 1 | science.stats.median = function(x) { 2 | return science.stats.quantiles(x, [.5])[0]; 3 | }; 4 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/mode.js: -------------------------------------------------------------------------------- 1 | science.stats.mode = function(x) { 2 | x = x.slice().sort(science.ascending); 3 | var mode, 4 | n = x.length, 5 | i = -1, 6 | l = i, 7 | last = null, 8 | max = 0, 9 | tmp, 10 | v; 11 | while (++i < n) { 12 | if ((v = x[i]) !== last) { 13 | if ((tmp = i - l) > max) { 14 | max = tmp; 15 | mode = last; 16 | } 17 | last = v; 18 | l = i; 19 | } 20 | } 21 | return mode; 22 | }; 23 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/phi.js: -------------------------------------------------------------------------------- 1 | science.stats.phi = function(x) { 2 | return .5 * (1 + science.stats.erf(x / Math.SQRT2)); 3 | }; 4 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/quantiles.js: -------------------------------------------------------------------------------- 1 | // Uses R's quantile algorithm type=7. 2 | science.stats.quantiles = function(d, quantiles) { 3 | d = d.slice().sort(science.ascending); 4 | var n_1 = d.length - 1; 5 | return quantiles.map(function(q) { 6 | if (q === 0) return d[0]; 7 | else if (q === 1) return d[n_1]; 8 | 9 | var index = 1 + q * n_1, 10 | lo = Math.floor(index), 11 | h = index - lo, 12 | a = d[lo - 1]; 13 | 14 | return h === 0 ? a : a + h * (d[lo] - a); 15 | }); 16 | }; 17 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/stats.js: -------------------------------------------------------------------------------- 1 | science.stats = {}; 2 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/src/stats/variance.js: -------------------------------------------------------------------------------- 1 | // Unbiased estimate of a sample's variance. 2 | // Also known as the sample variance, where the denominator is n - 1. 3 | science.stats.variance = function(x) { 4 | var n = x.length; 5 | if (n < 1) return NaN; 6 | if (n === 1) return 0; 7 | var mean = science.stats.mean(x), 8 | i = -1, 9 | s = 0; 10 | while (++i < n) { 11 | var v = x[i] - mean; 12 | s += v * v; 13 | } 14 | return s / (n - 1); 15 | }; 16 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/core/ascending-test.js: -------------------------------------------------------------------------------- 1 | require("../../science.v1"); 2 | 3 | var vows = require("vows"), 4 | assert = require("assert"); 5 | 6 | var suite = vows.describe("science.ascending"); 7 | 8 | suite.addBatch({ 9 | "ascending": { 10 | "simple": function() { 11 | var a = [1, 4, 5, 2, 3, 6]; 12 | a.sort(science.ascending); 13 | assert.deepEqual(a, [1, 2, 3, 4, 5, 6]); 14 | } 15 | } 16 | }); 17 | 18 | suite.export(module); 19 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/core/expm1-test.js: -------------------------------------------------------------------------------- 1 | require("../../science.v1"); 2 | 3 | var vows = require("vows"), 4 | assert = require("assert"); 5 | 6 | var suite = vows.describe("science.expm1"); 7 | 8 | suite.addBatch({ 9 | "expm1": { 10 | "simple": function() { 11 | var expm1 = science.expm1; 12 | assert.inDelta(expm1(-1 ), -0.632120558828558, 1e-6); 13 | assert.inDelta(expm1( 0 ), 0, 1e-6); 14 | assert.inDelta(expm1(1e-5 - 1e-8), 0.000009990049900216168, 1e-6); 15 | assert.inDelta(expm1(1e-5 + 1e-8), 0.000010010050100217178, 1e-6); 16 | assert.inDelta(expm1( 0.5), 0.6487212707001282, 1e-6); 17 | } 18 | } 19 | }); 20 | 21 | suite.export(module); 22 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/core/hypot-test.js: -------------------------------------------------------------------------------- 1 | require("../../science.v1"); 2 | 3 | var vows = require("vows"), 4 | assert = require("assert"); 5 | 6 | var suite = vows.describe("science.hypot"); 7 | 8 | suite.addBatch({ 9 | "hypot": { 10 | "maximum supported hypotenuse": function() { 11 | var max = Number.MAX_VALUE / Math.sqrt(2); 12 | assert.equal(science.hypot(max, max), 1.7976931348623155e+308); 13 | } 14 | } 15 | }); 16 | 17 | suite.export(module); 18 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/core/quadratic-test.js: -------------------------------------------------------------------------------- 1 | require("../../science.v1"); 2 | 3 | var vows = require("vows"), 4 | assert = require("assert"); 5 | 6 | var suite = vows.describe("science.quadratic"); 7 | 8 | suite.addBatch({ 9 | "real roots": { 10 | topic: function() { 11 | return science.quadratic(); 12 | }, 13 | "no roots": function(quadratic) { 14 | assert.deepEqual(quadratic(1, 1, 1), []); 15 | }, 16 | "single root": function(quadratic) { 17 | assert.deepEqual(quadratic(1, -2, 1), [1]); 18 | }, 19 | "two roots": function(quadratic) { 20 | assert.deepEqual(quadratic(1, 1, -2), [-2.5, .5]); 21 | } 22 | }, 23 | "complex roots": { 24 | topic: function() { 25 | return science.quadratic().complex(true); 26 | }, 27 | "imaginary parts": function(quadratic) { 28 | assert.deepEqual(quadratic(1, 0, 1), [{r: 0, i: -1}, {r: 0, i: 1}]); 29 | } 30 | } 31 | }); 32 | 33 | suite.export(module); 34 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/core/zeroes-test.js: -------------------------------------------------------------------------------- 1 | require("../../science.v1"); 2 | 3 | var vows = require("vows"), 4 | assert = require("assert"); 5 | 6 | var suite = vows.describe("science.zeroes"); 7 | 8 | suite.addBatch({ 9 | "zeroes": { 10 | "10": function() { 11 | assert.deepEqual(science.zeroes(10), [ 12 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 13 | ]); 14 | }, 15 | "10, 10": function() { 16 | assert.deepEqual(science.zeroes(10, 10), [ 17 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 18 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 19 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 20 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 21 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 22 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 23 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 24 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 25 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 26 | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 27 | ]); 28 | } 29 | } 30 | }); 31 | 32 | suite.export(module); 33 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/env-assert.js: -------------------------------------------------------------------------------- 1 | var assert = require("assert"); 2 | 3 | assert.inDelta = function(actual, expected, delta, message) { 4 | if (!inDelta(actual, expected, delta)) { 5 | assert.fail(actual, expected, message || "expected {actual} to be in within *" + delta + "* of {expected}", null, assert.inDelta); 6 | } 7 | }; 8 | 9 | function inDelta(actual, expected, delta) { 10 | return (Array.isArray(expected) ? inDeltaArray : inDeltaNumber)(actual, expected, delta); 11 | } 12 | 13 | function inDeltaArray(actual, expected, delta) { 14 | var n = expected.length, i = -1; 15 | if (actual.length !== n) return false; 16 | while (++i < n) if (!inDelta(actual[i], expected[i], delta)) return false; 17 | return true; 18 | } 19 | 20 | function inDeltaNumber(actual, expected, delta) { 21 | return actual >= expected - delta && actual <= expected + delta; 22 | } 23 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/lin/decompose-test.js: -------------------------------------------------------------------------------- 1 | require("../../science.v1"); 2 | require("../../science.v1"); 3 | 4 | var vows = require("vows"), 5 | assert = require("assert"); 6 | 7 | var suite = vows.describe("science.lin.decompose"); 8 | 9 | suite.addBatch({ 10 | "decompose": { 11 | topic: science.lin.decompose, 12 | "symmetric": function(decompose) { 13 | var A = [[1, 1, 1], [1, 2, 3], [1, 3, 6]], 14 | result = decompose(A); 15 | assert.inDelta( 16 | science.lin.multiply(A, result.V), 17 | science.lin.multiply(result.V, result.D), 18 | 1e-6 19 | ); 20 | } 21 | } 22 | }); 23 | 24 | suite.export(module); 25 | -------------------------------------------------------------------------------- /experiment/public/components/science.js/test/lin/tridag-test.js: -------------------------------------------------------------------------------- 1 | require("../../science.v1"); 2 | require("../../science.v1"); 3 | 4 | var vows = require("vows"), 5 | assert = require("assert"); 6 | 7 | var suite = vows.describe("science.lin.tridag"); 8 | 9 | suite.addBatch({ 10 | "tridag": { 11 | "simple": function() { 12 | var n = 31; 13 | var a = [], b = [], c = [], d = [], x = []; 14 | for (var i=0; i 0) matrix[i - 1][i] = a[i]; 29 | if (i < n - 1) matrix[i + 1][i] = c[i]; 30 | } 31 | var result = science.lin.multiply(matrix, x.map(function(d) { return [d]; })); 32 | var epsilon = 1e-12; 33 | for (var i=0; i", 7 | "repository" : {"type": "git", "url": "git://github.com/jashkenas/underscore.git"}, 8 | "main" : "underscore.js", 9 | "version" : "1.5.2", 10 | "devDependencies": { 11 | "phantomjs": "1.9.0-1" 12 | }, 13 | "scripts": { 14 | "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true" 15 | }, 16 | "licenses": [ 17 | { 18 | "type": "MIT", 19 | "url": "https://raw.github.com/jashkenas/underscore/master/LICENSE" 20 | } 21 | ], 22 | "files" : ["underscore.js", "underscore-min.js", "LICENSE"] 23 | } 24 | -------------------------------------------------------------------------------- /experiment/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Welcome to our survey 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 37 | 38 | 39 | 40 | 60 | -------------------------------------------------------------------------------- /experiment/public/modules/blocked-workers.json: -------------------------------------------------------------------------------- 1 | [ 2 | "banned" 3 | ] 4 | -------------------------------------------------------------------------------- /experiment/public/modules/paste-on-mturk.html: -------------------------------------------------------------------------------- 1 | 2 |

Perceiving Data

3 | 4 |
5 |

6 | We are conducting an academic survey about perceiving values in visualizations. You will need a desktop or laptop (not cell phone or tablet) for this study. 7 |

8 |

9 | Select the link below to complete the survey. At the end of the survey, you will receive a code to paste into the box below to receive credit for taking our survey.

10 |
11 | 12 |

Survey link: here

13 |

Provide the survey code here:

14 |

15 | 16 | 20 | -------------------------------------------------------------------------------- /experiment/public/util.js: -------------------------------------------------------------------------------- 1 | var isMobile = { 2 | Android: function() { 3 | return navigator.userAgent.match(/Android/i); 4 | }, 5 | BlackBerry: function() { 6 | return navigator.userAgent.match(/BlackBerry/i); 7 | }, 8 | iOS: function() { 9 | return navigator.userAgent.match(/iPhone|iPad|iPod/i); 10 | }, 11 | Opera: function() { 12 | return navigator.userAgent.match(/Opera Mini/i); 13 | }, 14 | Windows: function() { 15 | return navigator.userAgent.match(/IEMobile/i); 16 | }, 17 | any: function() { 18 | return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); 19 | } 20 | } 21 | 22 | function showMobileBan() { 23 | var str = 'Sorry. Mobile devices are not allowed in this survey.'; 24 | 25 | alert(str); 26 | 27 | d3.selectAll('div').remove(); 28 | 29 | d3.select('body') 30 | .append('p').html(str) 31 | .style('font-size', '40px'); 32 | } 33 | -------------------------------------------------------------------------------- /experiment/redis.conf: -------------------------------------------------------------------------------- 1 | appendonly yes 2 | bind 127.0.0.1 3 | -------------------------------------------------------------------------------- /ranking-correlation.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | AutoAppendNewline: Yes 16 | --------------------------------------------------------------------------------