00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:02:50  * timoxleyquit (Remote host closed the connection)
00:06:51  * AvianFluquit (Ping timeout: 272 seconds)
00:08:48  * Maciek416joined
00:13:19  * grewebjoined
00:15:18  <ogd>everyone in SF should go to this and eat the free sushi http://rsvp.digitalocean.com
00:15:52  <groundwater>ogd: you going?
00:17:29  * mikolalysenkojoined
00:17:45  * grewebquit (Ping timeout: 246 seconds)
00:19:44  * thlorenzquit (Remote host closed the connection)
00:20:20  * thlorenzjoined
00:20:41  * thlorenzquit (Read error: Connection reset by peer)
00:21:07  * thlorenzjoined
00:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 53]
00:24:04  * thlorenzquit (Remote host closed the connection)
00:24:17  * thlorenzjoined
00:34:22  * ednapiranhaquit (Remote host closed the connection)
00:39:44  * timoxleyjoined
00:43:38  * jcrugzzquit (Read error: Connection reset by peer)
00:56:30  * tmcwjoined
00:59:10  * peutetrequit (Quit: peutetre)
01:00:48  * tmcwquit (Ping timeout: 246 seconds)
01:05:00  * ednapiranhajoined
01:05:42  * ednapiranhaquit (Client Quit)
01:10:00  * tilgoviquit (Read error: Operation timed out)
01:23:12  * fronxjoined
01:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 7]
01:24:20  * tilgovijoined
01:24:51  * mikolalysenkoquit (Ping timeout: 260 seconds)
01:26:30  * dominictarrjoined
01:27:58  * fronxquit (Ping timeout: 246 seconds)
01:29:13  * ferossjoined
01:31:42  * tilgoviquit (Remote host closed the connection)
01:34:13  * mikolalysenkojoined
01:37:18  * dominictarrquit (Quit: Leaving)
01:37:28  * dominictarrjoined
01:39:43  * tilgovijoined
01:39:51  * tilgoviquit (Read error: Connection reset by peer)
01:50:10  * jcrugzzjoined
02:12:05  * mikolalysenkoquit (Ping timeout: 245 seconds)
02:13:56  * dguttmanquit (Quit: dguttman)
02:16:47  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
02:17:15  * funkytekjoined
02:17:28  * funkytekquit (Client Quit)
02:18:55  * funkytekjoined
02:23:18  * fronxjoined
02:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 8]
02:24:21  * yorickquit (Remote host closed the connection)
02:26:46  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
02:29:38  * fronxquit (Ping timeout: 264 seconds)
03:01:53  * maksimlinquit (Remote host closed the connection)
03:02:18  * maksimlinjoined
03:08:11  * mikolalysenkojoined
03:16:05  * jxsonquit (Remote host closed the connection)
03:17:02  * mikolalysenkoquit (Ping timeout: 264 seconds)
03:17:24  * jxsonjoined
03:22:18  * jxsonquit (Ping timeout: 265 seconds)
03:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 19]
03:24:42  * mikolalysenkojoined
03:24:59  <ogd>groundwater: yep
03:35:46  * thlorenzquit (Remote host closed the connection)
03:36:21  * thlorenzjoined
03:40:45  * thlorenzquit (Ping timeout: 246 seconds)
03:41:54  * mmckeggjoined
03:44:28  * defunctzombiechanged nick to defunctzombie_zz
03:45:46  * AvianFlujoined
03:46:37  * anoemijoined
03:53:14  * anoemiquit (Ping timeout: 265 seconds)
03:56:12  * AvianFluquit (Read error: Connection reset by peer)
04:04:39  * AvianFlujoined
04:06:39  * anoemijoined
04:10:33  * AvianFluquit (Read error: Connection reset by peer)
04:12:49  * dominictarrquit (Ping timeout: 250 seconds)
04:12:51  * DTrejoquit (Remote host closed the connection)
04:14:00  * DTrejojoined
04:16:43  * thlorenzjoined
04:17:28  * AvianFlujoined
04:18:08  * jxsonjoined
04:18:20  * DTrejoquit (Ping timeout: 245 seconds)
04:20:23  * AvianFluquit (Read error: Connection reset by peer)
04:21:45  * anvakajoined
04:22:30  * thlorenz_joined
04:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 16]
04:24:51  * jxsonquit (Ping timeout: 264 seconds)
04:24:52  * chrisdickinsonquit (Ping timeout: 264 seconds)
04:24:52  * thlorenzquit (Ping timeout: 264 seconds)
04:26:34  * AvianFlujoined
04:26:34  * thlorenz_quit (Read error: Connection reset by peer)
04:26:55  * thlorenzjoined
04:28:23  * chrisdickinsonjoined
04:29:51  * AvianFluquit (Read error: Connection reset by peer)
04:30:23  * AvianFlujoined
04:35:41  * kenperkinsquit (Quit: Textual IRC Client: http://www.textualapp.com/)
04:36:18  * AvianFluquit (Read error: Connection reset by peer)
04:39:43  <prettyrobots>groundwater, ogd: Are you going to @luk's thing too/afterward?
04:39:47  * AvianFlujoined
04:39:47  * AvianFluquit (Read error: Connection reset by peer)
04:40:25  * thlorenzquit (Ping timeout: 252 seconds)
04:40:42  <prettyrobots>groundwater, ogd: https://twitter.com/luk/status/410167253829955587
04:42:07  * AvianFlujoined
04:46:45  <ogd>probably not, overlaps with the other thing
04:47:55  * dominictarrjoined
04:51:25  * AvianFluquit (Read error: Connection reset by peer)
04:55:03  * AvianFlujoined
05:00:00  * AvianFluquit (Read error: Connection reset by peer)
05:00:26  * AvianFlujoined
05:01:03  * AvianFluquit (Read error: Connection reset by peer)
05:02:56  * AvianFlujoined
05:06:01  * funkytekjoined
05:06:50  * thlorenzjoined
05:09:49  * AvianFluquit (Read error: Connection reset by peer)
05:11:03  * jcrugzzquit (Ping timeout: 265 seconds)
05:12:12  * AvianFlujoined
05:13:14  * AvianFluquit (Read error: Connection reset by peer)
05:15:50  * fentquit (Ping timeout: 240 seconds)
05:16:15  * AvianFlujoined
05:16:21  * thlorenzquit (Read error: Connection reset by peer)
05:16:44  * fentjoined
05:16:52  * thlorenzjoined
05:17:57  * wolfeidauquit (Ping timeout: 248 seconds)
05:18:30  * wolfeidaujoined
05:18:54  * jxsonjoined
05:19:25  * jxsonquit (Read error: Connection reset by peer)
05:19:48  * jxsonjoined
05:21:41  * thlorenzquit (Ping timeout: 265 seconds)
05:21:53  * Maciek416quit (Remote host closed the connection)
05:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 21]
05:24:19  * jxsonquit (Ping timeout: 250 seconds)
05:25:54  * dubroy__quit (Read error: Connection reset by peer)
05:26:04  * AvianFluquit (Read error: Connection reset by peer)
05:26:11  * dubroy__joined
05:28:52  * AvianFlujoined
05:29:58  * AvianFluquit (Read error: Connection reset by peer)
05:30:30  * AvianFlujoined
05:31:48  * cpup_joined
05:33:17  * cpupquit (Ping timeout: 272 seconds)
05:42:25  * AvianFluquit (Read error: Connection reset by peer)
05:46:58  * dominictarrquit (Ping timeout: 246 seconds)
05:47:25  * AvianFlujoined
05:57:11  <rowbit>substack, pkrumins: These encoders are STILL down: 50.57.72.69(free7)
06:00:22  * AvianFluquit (Read error: Connection reset by peer)
06:00:27  * AvianFlu_joined
06:00:43  * josephg_changed nick to josephg
06:01:50  * jxsonjoined
06:07:25  * AvianFlu_quit (Remote host closed the connection)
06:12:35  * maksimlinquit (Quit: ChatZilla 0.9.90.1 [Firefox 25.0.1/20131115110311])
06:16:06  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
06:17:49  * thlorenzjoined
06:22:06  * thlorenzquit (Ping timeout: 246 seconds)
06:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 15]
06:26:15  * anoemiquit (Quit: anoemi)
06:31:55  * calvinfo1quit (Quit: Leaving.)
06:32:46  * jxsonquit (Remote host closed the connection)
06:45:00  * jxsonjoined
06:57:13  <Raynos>I'm writing web app examples and I'm curious whether I'm using too many modules. It's either a good example or the example should be simpler ( https://github.com/Raynos/http-framework/issues/15 )
07:02:48  * tmcwjoined
07:05:20  <substack>Raynos: yes, that is too many dependencies for an instructive example
07:06:49  <substack>Raynos: https://npmjs.org/package/csrf-lite uses just crsf-lite, cookies, and qs in the example code
07:07:00  <substack>oh wow, and qs isn't even used
07:07:05  <substack>so actually, just 2 modules
07:08:03  <Raynos>yo
07:08:21  <Raynos>substack: it uses querystring instead of qs
07:09:22  <substack>Raynos: `qs` isn't used
07:09:25  <substack>the variable
07:09:34  <substack>so it only has 2 deps
07:09:40  <Raynos>substack: thats because he uses `querystring.parse()` instead of `qs.parse()` bug in his example
07:10:17  <substack>ok
07:10:28  <Raynos>so im kind of torn between wanting to show a real example of a web app with modules being used
07:10:54  <Raynos>vs an example that uses less external modules and more manual stuff
07:11:07  * ryan_stevensjoined
07:11:08  <substack>that's not good for demonstrating a single thing
07:11:40  <Raynos>agreed
07:12:24  <jjjohnny_>the module is a normalizer
07:12:39  <jjjohnny_>"normaler" has already been taken on npm
07:12:46  <substack>Raynos: I don't think we need examples of fake things that try to do a bunch of stuff
07:12:56  <jjjohnny_>"normalizer" has already been taken on NPM
07:12:59  <substack>just real things that actually accomplish real tasks
07:13:17  <substack>because the point of tiny modules is that you don't need most of the stuff most of the time
07:13:47  <jjjohnny_>if I give it a funky wierd name I might forget it later. I dub it johnny-normalizer
07:15:10  <jjjohnny_>you don't need most of the stuff all of the time, or all of the stuff most of the time either, says the groucho marxist
07:17:16  <Raynos>substack: I hear you.
07:18:34  * thlorenzjoined
07:19:38  <jjjohnny_>own the means of unproduction
07:20:21  * funkytekjoined
07:23:00  * thlorenzquit (Ping timeout: 246 seconds)
07:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 50]
07:26:54  <Raynos>substack: Ok I added a decent lightweight example ( https://github.com/Raynos/http-framework#csrf-lite )
07:45:29  * jxsonquit (Remote host closed the connection)
07:47:33  * tmcwquit (Remote host closed the connection)
07:48:09  * tmcwjoined
07:48:28  <anvaka>So, I made a minimalistic npm package generator: http://www.youtube.com/watch?v=VKsmKs9DzsE
07:49:05  <anvaka>it runs npm init, constructs files based on your package.json, and publishes project to github
07:51:11  <anvaka>and it is tirggerred by five strokes: "yo n" (instead of 9 for 'npm init')
07:51:15  <ogd>lol
07:51:18  <ogd>anvaka: looks nice!
07:51:35  * shamaquit (Remote host closed the connection)
07:51:35  <anvaka>ogd: thank you :)
07:52:00  <ogd>anvaka: i want something that will take my browserify code and push it to the gh-pages branch of the current repo i'm in after running something like browserify demo.js -o bundle.js, maybe i'll try to adapt your thing to do that
07:52:24  <anvaka>ogd: that is possible
07:52:36  <anvaka>I mean it's easy to add subgenerators
07:52:39  * tmcwquit (Ping timeout: 260 seconds)
07:53:03  <ogd>also it would be cool if it added a bunch of badges to the readme e.g. testling.ci badges and nodei.co and david-dm badges
07:56:19  <anvaka>ogd: that sounds interesting. I wanted to start with something really basic. Hard to find balance between number of questions and minimal sane defaults
07:56:39  <anvaka>but you right
08:16:14  * pgtejoined
08:16:46  * no9quit (Ping timeout: 246 seconds)
08:19:26  * thlorenzjoined
08:22:38  * shamajoined
08:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 35]
08:24:14  * thlorenzquit (Ping timeout: 264 seconds)
08:24:16  * shamaquit (Read error: Connection reset by peer)
08:24:22  * shama_joined
08:28:25  * fotoveritequit (Quit: fotoverite)
08:28:40  * shama_quit (Ping timeout: 246 seconds)
08:30:27  * fotoveritejoined
08:31:02  * ferossquit (Quit: feross)
08:35:06  * jcrugzzjoined
08:41:14  * peutetrejoined
08:43:36  * anvakaquit (Remote host closed the connection)
08:46:13  * fronxjoined
08:50:48  * grewebjoined
08:51:31  * peutetrequit (Read error: Connection reset by peer)
08:51:58  * peutetrejoined
08:54:44  * fotoveritequit (Quit: fotoverite)
08:56:04  * fotoveritejoined
08:59:07  * grewebquit (Ping timeout: 246 seconds)
09:01:00  * grewebjoined
09:05:20  * pgtequit (Remote host closed the connection)
09:07:20  <mmalecki>ircretary: tell thlorenz nice, I'll give it a try. I don't specifically want yaml, I want something human-readable
09:07:20  <ircretary>mmalecki: I'll be sure to tell thlorenz
09:07:24  * fronxquit (Remote host closed the connection)
09:12:04  * anvakajoined
09:13:29  * grewebquit (Remote host closed the connection)
09:15:44  * ferossjoined
09:20:20  * thlorenzjoined
09:20:45  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
09:21:26  * funkytekjoined
09:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 49]
09:24:48  * thlorenzquit (Ping timeout: 246 seconds)
09:24:57  * shamajoined
09:27:23  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
09:29:35  * dominictarrjoined
09:29:38  * shamaquit (Ping timeout: 264 seconds)
09:35:06  * grewebjoined
09:42:22  * pgtejoined
09:46:57  * pgtequit (Ping timeout: 252 seconds)
09:57:04  * pgtejoined
10:00:15  * ryan_stevensquit (Quit: Leaving.)
10:02:15  * mikolalysenkoquit (Ping timeout: 246 seconds)
10:22:24  * funkytekjoined
10:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 27]
10:25:48  * shamajoined
10:29:12  * mikolalysenkojoined
10:30:15  * shamaquit (Ping timeout: 246 seconds)
10:34:23  * mikolalysenkoquit (Ping timeout: 265 seconds)
10:35:50  * fronxjoined
10:39:56  * timoxleyquit
10:40:59  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
10:41:50  * insertcoffeejoined
10:43:09  * insertcoffeequit (Remote host closed the connection)
10:45:42  * contrahaxchanged nick to _Contra
10:48:05  * timoxleyjoined
10:59:38  * peutetrequit (Read error: Connection reset by peer)
11:00:00  * peutetrejoined
11:21:59  * thlorenzjoined
11:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 30]
11:26:07  * thlorenzquit (Ping timeout: 246 seconds)
11:26:38  * shamajoined
11:29:55  * mikolalysenkojoined
11:31:25  * shamaquit (Ping timeout: 265 seconds)
11:35:17  * mikolalysenkoquit (Ping timeout: 265 seconds)
11:53:59  * fronxquit (Remote host closed the connection)
11:57:12  <rowbit>substack, pkrumins: These encoders are STILL down: 50.57.72.69(free7)
12:15:15  * grewebquit (Remote host closed the connection)
12:17:47  * ferossquit (Quit: feross)
12:18:23  * timoxleyquit (Ping timeout: 252 seconds)
12:22:53  * thlorenzjoined
12:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 25]
12:27:11  * thlorenzquit (Ping timeout: 252 seconds)
12:27:20  * shamajoined
12:28:40  * shamaquit (Read error: Connection reset by peer)
12:28:55  * shamajoined
12:30:41  * mikolalysenkojoined
12:33:06  * shamaquit (Ping timeout: 246 seconds)
12:36:14  * mikolalysenkoquit (Ping timeout: 264 seconds)
12:41:39  * fronxjoined
12:48:27  * grewebjoined
13:07:26  * pgtequit (Remote host closed the connection)
13:17:16  * Guest33633quit (Ping timeout: 265 seconds)
13:23:43  * thlorenzjoined
13:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 26]
13:27:55  * thlorenzquit (Ping timeout: 250 seconds)
13:29:43  * shamajoined
13:31:30  * mikolalysenkojoined
13:34:10  * shamaquit (Ping timeout: 245 seconds)
13:36:27  * mikolalysenkoquit (Ping timeout: 246 seconds)
13:38:15  * anoemijoined
13:52:33  * pgtejoined
13:57:01  * pgtequit (Ping timeout: 252 seconds)
13:57:40  * AvianFlujoined
13:58:32  * defunctzombie_zzchanged nick to defunctzombie
13:59:23  <dominictarr>hey, does anyone know how to fix the UNABLE_TO_VERIFY_LEAF_SIGNATURE error?
13:59:40  * anoemiquit (Quit: anoemi)
13:59:52  * pgtejoined
14:01:57  * thlorenzjoined
14:02:39  * thlorenzquit (Read error: Connection reset by peer)
14:02:47  * thlorenzjoined
14:04:51  * AvianFluquit (Remote host closed the connection)
14:08:31  * kevino80joined
14:10:09  * fronxquit (Remote host closed the connection)
14:12:28  * ITprojoined
14:12:52  * ITprochanged nick to Guest10265
14:16:42  * Guest10265quit (Ping timeout: 246 seconds)
14:18:53  * brianloveswordsquit (Excess Flood)
14:19:15  * brianloveswordsjoined
14:19:54  * Maciek416joined
14:19:54  * grewebquit (Remote host closed the connection)
14:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 36]
14:24:23  <thlorenz>ircretary: tell st_luke hey, can you please fix all those npm backend issues, it's no fun anymore :/
14:24:23  <ircretary>thlorenz: I'll be sure to tell st_luke
14:24:45  <defunctzombie>thlorenz: what issues?
14:24:48  * grewebjoined
14:25:35  <thlorenz>defunctzombie: they are having backend issues, but this is more of an insider: https://twitter.com/luk/status/410657085081137152
14:25:57  * cpup_quit (Read error: Connection reset by peer)
14:26:02  <defunctzombie>thlorenz: sadness
14:26:37  <defunctzombie>thlorenz: site seems to be working fine
14:26:58  * fronxjoined
14:26:58  <thlorenz>defunctzombie: for me now as well, but I had publish problems two days ago
14:27:04  <defunctzombie>ah
14:27:05  <thlorenz>and some ppl still seem to have them
14:27:57  <thlorenz>defunctzombie: https://github.com/isaacs/npm/issues/4273
14:28:46  <jcrugzz>thlorenz: what are you seeing?
14:28:53  <defunctzombie>thlorenz: sadness
14:29:04  <thlorenz>jcrugzz: nothing right now, this is from a few days back
14:29:15  <jcrugzz>JasonSmith and I are currently working on solutions for server related issues.
14:29:18  <thlorenz>I just told ircretary to annoy luke a bit ;)
14:29:19  <jcrugzz>is it a specific package?
14:29:21  * fronxquit (Remote host closed the connection)
14:29:48  <thlorenz>jcrugzz: I'm fine now, this happened two days ago, other ppl have more problems recently, it's all in npm issues
14:29:59  <thlorenz>gotta go
14:30:27  * shamajoined
14:30:34  <thlorenz>jcrugzz: but fwiw, similar problems happened for me for at least two different packages
14:30:51  * thlorenzquit (Remote host closed the connection)
14:31:04  * fronxjoined
14:31:26  * thlorenzjoined
14:32:15  * mikolalysenkojoined
14:33:22  <jcrugzz>thlorenz: yea this is what we are working on solving
14:33:29  * tmcwjoined
14:33:33  * thlorenzquit (Remote host closed the connection)
14:33:47  <jcrugzz>basically packages not updating and such?
14:34:09  * thlorenzjoined
14:35:05  * shamaquit (Ping timeout: 265 seconds)
14:38:33  * mikolalysenkoquit (Ping timeout: 250 seconds)
14:45:13  * kevinswiberjoined
14:46:49  <dominictarr>jcrugzz, it seems to be working now
14:47:03  <dominictarr>is it just when the servers are overloaded?
14:47:30  * thlorenzquit (Ping timeout: 245 seconds)
14:47:48  <defunctzombie>overload all the servers \o/
14:49:44  * fallsemojoined
14:51:26  * tmcwquit (Remote host closed the connection)
14:52:02  * tmcwjoined
14:56:25  * tmcwquit (Ping timeout: 252 seconds)
14:59:32  * kevinswiberquit (Remote host closed the connection)
15:07:49  * dguttmanjoined
15:14:28  * thlorenzjoined
15:14:28  * fallsemoquit (Quit: Leaving.)
15:21:16  * tmcwjoined
15:23:55  * insertcoffeejoined
15:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 158]
15:26:40  * thlorenzquit (Ping timeout: 245 seconds)
15:31:07  * fronxquit (Remote host closed the connection)
15:31:14  * shamajoined
15:33:06  * FireFlyjoined
15:33:09  * FireFlyquit (Changing host)
15:33:09  * FireFlyjoined
15:34:20  <jcrugzz>dominictarr: packages are getting conflicted as replication mysteriously dies. Doesn't seem to be load, it might be some weird couchdb bug
15:34:50  * mikolalysenkojoined
15:34:51  * fronxjoined
15:35:27  <jcrugzz>im writing some code to directly monitor it so we can just automatically fix the issue when we see it occur
15:35:40  * shamaquit (Ping timeout: 246 seconds)
15:35:48  * fronxquit (Remote host closed the connection)
15:37:43  * fronxjoined
15:38:52  * thlorenzjoined
15:39:35  * mikolalysenkoquit (Ping timeout: 245 seconds)
15:44:36  * yorickjoined
15:46:13  <dominictarr>jcrugzz, I have written a thing that updates publishes a package in just one PUT
15:46:52  <dominictarr>(although, it only works the first time, because the update design doc drops the _attachments field (it uses an inline attachment)
15:47:07  <dominictarr>currently trying to figure out how to fix that...
15:47:38  * thlorenzquit (Remote host closed the connection)
15:53:32  <jcrugzz>dominictarr: whats the code for that ooc? and yea there might be limitations on more than just the client depending on how isaac setup the db. im becoming more intimate with npm
15:53:36  * kenperkinsjoined
15:53:41  * AvianFlujoined
15:53:54  * AvianFluquit (Client Quit)
15:55:05  <jcrugzz>but getting back to it in the early morning. its nice to wake up to the sunrise in thailand
15:55:10  <dominictarr>https://github.com/dominictarr/npm-atomic-publish
15:55:25  <dominictarr>I have it working with a bare couch locally,
15:55:39  <dominictarr>trying to get it working with a local npm registry
15:55:58  * AvianFlujoined
15:56:42  <dominictarr>... but I'm having a problem with rewrite rules
15:59:00  <jcrugzz>dominictarr: yea i think there is some limitation but its definitely fixable
15:59:15  <jcrugzz>but im gonna get some sleep, bbl
16:01:36  <dominictarr>jcrugzz, okay, hopefully I have this working before I get sleepy!
16:04:01  * jcrugzzquit (Ping timeout: 265 seconds)
16:06:14  * flobyjoined
16:06:30  <floby>dominictarr: ping?
16:09:41  <dominictarr>floby, hey, whats up?
16:09:46  * thlorenzjoined
16:10:09  <floby>dominictarr: I've finally found some time to hack around on peer2peer stuff
16:10:37  <floby>dominictarr: and check out the npmd source
16:10:49  <floby>dominictarr: still interested?
16:10:51  <dominictarr>cool
16:10:56  <dominictarr>of course!
16:11:43  <floby>dominictarr: turns out there's a collection of zeroconf/bonjour modules in npm already. 'polo' is doing a good job at what we're looking at
16:12:21  * kevino80quit (Remote host closed the connection)
16:12:48  <floby>I've made a PoC with a distributed chat app on LAN. it's on github and called node-dojo
16:13:14  <dominictarr>I had a look into zeroconf or was it mdns or something a while back
16:13:22  <floby>yeah
16:13:31  <floby>it's called mdns sometimes
16:13:49  <dominictarr>mdns didn't work for me then, but that was a year back
16:13:49  <floby>it depends on the protocol it uses for multicasting announces
16:13:57  * kevino80joined
16:14:10  <floby>polo uses udp multicast to announces new services
16:14:16  <floby>that works for me
16:14:27  <floby>but it can be tricky on some weird local networks
16:14:29  <dominictarr>directly from the node module?
16:14:35  <floby>yup
16:14:51  <dominictarr>sorry, I meant: using require('dgram') ?
16:15:02  <floby>oh yeah
16:15:05  <floby>absoltely
16:15:22  <floby>not spawning processes and not compiling anything
16:15:44  <floby>it works between node.js programs, I don't know yet if it works with anything else
16:17:23  <floby>It only tells you when services come up or down, with a name, address and port
16:17:51  <floby>which got me thinking that this interface could also work for wider networks and peer discovery mechanisms
16:17:51  <defunctzombie>dominictarr: I had spaceport a while back.. but mostly unmaintained now and I don't use it
16:18:08  <floby>I checked out spaceport too, and came to the same conclusion ^
16:18:11  <defunctzombie>dominictarr: wanted to make something more mdns compatible but gave up on that stuff in favor of my own json protocol
16:18:32  <defunctzombie>floby: if you want to know anything about spaceport let me know.. I wrote it
16:18:38  <defunctzombie>floby: but it has been a while since I used it
16:18:40  <floby>there's a mdns-compliant module in npm, but I couldn't make it work
16:19:09  <defunctzombie>sadness
16:19:24  <floby>defunctzombie: indeed, that nickname seemed familiar :)
16:19:54  <dominictarr>floby, have you heard of telehash?
16:20:01  <floby>defunctzombie: I checked out about 4 or 5 modules and polo is the one that worked best out of the box and I could get a hold of the maintainer in about 2 hours after filing an issue
16:20:08  <floby>dominictarr: no, what is it ?
16:20:25  <defunctzombie>nice
16:20:34  <dominictarr>it does p2p upd messaging with a json protocol
16:20:37  <floby>json+udp+dht -> looks kewl
16:20:49  <floby>that one didn't come up
16:20:58  <floby>Maybe there's no module on npm yet
16:21:02  <dominictarr>I think the thing with udp multicast is that it's only gonna work on the local network
16:21:31  <defunctzombie>polo looks very similar to spaceport
16:21:32  <floby>yes
16:21:41  <defunctzombie>dominictarr: floby: for more than local network use tunnels
16:21:55  <dominictarr>you need another way to get ip addresses if it's worldwide p2p
16:22:01  <defunctzombie>yea
16:22:02  <floby>definitely
16:22:12  <floby>kademlia would do the trick
16:22:18  <defunctzombie>dominictarr: but depends on what you mean by "worldwide" tho
16:22:21  <floby>but you have to now one seed node at least
16:22:23  <defunctzombie>cause if you have a hostname
16:22:34  <defunctzombie>and you can resolve that even for internal ips then it is ok
16:22:39  <dominictarr>althogh, things like cjdns and zeroteirone solve most of the problem by creating a virtual local network
16:22:48  <dominictarr>defunctzombie, we are talking about making a p2p npm
16:22:51  <defunctzombie>the trick I use typically is to have a "in.domain.tld" zone file
16:23:10  <defunctzombie>ah
16:23:18  <defunctzombie>dominictarr: why not go the bittorrent route?
16:23:29  <defunctzombie>not the same protocol but idea I guess
16:23:34  <defunctzombie>trackers, etc
16:23:59  <floby>trackers is the easiest way to get peers without knowing any
16:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 48]
16:24:08  * thlorenz_joined
16:24:28  <floby>kademlia addresses peer exchanges once you have at least one connection to the DHT
16:24:45  <dominictarr>defunctzombie, bittorrent is designed for large files
16:24:48  <dominictarr>but npm is small flies
16:24:49  <floby>I know btsync uses trackers to discover peers even though it doesn't do bittorrent per se
16:25:01  <dominictarr>but, similar architecture
16:25:08  <dominictarr>with a tracker layer and then a peering layer
16:25:35  <floby>at first, bittorrent only had trackers
16:25:52  <dominictarr>even amazon's dynamo db basically uses that architecture
16:26:12  <dominictarr>the tracker layer can be p2p, with gossip or dht
16:26:16  <dominictarr>it still does the same job.
16:26:59  <floby>sure
16:27:33  <floby>the thing is
16:27:50  <floby>I wanted to start doing something useful with peer2peer with npmd
16:28:39  <floby>what would be the first functionnality for peer 2 peer npm ?
16:29:59  <floby>I think distributing the cache for the LAN could be a first step
16:30:08  <floby>tarball cache that is
16:31:57  * shamajoined
16:33:08  <defunctzombie>the first step is figuring out how to ensure that you get uncorrupted files
16:33:59  <juliangruber>new website: http://pad.sh/
16:34:07  <floby>we can check the tarballs against the checksums from the repository
16:34:23  <juliangruber>http://github.com/juliangruber/links
16:34:27  <juliangruber>^ source
16:34:55  <floby>juliangruber: http://pad.sh/P5ob8l7m10vthF4CFtKtVxbW7g6S052n
16:35:08  <juliangruber>floby: nice!
16:35:20  <juliangruber>floby: http://pad.sh/a0ylcmKqvmvCBciL07zpTD2tLyMBhF61
16:35:32  * mikolalysenkojoined
16:36:07  <floby>juliangruber: Oh, i thought it would magically sync à la google wave
16:36:43  * shamaquit (Ping timeout: 260 seconds)
16:37:07  <juliangruber>floby: by giving a new link when someone else edits you have to most minimal collaboration possible, because you don't have to implement rights etc or make an option that's `read-only`
16:37:25  <juliangruber>and you often want to tell people you edited anyways, so you can also send them a link
16:37:38  <floby>juliangruber: fair enough
16:38:02  * thlorenz_quit (Ping timeout: 264 seconds)
16:39:10  <dominictarr>but what if you want to pull their changes back, like you want someone to proof read something for you?
16:39:18  <floby>dominictarr: defunctzombie: There's this really weird thing with node-telehash: it has close to zero dependencies, 60 odd lines of tests and about 1500 lines of code.
16:39:32  <dominictarr>maybe you could have a way do diff with another link?
16:39:41  <dominictarr>it's actually pretty easy to do diffing.
16:39:51  <defunctzombie>juliangruber: nice.. just needs syntax highlighting :)
16:40:16  <dominictarr>oh, and the link should be the hash of the text...
16:40:30  <floby>isn't that what the scuttlebutt/r-edit does ?
16:40:33  * mikolalysenkoquit (Ping timeout: 246 seconds)
16:40:52  <dominictarr>r-edit works differently
16:41:33  <defunctzombie>floby: well, it gets into territory about dependencies which is hotly contended because what would be the checksum to check?
16:41:49  <dominictarr>floby, hmm, and I think using json in a protocol like this is a mistake. binary is much better if you are serious
16:42:01  <dominictarr>json is good because it's easy, though.
16:42:20  * mikolalysenkojoined
16:42:44  <floby>dominictarr: it says you can send tiny bits of binary data. But IMO using JSON for anything else than easy peer exchange protocol is probably a mistake
16:43:27  <juliangruber>dominictarr: re diffing: i'm thinking about pad.sh/:id1..:id2
16:43:54  <juliangruber>dominictarr: re hashes: then I'd have to store every little change, but yeah, that would enable cool thinks like turning it into a distributed app
16:44:43  <floby>juliangruber: real time diffing with anyone else editing the text would have a wow effect to me.
16:45:38  <juliangruber>floby: if you want that there are enough apps that implement that already, most prominently etherpad
16:46:52  <floby>juliangruber: I don't quite like etherpad, it's very ugly. But i suppose it does that
16:47:07  <juliangruber>and I'd like never to introduce more ui than already exists, it should just be the text
16:47:33  <dominictarr>juliangruber, that looks good
16:48:19  <dominictarr>if you keep track of the point at which the link was shared, you could be 3 way merges... but then you are building git...
16:54:44  <substack>dominictarr: http://github.com/substack/rsa-stream
16:56:48  * shamajoined
16:58:59  <dominictarr>substack, nice!
16:59:26  <dominictarr>does it only use rsa? or does it use rsa to create a key and then encrypt with symmetric encryption
16:59:36  <dominictarr>because I understand that is more efficient
16:59:46  <dominictarr>yet still secure
17:00:01  <dominictarr>substack, also: https://github.com/dominictarr/npm-atomic-publish
17:00:29  <dominictarr>^ but gotta make a PR to the registry code, then publishes will be faster and more reliable.
17:05:08  * Maciek416_joined
17:05:16  * Maciek416_quit (Remote host closed the connection)
17:06:47  <substack>dominictarr: it uses rsa the whole way
17:07:57  <dominictarr>I read somewhere that is slower, asymmetric is much more expensive than symmetric
17:08:14  <substack>I'm not too worried about that for my use-case
17:08:27  <substack>you can always roll your own protocol on top of this
17:08:36  <dominictarr>what are you gonna use it for?
17:09:02  <substack>`cipherhub $GITHUB_USERNAME < secret_message.txt`
17:09:12  <floby>dominictarr: substack: it is slower to encrypt a long file with RSA. but negociating a shared symmetric key would imply a duplex stream, if i'm not mistaken
17:09:17  <floby>also hello substack
17:09:18  <dominictarr>oh nice
17:09:22  <substack>outputs an encrypted base64 blob on stdout that you can copy into an email or GH issue
17:09:31  <substack>this is private GH issues without waiting for github to do it
17:09:42  <dominictarr>floby, no, you'd just encrypt a random key
17:10:01  <substack>floby: that's only for diffie hellman
17:10:07  * kevino80quit (Remote host closed the connection)
17:10:07  <dominictarr>and then the owner of the pub key could decrypt that
17:10:17  <substack>for vanilla RSA you can send somebody a one-way message just knowing their public key
17:10:18  <dominictarr>then, use the key to decrypt a message
17:10:48  * tmcwquit (Remote host closed the connection)
17:11:19  <floby>okay,
17:11:24  * tmcwjoined
17:11:35  <floby>seems like I overthough this
17:11:38  <floby>overthought*
17:11:49  <dominictarr>substack, also: this atomic publish will pave most of the way to having signed packages...
17:11:58  * tmcwquit (Remote host closed the connection)
17:12:08  * DTrejojoined
17:12:13  * tmcwjoined
17:12:56  * fronxquit (Remote host closed the connection)
17:14:14  * fronxjoined
17:15:45  * fronxquit (Remote host closed the connection)
17:16:13  * pgtequit (Remote host closed the connection)
17:19:15  * pgtejoined
17:20:45  * grewebquit (Remote host closed the connection)
17:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 35]
17:25:27  * ins0mniajoined
17:28:14  * techwraithquit (Ping timeout: 240 seconds)
17:30:28  * techwraithjoined
17:33:19  <floby>well I'll be on my way. they've got a node.js UG in Paris now
17:34:08  * thlorenz_joined
17:34:49  * dominictarrquit (Ping timeout: 252 seconds)
17:35:05  * flobyquit (Quit: Leaving.)
17:35:31  * mikolalysenkoquit (Ping timeout: 260 seconds)
17:35:38  * st_lukejoined
17:36:12  <st_luke>thlorenz: you're hilarious
17:36:48  * dominictarrjoined
17:37:10  * brianloveswordsquit (Excess Flood)
17:38:15  * brianloveswordsjoined
17:38:35  * brianloveswordsquit (Excess Flood)
17:38:45  * brianloveswordsjoined
17:39:50  * flobyjoined
17:40:13  <groundwater>prettyrobots: can't tonight, sorry
17:40:16  <thlorenz>st_luke: wow that's the first positive comment regarding myself I've been able to extract from you in a long time :)
17:40:32  <st_luke>what are you working on at conde naste?
17:40:36  <st_luke>a link would be nice
17:40:48  <st_luke>want to check some things on it
17:41:08  <thlorenz>st_luke: all these mentioned packs are open sourced on my account
17:41:15  <st_luke>nah like
17:41:20  <st_luke>a production link
17:41:21  <st_luke>thx
17:42:02  <thlorenz>not sure what you mean by production link -- these are all just tools I'm creating to support us building our website
17:42:22  * flobyquit (Read error: Connection reset by peer)
17:44:35  <dominictarr>isaacs, https://github.com/isaacs/npmjs.org/pull/133
17:46:14  <substack>ok now rsa-stream works
17:46:21  <substack>next up: finishing cipherhub
17:46:36  <substack>isaacs: with cipherhub you won't need to wait for github to implement private issues
17:46:49  * kevino80joined
17:47:12  <substack>you'll just be able to `cipherhub isaacs < secret_issue.txt | xclip` and then paste into the github issue with the base64 blob
17:47:39  * thlorenz_quit (Ping timeout: 259 seconds)
17:47:45  * ryan_stevensjoined
17:48:02  * mikolalysenkojoined
17:48:33  <st_luke>thats cool
17:48:52  <st_luke>I'm starting to think about post-github
17:48:56  <st_luke>what that's going to be
17:49:30  <substack>patch files
17:49:36  <st_luke>because github either can't or doesn't want to keep up with how people are starting to do open source
17:49:40  <substack>piped into `| git am -3`
17:49:42  <st_luke>substack: i really like patch files
17:49:51  <substack>`git am` is the best thing ever
17:50:06  * pkruminspart
17:50:07  <st_luke>any time i work on something with more than myself I use patches mainly
17:50:11  <st_luke>I love git am
17:50:26  * cpupjoined
17:50:54  <st_luke>a really nicely done message board issue tracker with good support for patch links would be cool
17:51:36  <dominictarr>hmm, dont patch files give a different commit hash when you apply them?
17:51:43  <substack>yes
17:51:49  <substack>but you can sign the contents
17:51:51  <dominictarr>that seems like a problem to me. things should be deterministic
17:52:19  <dominictarr>patches should be ABEL to be deterministic... maybe it's a timestamp?
17:53:28  <st_luke>yeah
17:53:32  <st_luke>the timestamp doesn't change
17:53:47  <st_luke>look at the npm commit history
17:54:01  <st_luke>december 9, oct 24, dec 6
17:54:36  <st_luke>there's an authored and committed date
17:57:13  <rowbit>substack, pkrumins: These encoders are STILL down: 50.57.72.69(free7)
18:00:07  <dominictarr>oh, but it puts a committed date into the message?
18:00:40  <dominictarr>hmm, I guess it will only be the commit that is different, but the tree will be the same
18:00:47  <dominictarr>so you could sign the tree
18:01:38  * calvinfojoined
18:03:03  * pgtequit (Remote host closed the connection)
18:04:05  * ednapiranhajoined
18:04:27  * pkruminsjoined
18:04:27  * pkruminsquit (Changing host)
18:04:27  * pkruminsjoined
18:04:55  <chapel>the person that created the patch should have been working on a branch, because they would merge the now patched master to theirs
18:06:09  <groundwater>anyone know a node module which can take a stream, and call a function for each newline of the stream
18:06:32  <groundwater>process.stdout.on('data', ...) emits big chunks, i want to split them up into single line chunks
18:09:19  <creationix>groundwater, I don't know of an npm module, but I've written that code several times and even said once it should be part of node's standard library
18:09:43  * tilgovijoined
18:09:56  <creationix>groundwater, is your input ASCII or unicode text?
18:10:22  <groundwater>creationix: https://github.com/jahewson/node-byline i'm trying this right now
18:10:41  <groundwater>it's ASCII, just a child process that's emitting some status messages
18:10:46  <spion>s.pipe(split()).on('data', function(line) { ... })
18:10:51  <spion>var split = require('split');
18:11:20  <creationix>cool, so there are modules for this. I hoped there would be
18:11:42  <groundwater>spion: awesome!
18:12:36  <groundwater>creationix: there is always a module
18:12:38  <groundwater>lol
18:13:00  * tmcwquit (Remote host closed the connection)
18:13:08  <creationix>back in my day we didn't even have binary data or this fancy node package maid
18:13:13  * fronxjoined
18:13:19  <creationix>we did everything with arrays of numbers
18:13:36  * tmcwjoined
18:13:39  <creationix>and if you wrote unsigned 8-bit numbers in, sometimes signed 8-bit integers would come out
18:13:44  <creationix>those were the days...
18:14:21  * tmcwquit (Read error: Connection reset by peer)
18:14:33  * tmcwjoined
18:21:18  <creationix>wow, finding that actual conversation from back in 2009 is actually quite difficult. That seems eons ago in node time.
18:22:51  * peutetrequit (Quit: peutetre)
18:24:03  <rowbit>Hourly usage stats: [developer: 1, free: 42]
18:24:11  <Raynos>izs, Domenic_, st_luke: It looks like npm doesn't parse `git+ssh://[email protected]:rt-logger` as a proper thing. `npm i git+ssh://[email protected]:rt-logger` works just fine but putting it in the package.json and running `npm i` or `npm i rt-logger` fails
18:24:19  <Raynos>where is the parser that fails on this ?
18:24:29  <Raynos>It sounds like it should be a simple `git+ssh` parser bug fix
18:26:13  * trevnorrisquit (Ping timeout: 248 seconds)
18:28:46  * flobyjoined
18:29:05  * peutetrejoined
18:30:14  * pfrazejoined
18:30:42  * peutetrequit (Client Quit)
18:32:00  <st_luke>what if you do rt-logger.git ?
18:32:22  <st_luke>surprised uber doesnt just use github
18:33:20  * dominictarrquit (Ping timeout: 245 seconds)
18:35:36  <Raynos>st_luke: we do.
18:35:50  <Raynos>but githubs pricing model for small modules sucks balls
18:36:12  <Raynos>so adding .git doesnt work
18:40:57  <gozala>Raynos: do you have any experience with node’s segmentation faults ?
18:41:56  <Raynos>gozala: not really i tend to ragequit when i see them
18:42:10  <Raynos>gozala: first try to reproduce without binary deps then try different versions of node
18:42:16  <Raynos>gozala: also `npm rebuild` to recompile binaries
18:42:25  <gozala>Raynos: I don’t have binary deps
18:42:34  <Raynos>i have seen node segfault before
18:42:45  <Raynos>i've seen node fail with C++ assertion errors (when using dgram)
18:42:55  <Raynos>C++ assertion errors are pretty easy
18:42:58  <Raynos>segfaults are :/
18:43:06  <Raynos>trial and error debugging
18:43:10  <ogd>groundwater: theres also binary-split if you care about perf
18:43:39  <gozala>Raynos: do you know any way to debug them ?
18:43:54  * thlorenz_joined
18:44:35  <gozala>my program just pareses strings but on some input it seems to segfault
18:44:57  <gozala>if I put some log statements it no longer does :(
18:45:42  * trevnorrisjoined
18:46:05  <floby>gozala: you can try compiling node in debug mode and running it in valgrind. there are some options that can get you a stack trace where the segfault happens. I used it when working on libspotify
18:46:49  <gozala>floby: thanks, I might try that
18:47:24  <floby>gozala: I can't find the article where I read about that, but it's definitely better than nothing
18:48:00  <gozala>floby: right now trying to detect which change introduced that regression
18:48:05  <Raynos>st_luke, izs: false alarm. I had a shrinkwrap so it was ignoring my package.json.
18:48:22  <gozala>floby: how did you fixed it btw ?
18:48:31  <gozala>I mean what was an issue ?
18:50:44  <floby>gozala: the libspotify C library sucks ass and can't create more than one session per process.
18:51:00  <floby>gozala: never really fixed it, can't fix it without the source code
18:51:19  <gozala>floby: I see
18:51:43  <gozala>yeah the scary thing is same code works fine in browser js
18:55:34  * indexzerojoined
18:57:06  <creationix>https://twitter.com/creationix/status/410845334806339584
18:57:30  * thlorenz_quit (Ping timeout: 245 seconds)
18:57:47  <ogd>creationix: care to elaborate?
18:57:56  * fronxquit (Remote host closed the connection)
18:57:56  <groundwater>creationix: feeling nostalgic?
18:58:06  <creationix>just a little
18:58:15  <creationix>and reflecting on how we got where we are
18:58:28  <creationix>I realize that there aren't many people left from the early days
18:58:34  <creationix>and that history is being forgotten
18:58:43  * insertcoffeequit (Remote host closed the connection)
18:59:02  <ogd>creationix: are there causes that now lack a standard bearer?
18:59:16  <creationix>ogd, not sure what you mean
18:59:57  <ogd>creationix: things that used to be important to node that are now under represented
19:00:12  <ogd>well not to node per se but to the people that use it (the 'community')
19:00:19  <creationix>well, back in the day we didn't think about being nice, it just happened
19:00:31  <creationix>there were few people all working towards a common goal
19:01:07  * kevinswiberjoined
19:01:12  <creationix>and now that goal is fulfilled and most my early friends are gone
19:01:22  * fronxjoined
19:01:38  <creationix>popularity, power, and pride are dangerous things
19:02:33  <ogd>i think part of it is the early adopter buzz wears off (speaking as a early adopter myself)
19:03:02  <creationix>well that's part
19:03:10  <creationix>as people start using a project, you have to be responsible
19:03:10  * fronxquit (Remote host closed the connection)
19:03:18  <creationix>which means not changing things you would otherwise change
19:03:35  <creationix>and doing boring stuff like writing docs, fixing bugs, and performance fixes
19:03:42  <creationix>that change I expected
19:03:58  * ednapiranhaquit (Quit: Leaving...)
19:04:13  <creationix>but this political mess drives me crazy. It's almost as if the air is charged with angst and the tiniest spark explodes into something huge
19:04:47  <creationix>I mean really, how did a pull request about a grammatical change turn into a week-long flame way?
19:04:53  <creationix>*war
19:05:16  <creationix>I've been in Italy the last couple weeks and I hear them using "he" all the time to refer to parts of a program that obviously don't have gender.
19:06:06  <ogd>ahh right
19:06:12  <ogd>yea that got coopted twice
19:06:15  <ogd>really sad to see
19:06:21  <creationix>and yes I know the issue was more than pronouns. It became more than pronouns because of the charge in the air
19:06:30  * mikolalysenkoquit (Ping timeout: 246 seconds)
19:06:37  <creationix>back in 2009, this would not have happened for several reasons
19:06:50  <creationix>but mostly because we didn't take ourselves seriously like today
19:07:11  <ogd>ive said before that i'll switch to whatever community has the most tinkerers and the best package manager :)
19:07:23  <substack>as communities scale up they tend to attract more hostility
19:07:25  <creationix>yeah, node is still great for that kind of stuff
19:07:36  <substack>that's why it's good to break big communities up into tinier, friendlier ones
19:07:44  <creationix>npm is pretty amazing
19:07:55  <st_luke>the political side of it is really exhausting.
19:08:03  <creationix>substack, yep
19:08:52  <st_luke>if something comes out that has a great package manager and module system I'll gladly give it a chance
19:11:56  <st_luke>also no tech debt yay
19:12:30  * kevinswiberquit (Ping timeout: 245 seconds)
19:12:45  <ogd>yea i dont blame the people throwing their hats in the ring trying to make a client side package manager
19:12:53  <ogd>i just dont think any of the approaches are correct
19:14:08  <st_luke>ogd: are you talking about things like bower or things like component
19:14:09  <st_luke>or both
19:14:39  <ogd>both
19:15:21  <st_luke>I like the bower website
19:15:38  <jjjohnny_>if bower could install ruby I might use it
19:15:44  <floby>I've been here since the early days, even though I never really got involved, I can only name less than 10 names from these times who are still around
19:15:46  <ogd>yea they have a cool bird logo
19:16:13  <floby>but mostly because of my bad memory for names
19:16:18  <ogd>heh
19:16:54  <st_luke>I underestimated how much things changed since I started getting involved in 2011
19:17:07  <ogd>i stole rvagg's approach to splitting up tests so they they could be easily browserified and also run individually, feedback? https://github.com/maxogden/dat/blob/master/test/run.js
19:18:41  <grncdr>hm, what's wrong with tape <filename> ?
19:19:12  <grncdr>and having "test": "tape test/*.js" in your scripts?
19:19:35  <ogd>oh right the third aspect was that i wanted to require the tests from other modules
19:20:00  <ogd>e.g. https://github.com/rvagg/abstract-leveldown/tree/master/abstract
19:20:34  <grncdr>sorry I'm not sure what I'm looking at in this folder
19:20:43  <ogd>a test sutie that can be require()'d
19:20:44  <st_luke>i like that pattern
19:20:48  * crank_joined
19:20:50  <rch>ogd: i like it
19:21:35  * crank_quit (Client Quit)
19:22:12  <grncdr>oh I see what's going on a bit more now
19:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 51]
19:24:15  <Raynos>ogd: I tend to just have `index.js` in tests contain 20 requires for all the other tests. then I can run `node test/index` or `node test/file`
19:24:33  * ITprojoined
19:24:51  <Raynos>ogd: If you need to inject environment details into a test then I've done this before ( https://github.com/Raynos/gens/blob/master/test/test-generators.js#L6 )
19:24:57  * ITprochanged nick to Guest22136
19:24:58  <grncdr>ogd: is the idea that another module could use your tests (I think that's what abstract-leveldown is doing)
19:25:18  <ogd>grncdr: yea
19:25:28  <ogd>Raynos: nice
19:25:35  <grncdr>hm, I could probably use something like that for any-db to be honest
19:26:06  <ogd>it adds a bit of boilerplate, e.g. having to wrap everything in module.exports = and having a module.exports.all =
19:26:09  <ogd>but i bet it can be modularized
19:27:06  <grncdr>why not replace the module.exports.all bit with a function in your runner that just iterates over the tests in a given module
19:27:16  <grncdr>runAllTests(require('tests/whatever'))
19:27:30  * fronxjoined
19:27:32  <grncdr>since presumably a test module isn't going to export non-test code?
19:28:05  <rch>framework vs library
19:28:05  * mikolalysenkojoined
19:28:23  <grncdr>rch: was that a response to me?
19:28:32  <rch>sort of. not a very complete one.
19:28:41  <grncdr>:D I think I got it, but I'm not sure
19:28:55  <grncdr>I just mean have that function inside the test/run.js file
19:29:04  <rch>your take is reasonable i just like more imperative tests better. it's a fuzzy line between an individual test file which can be executed and then something which is tightly coupled to a specific calling context.
19:30:19  <rch>so ogd's approach has a single interface, the .all() method, instead of calling every exported function
19:30:47  <rch>https://github.com/maxogden/dat/blob/master/test/tests/crud.js#L80
19:30:50  <rch>all in a spectrum
19:31:02  <grncdr>hm, yeah but running an individual file still requires you to call it through the test runner
19:31:23  <grncdr>so the individual test files can't be executed without being called in that context anyways
19:31:24  <rch>in this case yep
19:31:53  <rch>i'm conflicted but as you get more and more test code i guess it pays off more and more
19:32:42  <grncdr>I agree with you, but in this specific case, the library/framework boundary has already been crossed
19:32:45  <rch>grncdr │ hm, what's wrong with tape <filename> ? <—— obviously my favorite
19:32:47  <rch>totally
19:33:20  <grncdr>but you like it ;)
19:33:23  <rch>module.all() is one interface point, treating test modules as implicit collections of test functions is a bit deeper
19:33:46  <ogd>if tape knew how to do what test.all() did automagically then it would be a nice middleground mebbe
19:34:05  <grncdr>ogd: it does ;)
19:34:09  <rch>it does?
19:34:21  <grncdr>what it doesn't know is how to provide your injected data to your tests
19:34:32  <grncdr>hence the need to roll a (tiny) framework to handle that aspect
19:35:13  <grncdr>without that, tape <glob pattern> is entirely equivalent
19:35:16  <ogd>if i have foo.js === 'module.exports = function(tape) { tape('foobar', doSomeTest) }' i can do tape foo.js and it will run the 'foobar' test with tape === require('tape') ?
19:35:23  <rch>i wonder if that can be generalized in a useful way
19:35:35  <grncdr>ogd: no, but how is that useful?
19:35:55  <grncdr>I'm not trolling, I'm genuinely curious
19:36:00  <ogd>grncdr: because then my tests arent tied to require('tape')
19:36:33  <rch>i feel like https://github.com/maxogden/dat/blob/master/test/tests/crud.js#L60 <—— the (test, common) thing is a flexible and common scenario
19:36:36  <grncdr>ohh.. so like somebody could use your tests with tap instead?
19:36:50  <rch>the test expects some injected common test module/state
19:36:55  <grncdr>because at the end of the day, you're using the tape/tap API
19:37:06  <ogd>yea e.g. https://github.com/rvagg/node-leveldown/blob/master/test/make-test.js#L1-L2 vs https://github.com/maxogden/level.js/blob/master/test.js
19:38:38  <grncdr>in the past I've done that kind of thing by passing in a test object
19:38:55  <grncdr>e.g. test("something", function (t) { require('blah')(t) })
19:39:14  <grncdr>but I don't think I've done this well, so I'm not advocating my approach
19:39:19  <rch>where t is what?
19:39:37  <rch>yeah mostly i've seen big test frameworks go wrong which is what makes me worry as things frameworkify
19:39:52  <grncdr>https://github.com/grncdr/node-any-db/blob/master/test/helpers.js#L26
19:40:05  <grncdr>actually https://github.com/grncdr/node-any-db/blob/master/test/helpers.js#L75
19:40:10  <grncdr>is more illustrative
19:40:50  <grncdr>but yeah, that example is *very* frameworky
19:41:16  <grncdr>the tests themselves do require('./helpers').allDrivers(…) or similar
19:41:38  <grncdr>so they can still be run individually with node test/filename.test.js
19:41:48  <rch>huh
19:42:13  <grncdr>like I said, I'm not advocating it, because I'm not super happy with it
19:42:41  <grncdr>but it does the job, and keeps the entry points to tests simple
19:44:30  <grncdr>so yeah, I guess I'd describe that pattern as an inversion of the pattern rvagg and ogd are using
19:45:00  * flobyquit (Quit: Leaving.)
19:46:18  <grncdr>the "framework" is higher order functions to be used in "normal" test scripts, vs. a runner that expects test objects that implement a certain interface
19:47:34  <rch>heh https://github.com/grncdr/node-any-db/blob/master/test/package.json#L4
19:47:41  <rch>i think i need to dig into this more to get it
19:47:53  <grncdr>well, that's not actually a good sign
19:47:56  <grncdr>:)
19:48:16  <grncdr>I've done a bunch of stuff in any-db that is a bit unconventional
19:48:32  <grncdr>and I will probably undo a fair bit of it in time
19:49:07  <spion>I like that transaction state machine (once methods stopped being deleted) :D
19:49:24  <rch>aha
19:49:26  <rch>https://github.com/grncdr/node-any-db/blob/master/test/nested_transactions.test.js
19:49:36  <rch>crazy
19:49:53  <grncdr>rch: the nested-ness of it?
19:49:59  <rch>https://github.com/grncdr/node-any-db/blob/master/test/helpers.js#L38
19:50:01  <rch>I get it now
19:50:11  <rch>You basically wrap tap
19:50:12  <grncdr>spion: ugh, that tx state machine is crazy
19:50:15  <grncdr>rch: yeah
19:50:21  <rch>provide a library test modules can use to run their tests
19:50:38  <rch>not that abstract just looks abstract
19:50:44  <spion>how do you guys do database-tied testing anyway
19:50:53  <spion>most tests require that the database be in a given state
19:51:02  <spion>and mocks can't ensure you're doing the right thing
19:51:11  <grncdr>spion: sqlite3 in memory
19:51:34  <grncdr>for 99% of use cases I just load fixtures, run the test and assert query results after
19:52:05  <grncdr>but honestly I haven't written tests for a *real* node app in well over a year
19:52:25  <grncdr>spion: I also have very very few database tests if I can help it
19:52:37  <spion>:/
19:53:11  <grncdr>I just mean that I like to test most things in smaller units, and have a relatively few tests that actually rely on external systems
19:53:20  * fronxquit (Remote host closed the connection)
19:53:34  <spion>no logic in SQL queries?
19:53:45  <grncdr>spion: not sure I follow?
19:53:49  * thlorenz_joined
19:54:18  <spion>I suppose the question is, how to test more advanced sql queries.
19:54:34  <isaacs>substack: so, is there a non-github cipher thingie i can use?
19:54:35  * ilterisquit (Ping timeout: 260 seconds)
19:55:01  <grncdr>spion: well, I do a couple of things
19:55:21  <spion>i have quite a few, and I was loading fixture data, but then I realized I have to evolve the data too when my database changes
19:55:29  * ilterisjoined
19:55:34  <grncdr>spion: yes
19:55:42  <grncdr>I was using this: https://github.com/BetSmartMedia/gesundheit to create my queries
19:55:45  <spion>so I decided to actually use the data creation functions of my classes
19:55:53  <spion>and make sure they're consistent with the data-fetching functions later :D
19:56:17  * kevinswiberjoined
19:56:27  <grncdr>spion: yeah, that is generally a good idea if you are using model-like objects for data
19:56:39  <grncdr>activerecord or datamapped or whatever
19:56:45  <substack>isaacs: there's `openssl rsautl` or you can use https://npmjs.org/package/rsa-stream
19:57:39  <grncdr>anyways, about testing complicated queries, because I was using a programmatic query builder, I had modules that were responsible for constructing the more complicated queries, and I would unit test that those modules were creating the correct queries for given inputs without actually running the queries
19:58:04  <grncdr>e.g. I would feed some data in, get a query object back, and assert properties of the query object
19:58:11  <Raynos>spion: you can do integration or unit tests :p
19:58:20  <Raynos>spion: integration tests involve getting the db in the right state
19:58:27  <spion>grncdr, ah, usiing brianc's node-sql, which is very well tested.
19:58:41  <grncdr>spion: right, so you could do the same thing there
19:59:28  <grncdr>e.g. you take some function that generates the query without actually running it, and test that it does what it's supposed to do
19:59:38  <spion>Raynos, thats what I'm doing. get the db in the right state, run a "process" class, then check if the process brought the db into the correct state.
20:01:17  <spion>e.g., sendMessage({from: user1, to: user2, attachment: fileStream}), then fetchMessages({for: user2}) and expect them to contain a message that has an unread flag, has an attachment and has the same properties as the sent attachment.
20:01:44  <spion>and I keep wishing that someone tells me that I'm doing it wrong
20:01:44  <spion>:D
20:02:29  <grncdr>you're doing it wrong
20:02:43  <grncdr>(I don't know what's better, but I wanted you to be happy ;))
20:02:52  <spion>dang.
20:02:53  <spion>:D
20:03:27  <spion>yeah it works nicely except having to reset the db and prepare the state for every test
20:03:42  <spion>but hmm if I switch to in-memory sqlite maybe it will run faster for quicker checks
20:03:48  <spion>then at the end run them once with postgres
20:04:01  <grncdr>in-memory sqlite will definitely speed things up to a point
20:04:22  <grncdr>but if you have a lot of tests then it's better to reduce the proportion of them that rely on the db
20:04:38  <grncdr>imo anywayws
20:05:22  * flobyjoined
20:05:29  <grncdr>e.g. test as many properties of your system in isolation as you can
20:05:29  * rwaldron-changed nick to rwaldron
20:05:41  <grncdr>if it's hard to test things in isolation, they're probably too coupled :)
20:06:27  <spion>no, its more of making sure, "will the main actions our users do continue working after this commit?"
20:06:28  <spion>:D
20:07:15  * thlorenz_quit (Ping timeout: 260 seconds)
20:07:18  <spion>but yea, its possible that our system can be decomposed in a better way
20:07:38  <substack>isaacs: is there a way to `npm run` without printing the lines that look like: > [email protected] test /home/substack/projects/dnode
20:07:51  <spion>(infact its definitely true)
20:08:35  <grncdr>spion: it's always true ;)
20:08:45  <grncdr>and yeah, those sorts of tests are very valuable
20:08:56  <grncdr>which is why I like having a CI server run them for me
20:09:30  <grncdr>but I'm biased because lately I've been working on systems where user actions take minutes to complete
20:09:38  <grncdr>for reasons outside of my control
20:09:49  <grncdr>(spawning a bunch of VMs, snapshotting etc)
20:10:18  <grncdr>so it's like, I can't actually run those kinds of tests continuously, because it takes 10-15 minutes every time
20:10:25  <grncdr>which is super lame
20:10:31  * kevinswiberquit (Ping timeout: 240 seconds)
20:12:01  <spion>:(
20:23:25  * fronxjoined
20:24:03  <rowbit>Hourly usage stats: [developer: 0, free: 49]
20:24:30  <Raynos>spion: So I tend to do multiple levels of stuff. In the data layer i test mocks & data interaction
20:24:43  <Raynos>spion: in the domain / model level. I put the db in the correct state by calling domain & model methods.
20:24:56  <Raynos>spion: in the HTTP / app level. I put the system in the correct state by making HTTP requests
20:25:22  <Raynos>spion: I do tend to query the database in my assert statements though because my database has a lot of invisible things from the app / model layer
20:25:39  <Raynos>spion: but putting in correct state and reverting tends to be using the apis & methods at the layer im working at
20:35:50  * fronxquit (Remote host closed the connection)
20:38:22  * fronxjoined
20:42:21  * kevinswiberjoined
20:46:02  * fronxquit (Remote host closed the connection)
20:50:58  <spion>sounds reasonable
20:51:29  <spion>I'm trying hard to avoid model classes, instead I split them into actions and views
20:51:54  <spion>in a couple of previous projects, model classes tended to grow quickly and accumulate everything :D
20:52:06  * kevinswiberquit (Remote host closed the connection)
20:52:29  <spion>"everything related to this chunk of data, and also, other chunks perhaps maybe probably, sometimes"
20:52:33  <spion>:D
20:55:20  <spion>"I'm just going to add calculateTotal to Order, what could possibly go wrong?"
20:56:04  <spion>later: we need to support coupons, and deals, and sales, and X% off...
21:01:32  <spion>... so... CostCalculator, which is a view
21:01:36  * _Contrachanged nick to contrahax
21:02:13  <spion>recurses nicely too, as costcalculator may utilize other calculator views to arrive at the output
21:02:32  <spion>err, nests
21:03:13  * FireFlypart ("WeeChat 0.4.0")
21:03:42  * thlorenz_joined
21:08:06  * clone1018quit (Read error: Connection reset by peer)
21:09:24  * st_lukequit (Remote host closed the connection)
21:13:01  * no9joined
21:16:53  * thlorenz_quit (Ping timeout: 240 seconds)
21:20:31  <Raynos>spion: I had data, domain & route. domain is where logic goes.
21:20:36  <Raynos>domains are large, heavy & hairy
21:20:40  <Raynos>because thats what a business is
21:23:06  * tilgoviquit (Remote host closed the connection)
21:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 33]
21:24:32  * peutetrejoined
21:32:56  * flobyquit (Remote host closed the connection)
21:35:08  * st_lukejoined
21:58:44  * st_lukequit (Remote host closed the connection)
22:09:04  * robertkowalskiquit (Ping timeout: 260 seconds)
22:09:13  * robertkowalskijoined
22:13:37  * thlorenz_joined
22:16:04  * clone1018joined
22:16:35  * clone1018quit (Read error: Connection reset by peer)
22:18:36  * tilgovijoined
22:22:16  * maksimlinjoined
22:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 46]
22:26:01  * clone1018joined
22:26:50  * jxsonjoined
22:26:59  * thlorenz_quit (Ping timeout: 250 seconds)
22:37:49  * kevino80quit (Remote host closed the connection)
22:40:44  * fronxjoined
22:45:05  * Maciek416quit (Remote host closed the connection)
22:47:35  * ferossjoined
22:51:16  * no9quit (Ping timeout: 240 seconds)
22:53:04  * kevinswiberjoined
23:00:58  * kevinswiberquit (Remote host closed the connection)
23:08:48  * jxsonquit (Remote host closed the connection)
23:13:26  * fronxquit (Ping timeout: 264 seconds)
23:13:38  * jcrugzzjoined
23:21:10  * mikolalysenkoquit (Ping timeout: 246 seconds)
23:23:35  * thlorenz_joined
23:24:04  <rowbit>Daily usage stats: [developer: 3, free: 924]
23:24:04  <rowbit>Hourly usage stats: [developer: 2, free: 45]
23:24:42  * tilgoviquit (Ping timeout: 252 seconds)
23:24:42  <jesusabdullah>sweet I found cool opengarden homie from sudoroom on twatter
23:29:01  <jesusabdullah>substack: I should tell you about this job interview I just got back from, you'd think it's hilarious
23:30:00  * AvianFluquit (Ping timeout: 245 seconds)
23:31:04  * peutetrequit (Quit: peutetre)
23:32:12  <jesusabdullah>substack: these dudes have a java-based MMO backend (pubsub with reactions to events) that shits itself at 26k concurrents lol
23:34:01  <Raynos>ogd: github.com/maxogden/bytewiser this is pretty badass
23:34:08  <jesusabdullah>substack: they gave me "javascript under pressure" as the code test challenge thing, they were actively cheering me on as I kicked its fucking ass (again)
23:34:21  <jesusabdullah>"oh a reduce? OH ANOTHER REDUCE??? Shit just got REAL"
23:35:09  * mikolalysenkojoined
23:36:38  * thlorenz_quit (Ping timeout: 240 seconds)
23:38:24  * Maciek416joined
23:41:33  <Raynos>jesusabdullah: is that the test that was recently on twitter ?
23:42:20  * thlorenzquit (Remote host closed the connection)
23:42:33  <Raynos>jesusabdullah: thats really hard to do an interview, the only way to do it properly would be at the end as "and now for fun, lets do this thing, lets see if you can out race us" followed by very vocal "awesome you beat my ass" or "aw man, you put up a good fight. next time youll get me, haha."
23:45:23  * tilgovijoined
23:46:02  * tmcwquit (Remote host closed the connection)
23:46:23  * tearmannjoined
23:46:36  * tmcwjoined
23:53:41  * peutetrejoined
23:54:44  <chapel>I am doing my first interview friday (I am interviewing someone else), any tips?
23:56:50  * timoxleyjoined
23:57:14  <rowbit>substack, pkrumins: These encoders are STILL down: 50.57.72.69(free7)
23:57:44  <tearmann>chapel what do you want them to do?