00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:07  * ircretaryjoined
00:01:22  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
00:01:22  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
00:03:32  <substack>yay
00:08:16  * AvianFluquit (Remote host closed the connection)
00:08:49  <defunctzombie>Raynos: dominictarr: I converted a markdown file and rendered it in tryme
00:08:59  <defunctzombie>after bundling and such.. lots of crazy hacks but it worked
00:09:09  <dominictarr>defunctzombie cool! link?
00:09:34  <defunctzombie>dominictarr: not yet... it isn't quite there cause I hardcoded the readme path
00:09:52  <defunctzombie>but after I change up some things in the loading process I think I can push a working version
00:10:32  * yorickquit (Remote host closed the connection)
00:14:12  <defunctzombie>dominictarr: one annoyance is that it creates a temporary js file
00:14:20  <defunctzombie>because it bundles that to capture all the requires
00:14:28  <defunctzombie>I might have a way around that tho
00:15:05  <dominictarr>yup, I have that too
00:15:17  <dominictarr>just delete it after
00:15:39  <dominictarr>did i link to https://github.com/dominictarr/demonstrate
00:16:35  <defunctzombie>nope
00:16:36  <defunctzombie>nice
00:16:38  <defunctzombie>"Ironically, this readme is not demonstratable." :(
00:17:03  <defunctzombie>so some comments I ran into
00:17:07  <defunctzombie>that you may or may not have
00:17:18  <defunctzombie>I only make a code block interactive if it ends in // =>
00:17:29  <defunctzombie>that way you can still have regular example code and such
00:19:48  <defunctzombie>dominictarr: I like it :) I think the readme idea is a great approach in addition to just having plain examples
00:20:28  <substack>https://www.youtube.com/watch?v=zi9Zpx2dkxM
00:20:34  <dominictarr>yes, the more (modules) the merrier
00:23:23  <defunctzombie>I like that the different example sections are more isolated
00:23:28  <defunctzombie>it is more like an interactive document
00:23:31  <defunctzombie>which is really the goal
00:23:47  <defunctzombie>I should style tryme better, and make it render readmes :)
00:24:02  <defunctzombie>dominictarr: what do you think of the // => requirement?
00:25:32  <dominictarr>well, I don't mind
00:26:21  <defunctzombie>dominictarr: also need to figure out how to handle the case of invalid js code in a code block
00:26:26  <dominictarr>on demonstrate if you use <pre class=noedit><code>…</code></pre> you get a static thing
00:26:52  <dominictarr>well, the browserify step won't work if the js is invalid
00:27:22  <substack>https://www.youtube.com/watch?v=AeAJ2IKmItg
00:27:38  <substack>midi files, so good
00:28:02  <defunctzombie>dominictarr: yea, which would be nice to catch (I think I can) and not use that section
00:28:21  <defunctzombie>dominictarr: also, you require() in each section
00:28:33  <dominictarr>yes.
00:29:16  <dominictarr>that is necessitated by the approach i've used
00:29:30  <defunctzombie>yea, I am wondering
00:29:41  <dominictarr>but i feel it's a reasonable requirement
00:29:51  <dominictarr>each textarea is evaled separately
00:30:15  <defunctzombie>the only think I like about not having that requirement is that your document cascades
00:30:47  <defunctzombie>but that gets more complex certainly
00:31:02  <ralphtheninja>dominictarr: I like demonstrate a lot, nice work!
00:31:07  <defunctzombie>as in, you can build on existing values
00:31:40  <dominictarr>substack: I want to hear a live jazz version of that first simcity midi
00:32:46  <dominictarr>or, maybe all jazz musicians, playing eletronic instruments through the FM chip on a single SoundBlaster 16
00:32:50  <substack>dominictarr: did you see asynth? https://github.com/substack/asynth
00:33:05  <dominictarr><click>
00:33:14  <substack>hooked up jjjjohnnny's usb midi keyboard to the computer machine
00:33:19  <CoverSlide>can you output to midi?
00:33:25  <dominictarr>oh sweet!
00:33:31  <CoverSlide>i mean .mid
00:35:27  * ins0mniaquit (Ping timeout: 244 seconds)
00:35:27  <substack>.MID because .MIDI is too much for fat12 to handle
00:35:29  <substack>awww yeah
00:38:38  * dominictarrquit (Read error: Connection reset by peer)
00:38:49  * dominictarrjoined
00:40:05  * mirkokquit (Quit: mirkok)
00:55:13  * alunnyquit (Ping timeout: 240 seconds)
01:04:53  * alunnyjoined
01:14:51  * mikealquit (Quit: Leaving.)
01:15:54  * mikealjoined
01:51:59  * dguttmanquit (Quit: dguttman)
01:52:26  * chrisdickinsonquit (Read error: Operation timed out)
01:55:11  * chrisdickinsonjoined
01:56:05  <dominictarr>defunctzombie: gozala it looks like it's time for a successor to code mirror to be built using content editable http://html5demos.com/contenteditable
01:57:00  <gozala>dominictarr: content-editable is far from there
01:57:05  <gozala>codemirror 1 used it
01:57:14  <defunctzombie>dominictarr: I tried to use ace just now, but that was a disaster
01:57:19  <gozala>I believe eclipse orion is using it now
01:57:21  <defunctzombie>codemirror is doing alright for now
01:58:14  <dominictarr>that demo I linked to is pretty slick - what is wrong with content-editable?
01:58:22  <alunny>exit
01:58:32  <alunny>oops, wrong window
01:58:45  * alunnyquit (Quit: leaving)
01:59:27  * alunnyjoined
02:00:48  <defunctzombie>dominictarr: I think I have rethought the approach which should let me do interesting stuff with README rendering and regular examples!
02:00:53  <defunctzombie>and simplify some stuff
02:01:00  <dominictarr>cool!
02:10:15  * mikealquit (Quit: Leaving.)
02:15:18  * mikealjoined
02:22:06  * mikealquit (Quit: Leaving.)
02:48:07  * mikolalysenkojoined
02:52:22  * mikealjoined
02:55:26  * alunnyquit (Ping timeout: 245 seconds)
03:11:08  * mikolalysenkoquit (Quit: leaving)
03:11:32  * mikolalysenkojoined
03:14:00  <defunctzombie>dominictarr: for observable, one of the examples you return 'v'
03:14:10  <defunctzombie>are you handling that specially in your static generator?
03:14:23  <defunctzombie>what did you decide to do for functions?
03:20:28  * alunnyjoined
03:21:48  * jibayquit (Quit: Leaving)
03:23:36  <dominictarr>defunctzombie: since I built it using hyperscript it supports observables https://github.com/dominictarr/demonstrate/blob/master/_demo.js
03:23:42  <defunctzombie>yea, I saw that
03:23:47  <defunctzombie>I dug into it
03:23:50  <dominictarr>the function has to be an observable
03:23:54  <defunctzombie>hm
03:24:04  <defunctzombie>my first generic pass will probably not support that
03:24:15  <defunctzombie>since that is pretty tailored to that module I think
03:24:24  <defunctzombie>anyhow, my goal is this (almost htere)
03:24:33  <defunctzombie>if you open a README.md path (or any .md path really)
03:24:39  <defunctzombie>then it will try to make that interactive as a readme
03:24:50  <defunctzombie>if you open a .js path then it will do something similar to what it does now
03:24:53  <dominictarr>yeah, I did that because I wanted to use demonstrate to demonstrate hyperscript, so it was a good idea at the time
03:25:02  <defunctzombie>yea, I can dig it
03:25:08  <defunctzombie>the observable stuff is pretty cool
03:25:34  <defunctzombie>also that setInterval is evil
03:25:39  <defunctzombie>anytime you edit that block
03:25:42  <mikolalysenko>hi everyone, I got another stream question: what is the best way to implement a custom stream?
03:25:43  <defunctzombie>it makes new intervals hahaha
03:25:48  <mikolalysenko>should I just inherit from stream?
03:25:54  <defunctzombie>probably
03:26:04  <defunctzombie>or just use one of dominictarr's modules
03:26:06  <dominictarr>mikolalysenko:
03:26:06  <dominictarr>no
03:26:11  <defunctzombie>you most likely want through
03:26:14  <dominictarr>what sort of stream are you making?
03:26:15  <defunctzombie>or some such module haha
03:26:25  <mikolalysenko>I am writing a module to sequentially compose streams
03:26:43  <mikolalysenko>I want to be able to insert a stream into another stream, just like a write
03:26:49  <dominictarr>hmm, do you mean like http://npm.im/kat ?
03:26:52  <mikolalysenko>yeah
03:26:55  <mikolalysenko>but kat doesn't quite work
03:27:03  <mikolalysenko>since it requires you insert all the streams up front
03:27:12  <mikolalysenko>whereas my inserts will be happening asynchronously
03:27:28  * AvianFlujoined
03:27:29  <mikolalysenko>kat has the unfortunate behavior that it ends when the stream drains
03:27:37  <dominictarr>but you want to be able to insert something before something else?
03:27:41  <mikolalysenko>yeah
03:27:46  <mikolalysenko>basically I want to tokenize a document
03:27:50  <dominictarr>it ends on drain?
03:27:52  <mikolalysenko>and replace certain tokens with image streams
03:27:57  <dominictarr>that sounds like a bug
03:27:58  <mikolalysenko>not the "drain" event
03:28:04  <mikolalysenko>but it ends when all the streams you added run out
03:28:09  <mikolalysenko>so you have to add all the streams first
03:28:10  <dominictarr>oh...
03:28:14  <mikolalysenko>and there is no explicit end method
03:28:24  <mikolalysenko>it is kind of a weird design, and doesn't work for me
03:28:37  <dominictarr>maybe you could just fork cat?
03:28:44  <mikolalysenko>perhaps
03:29:24  <dominictarr>hmm, you could do this really easy with through
03:29:35  <mikolalysenko>ok, how?
03:29:45  <dominictarr>have a base stream
03:29:50  <dominictarr>base = through()
03:29:55  <dominictarr>then add looks like this:
03:30:05  * alunnyquit (Ping timeout: 244 seconds)
03:33:00  <dominictarr>function add( s) { q = through().pause(); buffer.push(q); if(buffer.length > 1) return; function next() {p = buffer.shift(); p.pipe(base, {end: false}); p.on('end', next())}; next() }
03:33:26  <dominictarr>okay, that doesn't check if base has ended
03:33:36  <dominictarr>oh, and i forgot to add p.resume()
03:33:44  <mikolalysenko>yeah... it is a bit complicated
03:34:00  <dominictarr>haha, still! that is only a few lines
03:34:10  <mikolalysenko>well, I would have to think about it
03:34:57  <mikolalysenko>also how do you handle intermediate writes?
03:35:19  <mikolalysenko>or would you just have to turn them into a stream and call add?
03:35:42  <mikolalysenko>and when you end the stream, you still need to put in some code to deal with that case
03:35:52  <mikolalysenko>since you have to wait until all the intermediate streams complete
03:36:04  <mikolalysenko>and you also need some way to gracefully kill all the streams when you hit an error
03:36:31  <mikolalysenko>in the end, I think the solution would probably fit on a page but I don't think it would necessarily be "easy"
03:36:50  <dominictarr>mikolalysenko: don't do .write(…)
03:36:58  <dominictarr>that should be considered a private method
03:37:06  <mikolalysenko>ok
03:37:13  <guybrush>mikolalysenko: i tried what you wanted to implement https://github.com/guybrush/concat/blob/master/index.js
03:37:15  <dominictarr>it's much cleaner to create a stream and use pipe
03:37:22  <mikolalysenko>well, here let me show you the simple-ish thing that I am working on
03:38:21  <dominictarr>mikolalysenko: hmm, you probably want a drainAll sort of event that triggers when there are no streams left
03:38:30  <mikolalysenko>https://github.com/mikolalysenko/stream-sequence/blob/master/sequence.js
03:38:47  <mikolalysenko>I don't know that this solution is optimal
03:38:55  <mikolalysenko>and I haven't tested it yet so it is probably filled with bugs
03:39:01  <mikolalysenko>but it is kind of what I am thinking of now
03:39:15  <mikolalysenko>I'd eventually like to make "Sequence" work like a stream, but with an extra insert method
03:40:06  <dominictarr>some updated demos http://dominictarr.github.com/observable
03:42:01  <mikolalysenko>I am also probably doing many things wrong/stupid since I don't know streams so well yet
03:44:48  * devaholicjoined
03:45:23  <Raynos>isaacs: well it's weird that streams2 is moving data from push to pull but errors and end are still push based.
03:47:51  <guybrush>mikolalysenko: but i think for what you want to do another approach would be better (than this concatenate stuff), what you want is a transform-stream
03:48:05  <mikolalysenko>ok, where do I get one?
03:48:23  <guybrush>basically you have markdown which contains tex isnt it?
03:48:51  <mikolalysenko>yeah
03:48:53  <guybrush>so you pipe the markdown into a transform-stream where you transform the tex into base64 encoded images
03:48:57  <mikolalysenko>right
03:49:03  <mikolalysenko>but that transform is asynchronous
03:49:06  <mikolalysenko>because I have to call latex
03:49:22  <guybrush>so in [email protected] it comes with node
03:49:37  <mikolalysenko>great, so all I have to do is wait for node 0.10 to come out
03:49:42  <guybrush>no
03:49:47  <guybrush>one sec
03:49:48  <mikolalysenko>ok
03:50:16  <guybrush>i think this suites your needs https://npmjs.org/package/transform-stream
03:51:02  <dominictarr>transform stream does basically the same thing as through
03:51:11  <mikolalysenko>hmm
03:51:20  <guybrush>oh yes you really need to take a look at through
03:51:30  <mikolalysenko>yeah, I know through
03:51:34  * tphummelquit (Quit: tphummel)
03:51:40  <mikolalysenko>I am using it in my latex wrapper
03:52:39  <mikolalysenko>well, I think transform stream will work
03:52:48  <mikolalysenko>but it is not quite as efficient as what I was thinking
03:53:47  <mikolalysenko>of course I can even do a stupider thing and just read the whole deal into memory and do a find/replace on it...
03:54:08  <guybrush>that will work horrible with ah whole book i want to transform :p
03:54:19  <mikolalysenko>yeah
03:54:27  <guybrush>also you might want to start 1 childprocess with latex
03:54:36  <guybrush>and do the transform on the fly
03:54:42  <mikolalysenko>yeah, I am doing that already
03:54:51  <guybrush>oh ok
03:55:02  <mikolalysenko>but the problem with transform is that it doesn't let me paste the results from the latex stream into the document stream
03:55:08  <mikolalysenko>which is what I want to do
03:55:27  <mikolalysenko>basically I want to take markdown, stream it through and replace the equations with base64 encoded image links
03:55:48  <mikolalysenko>giving a single markdown document that can be viewed on github
04:03:13  <guybrush>mikolalysenko: i would pipe the markdown into a pause-stream (or through) and pause it upon tex, after generating the base64 resume the stream
04:03:58  <Raynos>I've been too full of rage recently
04:04:02  <Raynos>Very easily enraged
04:04:16  <fotoverite>We've noticed
04:04:35  <Raynos>I should take the chill pills
04:06:42  <mikolalysenko>guybrush: that would work, but after all of this I have come up with a simpler option: use node-concat-stream to just read the whole damn thing into memory and String.replace :P
04:06:57  <mikolalysenko>and then stop worrying about it until 0.10 streams come out
04:06:57  <guybrush>haha :D
04:07:11  <Raynos>rvagg: that video is genuis
04:07:14  <mikolalysenko>sure it sucks, but whatever I am done with streams for today
04:07:30  <rvagg>Raynos: I know, it's hilarious
04:07:42  <dominictarr>mikolalysenko: I have a streaming version of replace in event-stream
04:09:13  <mikolalysenko>dominictarr: I don't know if that will work
04:09:22  <mikolalysenko>dominictarr: I need to replace with another stream
04:09:44  <dominictarr>ah, no it won't work then
04:09:51  <mikolalysenko>ok, back to big arrays
04:12:52  <Raynos>rvagg: I think the answer is everyone builds their own level library on top of leveldown.
04:12:58  <Raynos>That's clearly the optimum solution to this
04:13:50  <Raynos>rvagg: so lets move all the bike shedding and comment flame wars to leveldown!
04:14:46  <rvagg>Raynos: yeah, I need to get on with cleaning up leveldown for a proper release
04:15:05  <rvagg>Raynos: but I'm spending too much time in LevelJS! nearly got a table file reader working, already got a log file reader going
04:17:45  <rvagg>and then of course there's the proper work I *should* be doing
04:21:33  <ralphtheninja>rvagg: the omakase video was hilarious :)
04:21:55  <rvagg>ralphtheninja: has the tone right doesn't he?
04:22:07  <ralphtheninja>aye, sounds like a professional actor
04:22:26  <rvagg>for those who have no clue what we're talking about: https://github.com/rvagg/node-levelup/issues/68#issuecomment-12819624
04:22:34  * mikealquit (Quit: Leaving.)
04:22:52  <ralphtheninja>I dont think the posh style fits levelup though, we send in Raynos with a bazooka instead :p
04:24:02  <rvagg>someone said the other day that Rails is Omakase but Node is street food, that sounds about right
04:24:45  <ralphtheninja>yup, mainly burritos and tacos
04:24:54  <substack>rvagg: it was me!
04:25:15  <rvagg>substack: of course! sounds like something you'd say
04:25:26  <ralphtheninja>substaco :)
04:25:44  <dominictarr>ralphtheninja: whatever street food is available nearby
04:26:33  <substack>I've become quite discerning in my street food habits since there is so much street food around me now
04:26:57  <ralphtheninja>only pizza in boring sweden :/
04:27:29  * mikealjoined
04:27:51  * mikealquit (Client Quit)
04:28:20  <substack>churros, tacos, burritos, tamales, papusas, cups of fruit all within walking distance of my house
04:28:53  * wiwilliaquit (Ping timeout: 245 seconds)
04:30:32  <chrisdickinson>fried pies, pizzas, burritos, poutine, peanut butter and jelly fries, crepes, shakes
04:31:46  <substack>peanut butter jelley and fries in a crepe with fries and a shake please
04:32:59  * mikealjoined
04:33:16  <dominictarr>chrisdickinson: is the lucky one. portland has the best streetfood in the world, as far as I have found.
04:43:45  <substack>yes
04:52:21  <juliangruber>substack: can dnode to two-ray rpc?
04:52:32  <juliangruber>*do
04:53:46  <substack>two-way?
04:54:04  <substack>each side can call methods defined on the other side if that's what you mean
04:54:39  <juliangruber>yes
04:57:07  <juliangruber>cuz I'm writing a module that exports the exact levelup api, but over the network. So you have var db = multilevel('localhost:5000') and it just works. so far HTTP works great, but DNODE would be sweet too
04:57:22  <juliangruber>and it needs stuff like db.on('foo', fn)
04:59:01  <dominictarr>heh,
04:59:39  <dominictarr>mikolalysenko: you are talking about replace streams and then a few hours later I get a maxBuffer error and realize I need one too!
05:00:47  <juliangruber>dominictarr rvagg raynos: see 20:57, what do you think? this would let us get over the single process limitatino easily
05:01:14  <Raynos>juliangruber: still a central point of failure
05:01:34  <rvagg>yep, sure, dnode is probably a good starting point, then it could evolve to having multiple redundant backends perhaps with scuttlebutt
05:02:06  <dominictarr>juliangruber: I have a similar thing, partially built, that goes over a stream, for level-scuttlebutt
05:03:14  <dominictarr>but it has a lot of particular stuff for dealing with level-scuttlebutt
05:04:11  <dominictarr>if you only have a single writeable db, then replication is easy...
05:04:30  <dominictarr>you could just have a leader election process, so that you only have a single leader at a time
05:04:39  <dominictarr>that will make it basically like datomic
05:04:39  <juliangruber>dominictarr: mine doesn't have very node specific stuff, it should be useable from every language
05:04:54  <juliangruber>**if**
05:05:13  <dominictarr>juliangruber: of course, the different itch needs a different scratcher
05:06:01  <ralphtheninja>dominictarr: oh I want datomic like db in node! *drools*
05:06:23  <ralphtheninja>screw update in place, save all data! :)
05:06:26  <juliangruber>it's just something I'd like to be able to do, use 1 db from multiple processes, where full replication might be overkill
05:06:50  <dominictarr>ralphtheninja: the snapshot thing will be pretty hard to do well, without baking it in
05:07:03  * dguttmanjoined
05:07:30  <juliangruber>e.g. you might want to cluster web processes but not the db process
05:07:36  <dominictarr>the GOOD thing about leveldb + node is that it's so easy to just whip up little solutions like multilevel
05:07:54  <ralphtheninja>dominictarr: aye, converges to git like structure
05:07:59  <juliangruber>node is the perfect thing for that
05:08:09  <juliangruber>I have a rest-like api already
05:08:15  * dguttmanquit (Client Quit)
05:08:16  <juliangruber>that exports everything except events
05:08:34  <juliangruber>my goal with multilevel is, that the client library is so 1:1 levelup that plugins will work too
05:08:50  <juliangruber>just swap the require
05:10:22  <Raynos>ST3 ;_;
05:10:26  <Raynos>I am excited
05:10:29  <Raynos>If it is a failure
05:10:31  <Raynos>I will be so sad
05:10:53  <ralphtheninja>dominictarr: you mean more difficult to build without touching the internals?
05:12:26  <Raynos>ralph, dominictarr: datomic++
05:12:34  <dominictarr>ralphtheninja: you could probably fake it, but if you where building a db from scratch with that feature in mind, you probably wouldn't use leveldb
05:12:52  <Raynos>I want a datomic that favours availability over consistency :p
05:12:56  <dominictarr>you would use a append-only b-tree of something
05:13:11  <rvagg>Raynos: +1
05:13:20  <jesusabdullah>rvagg: dawg y ur writing fortran NEway
05:13:33  <ralphtheninja>Raynos: +1, screw consistency :)
05:13:43  <rvagg>jesusabdullah: I'm not... really... only at gun-point
05:14:10  <dominictarr>Raynos: the datomic idea only makes sense if you want consistency
05:14:33  <rvagg>jesusabdullah: a bit of software that originated in a university that we have a SaaS built around, we wrap many layers around it to make it sane and haven't found the time to rewrite in a sensible language; probably never will be
05:16:03  <ralphtheninja>all I want is immutable data and snapshots, e.g. like git
05:16:46  <dominictarr>ralphtheninja: you can have that easy from leveldb - if you give up range queries
05:17:22  <dominictarr>just make every put: db.put(key+timestamp(), value)
05:17:28  <rvagg>ralphtheninja: perhaps you should tackle https://github.com/rvagg/node-levelup/issues/15
05:17:59  <dominictarr>the compelling reason to delete stuff isn't to save space, it's to save time reading ranges
05:18:12  <ralphtheninja>ok
05:18:22  * shamaquit (Quit: shama)
05:18:43  <jesusabdullah>rvagg: to be fair, fortran is superduperfast
05:19:00  <rvagg>ST3! now I understand what you're talking about Raynos
05:19:02  * rvaggexcited too
05:19:12  <dominictarr>jesusabdullah: have to played around with forth?
05:19:38  <rvagg>jesusabdullah: meh, the speed of fortran is a bit oversold, it's ugly and a monster to maintain
05:19:40  <jesusabdullah>very little but I'm aware of it
05:19:42  <dominictarr>Raynos: what is st3?
05:19:47  <rvagg>http://www.sublimetext.com/blog/articles/sublime-text-3-beta
05:19:58  <jesusabdullah>rvagg: yeah, I mean, I'd rather be working with a c codebase any day of the week
05:20:23  <rvagg>yeah, tho, it's easier to auto-parallelise fortran
05:20:29  <dominictarr>jesusabdullah: I was very curious about it after reading this http://www.webcrunchers.com/stories/easywriter.html
05:20:30  <jesusabdullah>and really fortran only has a slight edge for very specific calculations
05:20:31  <jesusabdullah>yeah
05:20:46  <jesusabdullah>I played with factor a little
05:20:52  <jesusabdullah>just long enough to get the general idea
05:20:57  <jesusabdullah>factor isn't all that useful though
05:21:06  <Raynos>dominictarr: I want values and immutability. I dont need write consistency. I like the idea of reading an arbitary snapshot
05:21:38  <rvagg>jesusabdullah: that bit of code I posted a screenshot of was a simple matrix operation, I didn't show the bit that did exactly the same with inbuilt functions.. the inbuilt versions were a fair bit slower than doing it long-hand, that's disappointing for a language that's supposed to be good at that stuff
05:21:43  <dominictarr>Raynos: can you define "values"? it sounds like you are using it in a particular sense
05:22:02  <Raynos>value basically means an immutable value
05:22:07  <Raynos>like a string or number in javascript
05:22:09  <Raynos>( http://www.infoq.com/presentations/Value-Values )
05:22:19  <Raynos>contrasted to an object
05:22:39  <dominictarr>Raynos: I don't really see what the big deal is there
05:22:55  <Raynos>immutability is lovely
05:22:57  <dools>D/WIN 3
05:22:58  <Raynos>it reduces complexity
05:22:59  <dominictarr>you get an object… and then you don't change it
05:23:14  <Raynos>then you have no garantuee anyone else won't change it
05:23:25  <dominictarr>freeze?
05:23:26  <Raynos>and you have to worry about whether or not some other dick is going to have a side effect and fuck you over
05:23:34  <dominictarr>recursize freeze?
05:23:38  <Raynos>and im talking about the database
05:23:44  <Raynos>the entire database is a single immutable value
05:23:46  <dominictarr>Raynos: clone it before you return it
05:24:07  <Raynos>all of those things work at the memory / code layer
05:24:12  <jesusabdullah>I will read that dominictarr
05:24:18  <Raynos>You probably want something more clever though
05:25:12  <ralphtheninja>Raynos: aaah you've seen that one too on infoq, I loved that presentation
05:25:29  <rvagg>yowzers: "Sublime Text 3 makes extensive use of functionality in C++11"
05:26:54  <ralphtheninja>this one is also bad ass http://www.infoq.com/presentations/Simple-Made-Easy-QCon-London-2012
05:30:52  <jesusabdullah>interesting
05:30:57  <jesusabdullah>re: sublime
05:31:48  <Raynos>rvagg: I'm going to have to wait a while for packages to be ported
05:31:54  <Raynos>I made a list of packages I need.
05:32:00  <Raynos>the main one is the package manager itself :p
05:32:16  <rvagg>yeah, I was just reading that.... I want jshint to work
05:35:51  <Raynos>Ok goto definition just crashed
05:36:06  <Raynos>goto symbol in project is going to be really nice
05:39:44  <Raynos>I wonder whether goto definition can be patched to make it understand require :p
05:40:22  <defunctzombie>I just use vim and don't think about it :)
05:45:46  <dominictarr>Raynos: rvagg you guys need a text-editor that is written in JS!
05:45:57  <Raynos>yes!
05:46:01  <Raynos>But not hipster
05:46:07  <dominictarr>hahahaha
05:46:23  <dominictarr>it would be okay with a rewrite or two
05:48:06  <defunctzombie>dominictarr: I managed to use codemirror for my readme snippets
05:48:11  <defunctzombie>it was quite painless
05:48:28  <defunctzombie>(more or less)
05:48:35  <Raynos>im a fine conseur of text editors
05:48:42  <Raynos>I just can't do with the current shitty web based ones
05:48:47  <Raynos>too many glitches
05:48:48  <Raynos>too much rage
05:48:56  <Raynos>if I have to refresh my text editor even once per day
05:48:58  <Raynos>then ragequit
05:49:46  <dominictarr>Raynos: try <textarea></textarea> it's unbeliveably solid
05:54:02  <Raynos>the horrors
05:54:09  <Raynos>What about highlight + ctrl tab
05:54:17  <Raynos>how am I supposed to unindent multiple lines at once!
05:54:28  <Raynos>and the colors man the colors
05:54:35  <Raynos>https://raw.github.com/Benvie/JavaScriptNext.tmLanguage/master/ss-es6.png
05:54:42  <Raynos>How am I supposed to code without the colors
05:54:55  <Raynos>if every word isn't a different color I can't read it
05:55:50  <jjjjohnnny>Raynos: https://github.com/jakiestfu/Behave.js
06:03:31  * tphummeljoined
06:12:02  <Raynos>st_luke: nice one ;)
06:14:03  * mbalhoquit (Remote host closed the connection)
06:15:37  <dominictarr>substack: defunctzombie want a feature where browserify has a hash of it's contents.
06:16:05  <dominictarr>process.env.BROWSERIFY_HASH or something
06:16:29  <defunctzombie>dominictarr: out of scope
06:16:52  <defunctzombie>dominictarr: why do you want a hash?
06:16:53  <substack>md5sum bundle.js
06:17:08  <dominictarr>so that I know if the code has changed
06:17:10  <defunctzombie>dominictarr: I fingerprint my resources automatically but I do it after the fact
06:17:10  <fotoverite>So anyone here worked with audrino's and leds?
06:17:25  <dominictarr>and whether a connecting client has the expected code version
06:17:29  <substack>dominictarr: -wv prints a message every time it writes an update
06:17:46  <fotoverite>Trying to figure out if making a barebones wearable space invader game is possible or I might have to do something else.
06:17:51  <defunctzombie>dominictarr: I do the client thing with github versions generally
06:17:52  <dominictarr>defunctzombie: how do you do it?
06:17:57  <defunctzombie>dominictarr: which part?
06:18:09  <dominictarr>finger printing.
06:18:25  <dominictarr>I want to force a reload or something if the client has the wrong version
06:18:32  <defunctzombie>dominictarr: view-source:https://bitfloor.com/
06:18:39  <defunctzombie>see the fingerprinted urls?
06:18:48  <defunctzombie>those are hashes of the content
06:19:12  <dominictarr>defunctzombie: what if the index.html is cached?
06:19:17  <defunctzombie>never
06:19:50  <defunctzombie>my general rule is no caching until I have a system for solid cache invalidation
06:19:52  <dominictarr>sure, if I just type bitfloor.com that will happen
06:19:58  <defunctzombie>no, it won't
06:20:09  <defunctzombie>at least it shouldn't
06:20:32  <dominictarr>I've had problems with this, just connecting to localhost:3000
06:20:41  <defunctzombie>I haven't
06:20:46  <defunctzombie>can you elaborate?
06:20:53  <defunctzombie>maybe you are not sending the proper cache headers?
06:20:54  <dominictarr>chrome doesn't do the request, it just loads the cache
06:21:04  <dominictarr>I'm not sending anything
06:21:09  <defunctzombie>that is not good
06:21:21  <defunctzombie>you should tell it not to cache
06:21:24  <defunctzombie>by default
06:21:25  <dominictarr>oh, hmm… it's probably because I'm loading a bundle
06:21:31  <dominictarr>.js
06:21:44  <dominictarr>because that is the thing i'm seeing cached
06:21:44  <defunctzombie>for fingerprinting I do it on the fly
06:21:54  <defunctzombie>I have something that fingerprints the resources
06:21:56  <dominictarr>finger printing wouldn't have that problem
06:22:02  <defunctzombie>and serves them up with a very long expiry
06:22:12  <defunctzombie>if I don't fingerprint then I generally don't cache
06:22:18  <defunctzombie>to avoid invalidation issues
06:22:40  <defunctzombie>and serve things with immediate expiry and no cache rules
06:29:09  * AvianFluquit (Remote host closed the connection)
06:31:16  * dguttmanjoined
06:40:24  <defunctzombie>dominictarr: the cache-control header is the one you want to make sure is being set right iirc
06:40:31  <defunctzombie>and if you can etag the resource htat is good too
06:41:35  <dominictarr>defunctzombie: thanks,
06:41:56  <dominictarr>what i'm leaning towards now is just bundling everything into one html file
06:42:10  <dominictarr>which should have the same effect
06:42:24  <dominictarr>& less round trips!
06:43:05  <defunctzombie>dominictarr: is this for the readme thing?
06:43:11  <defunctzombie>or an actual page on a server?
06:43:20  <defunctzombie>or a static site generated?
06:43:39  <dominictarr>well, it's the readme thing that is influencing this idea
06:43:46  <defunctzombie>don't let the less round trips fool you, if you can properly cache a large js resource
06:43:50  <defunctzombie>that is far more worth it
06:44:01  <defunctzombie>many of my sites return the index.html very quickly
06:44:06  <defunctzombie>and if js is all cached
06:44:12  <defunctzombie>then you can get up and running faster
06:44:28  <defunctzombie>if you have to send js in the html that takes time to either bundle and send
06:44:32  <defunctzombie>or such
06:44:38  <defunctzombie>there are tradeoff everywhere
06:44:46  <dominictarr>hmm, right - and they cache the js from last time, with a long expiry
06:44:54  <defunctzombie>I prefer to have separate assets when I can
06:44:55  <defunctzombie>correct
06:45:22  <defunctzombie>depending on your web stack I have various pieces that do this all automatically for me.. but your stack is probably different
06:45:24  <defunctzombie>:)
06:49:26  * st_lukejoined
06:52:08  <defunctzombie>dominictarr: you probably don't use express, but this will give you an idea of what my typical webstack looks like
06:52:09  <defunctzombie>https://gist.github.com/4662333
06:52:49  * tphummelquit (Quit: tphummel)
06:52:50  <defunctzombie>I have come to this after having done it several different ways
06:53:00  <defunctzombie>all of which I didn't like for various reasons
06:53:27  <defunctzombie>I guess I should put a basic html file in there too
06:54:38  <dominictarr>defunctzombie: looks pretty slick
06:54:41  <defunctzombie>added an html file to show what my resource paths look like
07:00:06  <st_luke>nice
07:00:10  <st_luke>simple
07:06:44  * defunctzombiechanged nick to defunctzombie_zz
07:08:30  * defunctzombie_zzchanged nick to defunctzombie
07:08:34  <Raynos>Ok new challenge
07:08:40  <Raynos>Implement efficient immutable data structures in jS
07:11:16  * mbalhojoined
07:13:02  <dominictarr>Raynos: just have the disiplin to not mutate mutable ones
07:13:19  <Raynos>but I want to do mutations
07:13:23  <Raynos>that return new values
07:13:25  <Raynos>efficiently
07:13:32  <dominictarr>right
07:13:55  <dominictarr>so… maybe you could use prototype chains?
07:14:18  <dominictarr>that would work for objects, at least
07:14:34  <Raynos>https://gist.github.com/4644666
07:14:46  <Raynos>that's exactly what Benvie did to create immutablehash
07:15:18  <dominictarr>WTF
07:16:07  <dominictarr>is this es6?
07:16:12  <Raynos>yes.
07:16:22  <Raynos>benvie wrote an es6 vm written in es6 :p
07:16:39  <dominictarr>so is @@ the new __ ?
07:17:29  <Raynos>i lied
07:17:40  <Raynos>the es6 vm is written in javascript
07:19:16  <defunctzombie>this code looks like sadness to me
07:19:19  <guybrush>this looks like java
07:19:21  <guybrush>:/
07:19:38  <Raynos>I really like the idea of private names
07:19:42  <Raynos>or weakmaps
07:19:44  <guybrush>why?
07:19:44  <Raynos>either of them works
07:19:59  <defunctzombie>what is it with this strong desire to have the 'class' keyword
07:20:05  <Raynos>i can put properties on objects i dont own in an invisible fashion
07:20:09  <defunctzombie>and put everthing inside of two { }
07:20:17  <defunctzombie>I really think that is what it is
07:20:46  <defunctzombie>its like people are afraid to let code touch the left hand side
07:20:53  <defunctzombie>and want to move it as far from the left as possible
07:24:13  * defunctzombiechanged nick to defunctzombie_zz
07:24:52  * dguttmanquit (Quit: dguttman)
07:32:02  * mikolalysenkoquit (Ping timeout: 256 seconds)
07:39:34  * st_lukequit (Remote host closed the connection)
07:47:28  * tphummeljoined
08:03:53  * calvinfoquit (Read error: Connection reset by peer)
08:16:06  <substack>defunctzombie_zz: haha I know right?
08:16:29  <substack>I love it when code hugs up against the left margin
08:16:41  <substack>less closure state I need to worry about
08:17:14  <substack>I think people want something called "class" in javascript because they want to write classical java-esque inheritance-oriented programs
08:18:32  <dominictarr>you will never love a language if you are always wanting to change it.
08:18:39  <dominictarr>you have to accept it for what it is
08:18:42  <substack>Raynos: merged your console patch
08:18:57  <dominictarr>then you can work with it, instead of against it.
08:18:57  <substack>since I just mustered some willpower to do things just now
08:19:00  <substack>inexplicably
08:19:24  <substack>dominictarr: yep
08:19:51  * calvinfojoined
08:20:14  <Raynos>substack; NICE
08:20:22  <Raynos>deploy that browserify on testling too
08:28:28  * mikolalysenkojoined
08:30:38  * captain_morganquit (Ping timeout: 255 seconds)
08:33:20  * tphummelquit (Quit: tphummel)
08:33:27  * mikolalysenkoquit (Ping timeout: 276 seconds)
08:38:21  * calvinfoquit (Ping timeout: 245 seconds)
08:38:44  * ins0mniajoined
08:45:34  <dominictarr>do HTMLElements have any other realtime changing state apart form hover and focus?
08:45:54  <dominictarr>(not click - because click is not a state - it's an event)
08:46:28  <dominictarr>hmm, I guess you could have onScreen/visible
08:55:47  <substack>form elements have .value
08:56:09  <dominictarr>got that one too
08:56:19  <substack>there's that data binding thing too where elements can arbitrary bound data
08:56:26  <substack>*can have
08:56:40  <dominictarr>built in data-binding?
08:56:52  <dominictarr>there is contentEditable too
08:57:04  <rvagg>checked
08:57:06  <dominictarr>but that just means anything acts like a input
08:57:14  <dominictarr>yeah, and checked
08:57:15  <rvagg>disabled
08:57:54  <dominictarr>hmm, that is state that is set by the app, not directly by user interactions
08:57:59  * calvinfojoined
09:03:01  <substack>dominictarr: want to try sending a test hook to testling-ci for scuttlebutt?
09:03:17  <substack>noticed that not all the browser icons show up but we've fixed that bug finally
09:03:31  <dominictarr>done
09:03:43  <substack>thanks!
09:04:08  <Raynos>dominictarr: hover and focus are events too
09:04:38  <dominictarr>Raynos: yes, but they have oposite ending events focus / blur.
09:04:58  <Raynos>mouseenter / mouseleave
09:05:01  <substack>blarg I wonder why firefox 18 is taking its time
09:05:06  <dominictarr>exactly
09:05:24  <dominictarr>oh! guess you have keydown, keyup too
09:05:33  <Raynos>yep
09:05:39  <Raynos>inputchange as well
09:05:48  <dominictarr>inputchange?
09:05:51  <Raynos>which triggers on paste
09:05:56  <Raynos>i think its oninput event
09:06:19  <dominictarr>oninput triggers when ever you type
09:06:23  <dominictarr>into input
09:06:31  <Raynos>also when you right click and paste
09:06:50  <dominictarr>yes, whenever the text changes - I used that on r-edit
09:06:52  * mirkokjoined
09:08:33  <substack>dominictarr: uh oh we're getting another bug now >_<
09:10:41  <substack>hah there it goes!
09:10:56  <substack>ok ff18 messed up but the retries are working now at least
09:10:59  <Raynos>dominictarr: there are various crazy things like the files property for file inputs
09:11:41  <dominictarr>instead of value?
09:11:47  <Raynos>yes
09:11:50  <Raynos>value is the file path
09:11:58  <Raynos>files are the actual content of files
09:13:54  * ins0mniaquit (Ping timeout: 252 seconds)
09:16:00  <substack>dominictarr: hooray! http://ci.testling.com/dominictarr/scuttlebutt.png
09:16:10  <Raynos>Then there's <command> and <menu>
09:16:18  <substack>even though some of the browsers are not launching properly it eventually at least progressed onto the other ones
09:16:28  <Raynos>those arent special
09:16:36  <substack>which is much better than just stopping mid-way through
09:16:51  <Raynos>Holy fuck: http://www.w3.org/community/webed/wiki/HTML/Elements/keygen
09:17:34  <Raynos>how did I not know that existed?
09:18:07  <dominictarr>substack: hmm… it's still failing on a lot
09:19:07  <substack>dominictarr: yes it seems to be some temporary issue we're having
09:19:18  <substack>I'm not sure the the problem is but perhaps pkrumins knows
09:27:44  * ins0mniajoined
09:28:02  * tilgovijoined
09:28:41  * mikolalysenkojoined
09:30:45  <Raynos>blargh thats only for SSL :(
09:33:12  * mikolalysenkoquit (Ping timeout: 256 seconds)
09:49:36  <rvagg>Raynos, dominictarr, https://github.com/rvagg/node-levelup/pull/69 - do you know of other Object streams that emit arrays of objects?
09:50:39  <dominictarr>JSONStream can emit anything
09:50:58  <rvagg>oh, right, it just emits whatever it finds
09:51:17  <rvagg>hm, so if it emits an array then you'd want it to store an array
10:29:04  * mikolalysenkojoined
10:33:42  * mikolalysenkoquit (Read error: Operation timed out)
11:01:47  <pkrumins>substack, dominictarr, it's the timeout handling bug
11:02:24  <pkrumins>substack, dominictarr, when browsers timeout then sometimes you get emptiness in the log and the browser has a failed flag
11:04:20  <dominictarr>so.. the test is just taking too long?
11:07:09  * cianomaidinjoined
11:16:23  <pkrumins>dominictarr: unlikely. most likely the browser didnt start, or the browser crashed, or it took too long for the browser to start
11:18:54  <dominictarr>okay
11:23:17  * dominictarrquit (Quit: dominictarr)
11:31:58  * fotoverite_joined
11:33:36  * fotoveritequit (Ping timeout: 252 seconds)
11:33:36  * fotoverite_changed nick to fotoverite
11:35:01  * ins0mniaquit (Ping timeout: 245 seconds)
11:56:06  * tilgoviquit (Remote host closed the connection)
12:23:47  * ins0mniajoined
12:32:37  * xerverjoined
12:35:02  * rolnaabaquit (Ping timeout: 252 seconds)
12:35:02  * xerverchanged nick to rolnaaba
12:35:19  * rolnaabaquit (Read error: Connection reset by peer)
12:44:49  * cianomaidinquit (Quit: cianomaidin)
12:51:16  * ins0mniaquit (Ping timeout: 245 seconds)
13:00:30  * yorickjoined
13:00:30  * yorickquit (Changing host)
13:00:30  * yorickjoined
13:14:17  * ins0mniajoined
13:51:16  * ins0mniaquit (Ping timeout: 245 seconds)
14:20:53  * niixjoined
14:21:08  <niix>Anyone have any experience interviewing for a front-end dev position?
14:39:56  * ins0mniajoined
14:54:35  * tilgovijoined
15:08:36  * tilgoviquit (Remote host closed the connection)
15:20:58  * tilgovijoined
15:50:43  * mikolalysenkojoined
15:54:42  * defunctzombie_zzchanged nick to defunctzombie
15:57:48  * mirkokquit (Quit: mirkok)
16:06:39  * dguttmanjoined
16:12:53  * mikealquit (Quit: Leaving.)
16:15:55  <isaacs>niix: not for a few years, but yeah
16:16:18  * ins0mniaquit (Ping timeout: 252 seconds)
16:18:37  * mikealjoined
16:19:10  <niix>isaacs: I need some advice, I suppose
16:27:12  * dguttmanquit (Quit: dguttman)
16:27:44  * dguttmanjoined
16:28:45  * AvianFlujoined
16:31:12  * mikealquit (Quit: Leaving.)
16:53:09  * mikolalysenkoquit (Ping timeout: 252 seconds)
17:07:58  * shamajoined
17:08:08  * jibayjoined
17:09:25  * mikealjoined
17:22:05  <Raynos>isaacs: ping
17:22:15  <Raynos>niix: some.
17:22:46  <isaacs>pong
17:22:58  <isaacs>Raynos: about to head out for a bit. is it fast?
17:23:16  <Raynos>isaacs: I think npm dedup fails when node_modules is epmty
17:23:33  <Raynos>xd
17:23:38  <Raynos>lol you already fixed it
17:23:39  <isaacs>Raynos: https://github.com/isaacs/npm/commit/a1674ddfa9f3423f9440932a8192379e7fa8ebd1
17:23:42  <Raynos>WINNING
17:23:42  <isaacs>yessir :)
17:23:47  <isaacs>THE SYSTEM WORKS!
17:24:02  <Raynos>the second thing is
17:24:11  <Raynos>I want that postinstall to run when I run npm instlal locally
17:24:15  <Raynos>for my personal convenience
17:24:20  <Raynos>not when other people install my modules
17:24:21  <isaacs>Raynos: make it a prepublish script
17:24:26  <isaacs>Raynos: or just, don't do it
17:24:43  <Raynos>well I want it to auto dedup every time I install a dependency for my module
17:24:54  <isaacs>Raynos: oh, well, that's not what it'll do anyway
17:24:59  <Raynos>not when other people install it
17:25:05  <isaacs>Raynos: wnana know a secret, though?
17:25:14  <Raynos>npm i && npm dedup
17:25:15  <isaacs>Raynos: you can put a file at ~/.npm/.hooks/postinstall
17:25:19  <isaacs>Raynos: or that
17:25:22  <Raynos>alias npm i -> npm i && npm dedup
17:25:31  <isaacs>alias ni="npm i && npm ded"
17:25:35  <Raynos>:D
17:25:53  <isaacs>or better: ni () { npm i "[email protected]" && npm ded }
17:25:59  <isaacs>then you can install specific things
17:26:03  <isaacs>ni sax glob
17:26:05  <Raynos>xd
17:26:16  <Raynos>WIZARDS
17:26:27  <isaacs>no, knights
17:26:32  <isaacs>because they say NI
17:26:40  * isaacsrimshot
17:26:57  <Raynos>btw did you fix the issue because you get emails
17:27:01  <Raynos>or because I mentioned you on GH
17:27:17  <isaacs>i get emails when i'm mentioned on GH
17:27:21  <isaacs>so, yes.
17:28:17  <Raynos>i see.
17:28:31  <Raynos>i thought maybe npm emails you with every debug log :D
17:28:44  <isaacs>Raynos: hahahah, no
17:28:52  <isaacs>Raynos: but it did used to suggest emailing the error to [email protected]
17:28:55  <isaacs>that was fun for a bit :)
17:29:02  <isaacs>then the trickle became a deluge
17:29:22  <Raynos>Ok but seriously though ni and /.npm/.hooks are cut
17:29:23  <isaacs>i'd introduce a bug and get 10 emails. if the register hiccup'ed i'd get 500
17:29:26  <Raynos>but dont solve the team problem
17:29:42  <isaacs>what you want is for dedupe to be run after npm install
17:29:45  <Raynos>isaacs: you need an enterprise email manager
17:29:47  <isaacs>npm install --dedupe or something
17:29:53  <Raynos>yes
17:29:55  <isaacs>Raynos: i have gmail filters now :)
17:29:57  <Raynos>but it should be default :p
17:30:02  <isaacs>Raynos: i disagree
17:30:11  <isaacs>Raynos: dedupe is a separate slow action.
17:30:18  <Raynos>rm node_modules -rf && npm i && npm i x
17:30:29  <Raynos>that effectively does npm i x && npm dedup
17:30:31  <isaacs>Raynos: also, really, you should talk to piscisaureus and the two of you should just build that.
17:30:34  <isaacs>and send me a pull req
17:30:42  <isaacs>he's interested in this as well.
17:30:46  <Raynos>I see
17:30:51  <isaacs>the tricky thing is that dedupe needs to know the future, and install doesn't.
17:30:55  <Raynos>so if its fast it can be the default. cool.
17:31:15  <isaacs>ie, dedupe works on the entire tree end to end
17:31:23  <isaacs>and that makes it pretty simple.
17:31:29  <isaacs>but install only knows where it's been, not where it's going.
17:31:46  <isaacs>so if you have: x->(y,z) y->(a,b) z->(a,b)
17:31:58  <isaacs>then install doesn't know that it can install (a,b) at the x/node_modules level
17:32:30  <isaacs>so, what you'd have to do is split install up into bits, so that it *first* creates a model of where it's going to go, and *then* dedupes it, and *then* unpacks things into place.
17:32:42  <isaacs>but that'll be slower, because it's not as parallelizable.
17:33:06  <isaacs>and you may fetch [email protected] and then later decide that actually you want [email protected] so that it can dedupe better.
17:33:25  <isaacs>make sense?
17:33:45  <isaacs>that's actually why i opted not to use the "push left" algorithm, as i was calling it back then.
17:34:00  <isaacs>because it's more complicated, and tricky to do before the tree is built.
17:34:11  <Raynos>yeah it makes sense
17:34:11  * fotoveritequit (Ping timeout: 245 seconds)
17:34:18  <isaacs>*afteR* evertything is in place, it's easy, becasue you can just read what's there, and then manipulate it, and then make the appropraite changes.
17:34:21  <Raynos>its just a pain in the ass for my use-case
17:34:23  <isaacs>yeah
17:34:25  <Raynos>with stateful node modules :P
17:34:26  <isaacs>i understand.
17:34:40  <Raynos>and requiring two seperate versions of one module is >.<
17:34:52  <isaacs>also, there are strong feelings about dedupe. some people are opposted to it on principle. others are rageful that npm ever allows duplicates at all
17:35:06  <isaacs>requiring two separate versions of a module is not bad.
17:35:07  <Raynos>Talking to gozala
17:35:07  * fotoveritejoined
17:35:09  <isaacs>if modules are small.
17:35:19  <Raynos>I think there should be minimal duplication on an app-by-app basis
17:35:21  <isaacs>(clientside notwithstanding)
17:35:25  <Raynos>but massive duplication across many apps
17:35:29  <isaacs>sure
17:35:36  <isaacs>at the top-level of your app, you want dedupe.
17:35:43  <isaacs>elsewhere? it doesn't matter much
17:35:53  <gozala>isaacs: I think dedup should be default
17:36:03  <isaacs>gozala: sure.
17:36:13  <isaacs>gozala: but it's not really a matter of votes.
17:36:30  <isaacs>gozala: there are valid concerns on both sides, so if anything, it should be a config, but it's hard to get right.
17:36:44  <isaacs>gozala: compared with just running dedupe yourself as a separate ste.
17:36:45  <isaacs>*step
17:36:56  <Raynos>thats what I do with the postinstall script :p
17:36:58  <gozala>I can write up a post to support my opinio
17:37:02  <gozala>n if that helps
17:37:02  <isaacs>Raynos: but you don't, though
17:37:08  <isaacs>Raynos: you think you do, but it's only deduping in taht one folder.
17:37:13  <isaacs>like, underneath that one module
17:37:16  <isaacs>not at the top-level
17:37:19  <isaacs>so it's probably not doing anythign
17:37:21  <Raynos>but I have npm dedup in all my postinstalls :3
17:37:34  <isaacs>and inf act, might fail, because deps aren't installed, because they were *already* deduped to the extent that install can do so
17:37:37  <Raynos>you know, just in case
17:37:52  <guybrush>Raynos: i thought you dont use npm for deployment? just run dedupe in your deployment-thing
17:37:54  <isaacs>ie, install already dedupes ancestors and uncles. but not cousins, because those cousins aren't born yet.
17:38:09  <Raynos>guybrush: I use npm for local development
17:38:17  <isaacs>Raynos: what i'm saying is, your postinstall dedupe will never catch anything.
17:38:23  <isaacs>Raynos: unless it's at the very top level
17:38:27  <isaacs>and at that point, just run dedupe yourself
17:38:48  <Raynos>isaacs: its at the very top level, i should use dedup at the app level in a postinstall
17:39:06  <isaacs>Raynos: but you don't want your users to run it you said.
17:39:19  <Raynos>isaacs: my main issue is that code I use has subtle bugs unless dedup is run. I dont want to teach my team to run dedup
17:39:26  <isaacs>Raynos: so, one way to do this with a config is to have --dedupe make it just run npm.commands.dedupe in the install cb.
17:39:30  <Raynos>so it needs to run automatically
17:39:49  <isaacs>Raynos: but only at the top level, instead of at every level.
17:39:57  <Raynos>even I dont want to remember to run npm dedup :P
17:39:58  <isaacs>but that'll be slow. and no, it will not be the default.
17:40:05  <isaacs>Raynos: patch welcome.
17:40:13  <Raynos>isaacs: npm is already slow :D
17:40:29  <Raynos>installing private git dependencies takes way longer then dedup
17:40:47  <isaacs>Raynos: you sound like tj
17:40:54  <isaacs>Raynos: installing the same git dep repeatedly is pretty quick
17:41:08  <Raynos>tarballs are snappy
17:41:13  <isaacs>Raynos: line 447-ish of lib/install.js
17:41:17  <Raynos>git uris and git+ssh uris are slow.
17:41:23  <isaacs>er, 440-ish
17:41:25  <Raynos>Actually no.
17:41:33  <Raynos>installing a git module thats 40MB
17:41:35  <Raynos>is slow.
17:41:41  <guybrush>but only the first time
17:41:48  <isaacs>Raynos: have installManyTop run dedupe after runinng build
17:42:01  <isaacs>L426
17:42:02  <isaacs> npm.commands.build([where], false, true, function (er) {
17:42:02  <isaacs> return cb_(er, d)
17:42:02  <isaacs> })
17:42:06  <isaacs>right in there.
17:42:18  <isaacs>if (er) return cb(er)
17:42:20  <Raynos>cool.
17:42:26  <isaacs>return npm.commands.dedupe([], cb_)
17:42:40  <isaacs>if npm.config.get("dedupe") of course
17:42:46  <Raynos>:(
17:42:46  <isaacs>and add it as a config in npmconf
17:42:53  <isaacs>Boolean, default false
17:43:00  <isaacs>actually, maybe i'l just do it :)
17:43:05  <Raynos>:D
17:47:03  * mikolalysenkojoined
17:51:30  <defunctzombie>what is so important about running dedup?
17:54:40  * mikealquit (Quit: Leaving.)
17:56:48  <Raynos>defunctzomie:gozala/method
17:56:52  * mikealjoined
17:59:00  * mikealquit (Client Quit)
18:01:39  * mikealjoined
18:03:05  * wiwilliajoined
18:07:57  <niix>Is the avg front end web dev salary somewhere between 50k and 80k a year?
18:08:10  <CoverSlide>possibly
18:08:37  <CoverSlide>i was in that range for the first 3 years
18:08:40  <niix>that's pretty broad I guess haha
18:08:55  <CoverSlide>actually year 2-3
18:09:09  <niix>what would the range be after that?
18:09:23  <CoverSlide>my first job was hourly, $20/hr ~= 40k
18:09:42  <CoverSlide>that's a wildcard
18:09:48  <CoverSlide>not sure what the normal cap is
18:09:52  * cianomaidinjoined
18:09:59  <CoverSlide>probably low $100s
18:10:07  <niix>and we need about 500k a year to survive in SF
18:10:14  <Raynos>defunctzomie:gozala/method
18:10:17  <Raynos>oh wait lol
18:10:18  <Raynos>twice.
18:10:31  <niix>heh
18:10:40  <CoverSlide>sf is expensive
18:11:07  <Raynos>isaacs, dominictarr, substack: fuck req.headers, fuck res.setHeader. We should write a module like header-stream that works for TCP and does correct HTTP headers
18:11:08  * alunnyjoined
18:11:20  <isaacs>Raynos: userland.
18:11:24  <isaacs>Raynos: go nuts.
18:11:31  <isaacs>Raynos: also, GLWT
18:11:43  <Raynos>isaacs: :D I'm saying when we rewrite http it should me more modular
18:11:45  <CoverSlide>I would love for node to ditch http_parser
18:11:48  <Raynos>and streaming
18:11:54  <isaacs>Raynos: and slow ;P
18:12:01  <CoverSlide>unfortunately
18:12:01  <Raynos>Fuck performance
18:12:04  <isaacs>again, userland, glwt
18:12:05  <Raynos>that's v8's job
18:12:09  <isaacs>no, it's our job
18:12:17  <isaacs>Fast programs are correct. Slowness is a bug.
18:12:31  <isaacs>it means your'e doing too many things
18:12:37  <CoverSlide>any way to modify http_parser and make it less shitty?
18:13:21  <isaacs>CoverSlide: you could rewrite it in JS.
18:13:25  <isaacs>if it's as fast, then i'll take it.
18:13:31  <isaacs>if it's not as fast, then it's bloated, and i won't.
18:13:37  <CoverSlide>right
18:13:39  <isaacs>ok, gotta commute. laters
18:13:55  <CoverSlide>l8s
18:20:57  * cianomaidin_joined
18:22:59  <defunctzombie>Raynos: sounds like something I don't want to do heh
18:24:42  * cianomaidinquit (Ping timeout: 264 seconds)
18:24:42  * cianomaidin_changed nick to cianomaidin
18:25:05  * mikealquit (Quit: Leaving.)
18:25:06  <CoverSlide>I'm all for a userland module, node-http-stream
18:25:21  <CoverSlide>the last thing we can expect though is to have performance on-par with core
18:25:49  <CoverSlide>but a modular http package as an alternative to core, i would be down with that
18:27:37  <defunctzombie>CoverSlide: why do you think it is the last thing to expect?
18:27:43  <defunctzombie>useland module can still have native bindings
18:27:58  <defunctzombie>just means it doesn't need to be maintained by core
18:28:02  <CoverSlide>true
18:28:18  <CoverSlide>well, personally, i would like it in js
18:28:28  <CoverSlide>but yeah if it's native that's a different story
18:28:45  <defunctzombie>personally, I want it to be fast and just work :)
18:29:30  <CoverSlide>yeah, but dealing with lower-level http stuff is a pain, and the http_parser api is terrible
18:29:51  <CoverSlide>99% of the time, i would be using core
18:32:32  * mikolalysenkoquit (Ping timeout: 272 seconds)
18:35:25  * ins0mniajoined
18:35:38  * defunctzombiechanged nick to defunctzombie_zz
18:36:30  * defunctzombie_zzchanged nick to defunctzombie
18:38:48  * defunctzombiechanged nick to defunctzombie_zz
18:42:18  * mikealjoined
18:42:26  * evboguejoined
18:45:09  * mikealquit (Client Quit)
18:51:52  * AvianFluquit (Remote host closed the connection)
18:57:12  * mikealjoined
18:57:20  * tphummeljoined
19:01:24  * mikealquit (Client Quit)
19:09:23  * alunnyquit (Ping timeout: 248 seconds)
19:09:54  * tilgoviquit (Remote host closed the connection)
19:10:47  * evboguequit (Remote host closed the connection)
19:19:33  * ralphtheninjaquit (Ping timeout: 276 seconds)
19:24:31  * defunctzombie_zzchanged nick to defunctzombie
19:31:46  * mikealjoined
19:34:58  * AvianFlujoined
19:46:42  * sveisvei_changed nick to sveisvei
19:49:32  * CryptoQuickjoined
19:54:38  * cianomaidin_joined
19:57:13  * cianomaidinquit (Ping timeout: 246 seconds)
19:57:14  * cianomaidin_changed nick to cianomaidin
20:05:49  * alunnyjoined
20:07:57  * cianomaidinquit (Read error: Connection reset by peer)
20:09:31  * CryptoQuickpart
20:10:38  * cianomaidinjoined
20:10:47  * CryptoQuickjoined
20:10:58  * CryptoQuickchanged nick to huntertr
20:13:00  * cianomaidin_joined
20:13:21  * ins0mniaquit (Ping timeout: 245 seconds)
20:14:45  * cianomaidin__joined
20:15:42  * alunnyquit (Ping timeout: 264 seconds)
20:16:30  * dguttmanquit (Quit: dguttman)
20:16:49  * cianomaidinquit (Ping timeout: 246 seconds)
20:16:50  * cianomaidin__changed nick to cianomaidin
20:17:10  * defunctzombiechanged nick to defunctzombie_zz
20:17:24  * cianomaidin_quit (Ping timeout: 248 seconds)
20:36:14  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
20:36:14  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
20:45:20  * dguttmanjoined
20:46:46  * ins0mniajoined
20:48:38  * ralphtheninjajoined
20:51:43  <substack>\o/
20:56:40  <Raynos>defunctzombie: I run dedup because known issue dedup ( https://github.com/Gozala/method/wiki/Known-Issues )
20:58:04  * tphummelquit (Quit: tphummel)
21:01:11  * tphummeljoined
21:01:12  * devaholicquit (Ping timeout: 252 seconds)
21:01:56  * alunnyjoined
21:03:45  * tphummelquit (Client Quit)
21:06:03  * cianomaidin_joined
21:08:19  * cianomaidinquit (Ping timeout: 248 seconds)
21:09:11  <Raynos>defunctzombie: trying to use tryme locally
21:09:12  <Raynos>no -h :(
21:09:40  * cianomaidin_changed nick to cianomaidin
21:11:34  <Raynos>defunctzombie: tryme is a pain in the ass to use locally
21:17:14  * cianomaidinquit (Read error: Connection reset by peer)
21:20:26  * cianomaidinjoined
21:30:37  * cianomaidinquit (Ping timeout: 256 seconds)
21:33:21  * cianomaidinjoined
21:42:16  * ryan_stevensjoined
21:48:41  * devaholicjoined
21:50:43  * cianomaidinquit (Quit: cianomaidin)
22:01:03  * cianomaidinjoined
22:04:41  * AvianFluquit (Remote host closed the connection)
22:13:35  * devaholicquit (Ping timeout: 255 seconds)
22:15:49  * dominictarrjoined
22:16:45  * devaholicjoined
22:16:45  * devaholicquit (Client Quit)
22:17:23  * ryan_stevensquit (Quit: Leaving.)
22:17:45  * niixquit (Remote host closed the connection)
22:23:39  * ryan_stevensjoined
22:27:46  * tphummeljoined
22:30:09  <Raynos>isaacs, gozala: https://gist.github.com/db93eb326f2287ba31bc
22:30:13  <Raynos>npm dedup is fucked :/
22:30:41  <Raynos>reducible is there twice
22:30:43  <Raynos>which is fucked
22:31:37  <isaacs>Raynos: what package can i install to see this?
22:31:41  <isaacs>Raynos: and what version of npm is this?
22:32:47  <Raynos>building reproducable case
22:33:13  <Raynos>https://github.com/Colingo/widget-list
22:33:41  <Raynos>isaacs: https://gist.github.com/c83dd4b550992d67eda0
22:35:38  <Raynos>-> https://github.com/isaacs/npm/issues/2895#issuecomment-12845398
22:35:49  <Raynos>I broke browserify >_> everything breaks when you break browserify
22:35:51  <Raynos>it's fixed now though
22:37:33  <isaacs>Raynos: works for me
22:37:40  <isaacs>Raynos: not even slightly fucked
22:37:44  <Raynos>isaacs: ;_;
22:37:58  <Raynos>ill npm cache clear :D
22:37:59  <isaacs>Raynos: test: `npm install npm-test-lock-contender; npm dedupe; npm ls express`
22:38:10  <isaacs>that installs 50 deps that all depend on express and glob
22:40:10  <Raynos>npm ERR! Error: EMFILE, open '/home/raynos/.npm/fresh/0.1.0/package.tgz'
22:40:10  <Raynos>npm ERR! If you need help, you may report this log at:
22:40:10  <Raynos>npm ERR! <http://github.com/isaacs/npm/issues>
22:40:10  <Raynos>npm ERR! or email it to:
22:40:10  <Raynos>npm ERR! <[email protected]>
22:41:12  <Raynos>still same thing https://gist.github.com/ee9c6baad7f12157a10a
22:43:26  <Raynos>chrisdickinson: browservify is awesome :3
22:43:33  <chrisdickinson>thanks!
22:43:33  <isaacs>Raynos: you need a newer npm
22:43:42  <isaacs>oh no, you updated
22:43:56  <isaacs>Raynos: how do i install this widget-list thing?
22:43:57  <Raynos>yeah I installed the latest version same thing
22:44:07  * isaacscannot reproduce
22:44:09  <Raynos>git clone [email protected]:Colingo/widget-list
22:44:20  <Raynos>&& cd widget-list && npm i
22:44:21  <isaacs>npm ERR! 404 'widget-list' is not in the npm registry.
22:45:02  <isaacs>Raynos: do not run dedupe in the middle of an install.
22:45:12  <isaacs>Raynos: that will cause undefined behavior.
22:45:16  <Raynos>oh
22:45:20  <Raynos>is that the issue :/
22:45:21  <isaacs>Raynos: things could be inthe middle of unpacking. it's really a terrible idea to do this.
22:45:25  <isaacs>no, i don't think so
22:45:27  <Raynos>ok
22:45:29  <isaacs>but it's insane. stop it.
22:45:34  <Raynos>ill go and remove all my postinstall hooks
22:45:54  <isaacs>k
22:46:39  <isaacs>weird, dedupe isn't doing *(anything* here
22:46:43  <isaacs>like, ti's exiting early
22:47:37  <Raynos>yeah
22:50:46  <isaacs>Raynos: oh, dedupe doesn't do anything to devDependenceis
22:50:48  <isaacs>that's why
22:50:52  <Raynos>Oh.
22:50:54  <Raynos>blargh
22:51:03  <Raynos>I think it should
22:51:08  <Raynos>I use devDependencies for examples
22:51:35  <isaacs>patch welcome
22:53:30  <Raynos>isaacs: Is there an npm version bump command that bumps the patch number?
22:53:39  <Raynos>I do npm version; visual inspection; npm version 0.1.whatever
22:53:43  <isaacs>Raynos: npm version patch
22:53:49  <Raynos>YES
22:53:51  <Raynos>#winning
22:53:58  <isaacs>Raynos: it also commits to git with a tag and everything
22:54:13  <isaacs>Raynos: if you do `npm config set sign-git true` then it'll sign with your gpg key, as well
22:54:47  <Raynos>cool
22:54:50  <Raynos>whats signing?
22:56:07  * AvianFlujoined
22:57:14  <Raynos>`npm version patch && npm publish && git push origin master` should be an alias :D
22:57:29  <rvagg>signing: R͌̃̔̆͐ͩ́̊͊̚A̲̬͔͔͑́ͩ͐̓͠Y̴̹ͭ̆ͦ͒̔́̈̄Ṋ̟͉̓ͭ̒̀͌̚͞O͛̋̈̿̒ͭͦ͗͊̔S̀̾͗́̾ͩ̀ͨ̂̃
22:57:59  <isaacs>Raynos: git push origin master --tags
22:58:14  <Raynos>if you say so :3
22:58:20  <Raynos>will that push to master AND push tags
22:58:22  <Raynos>or only tags?
22:58:44  <isaacs>it will push to master, and also push all tags
22:59:08  <rvagg>npm is like the tardis... there's sooo much packed into that tiny command
22:59:14  <Raynos>cool
22:59:48  <rvagg>`npm version patch` is new to me.. tho I like my package.json comma-first usually so it's annoying when a program JSON.stringifies it
23:00:03  <Raynos>i just have the package.json style as npm
23:00:08  <Raynos>i dont hand edit package.json anymore
23:00:16  <Raynos>its auto generated and -S and -D do the rest
23:00:20  <Raynos>-S, -D, npm version patch
23:05:27  <isaacs>rvagg: i hear ya. ship sailed on that one, sadly :)
23:05:39  <isaacs>rvagg: if you want your json done programmatically, there's a spec for how to do it, and a function that does it
23:07:46  * defunctzombie_zzchanged nick to defunctzombie
23:12:49  <Raynos>isaacs: [email protected] is that an autogenerated email or a real one?
23:13:14  <isaacs>Raynos: i dunno. email them and ask :)
23:13:34  <Raynos>so you dont autogenerate a boilerplate email if it doesnt exist in that format? :P
23:13:55  <isaacs>no
23:14:12  <isaacs>i expect you to give me an email address, and if you don't, i delete your account at my discretion
23:14:18  <isaacs>andalso, the email is public.
23:14:25  <isaacs>because email has never been anything but public.
23:15:04  <substack>isaacs: suppose I need to use 2 different versions of a lib in the same program
23:15:12  <substack>is there a way to nicely encode that in the package.json?
23:15:32  <isaacs>substack: no
23:15:55  <substack>ok I'll make a shell script for it
23:15:57  <isaacs>substack: that's an edge case npm doesn't support
23:16:08  <substack>understandable
23:16:29  <substack>migrating some versions but we can't do it all at once
23:19:08  <dominictarr>isaacs: npm just needs it's own email type feature
23:19:16  <dominictarr>npmail
23:19:41  <dominictarr>npm message Raynos "LOL"
23:19:50  <Raynos>:D
23:19:53  <Raynos>NPM MAIL SYSTEm
23:19:54  <Raynos>YES
23:19:56  <Raynos>DO IT
23:20:02  <dominictarr>then next time Raynos installs anything
23:20:11  <dominictarr>he gets my message
23:20:24  <dominictarr>isaacs: good idea, don't you think?
23:20:26  <Raynos>substack: you can do it with two dependencies :p
23:20:42  <Raynos>dominictarr: XD `npm i blargs .... NPM OK DOMINICTARR LOL`
23:21:07  <isaacs>substack: yeah, name the deps different things
23:21:14  <isaacs>substack: thing1 and thing2
23:21:19  <dominictarr>then, I just create a user name: ERROR
23:21:41  <isaacs>substack: which depend on [email protected] and [email protected], respectively
23:21:48  <isaacs>substack: and both do module.exports=require('thing')
23:21:56  <isaacs>MOAR MODULES!
23:22:05  <isaacs>LOUDBOT: twitlast
23:22:06  <LOUDBOT>http://twitter.com/LOUDBOT/status/296397836717797376 (HighBit/##church-of-loudbot)
23:22:22  * isaacs&
23:25:29  <Raynos>fffff... npm ERR! Error: bad_request Only reserved document ids may start with underscore.: _global
23:52:23  <ralphtheninja>dominictarr: could you expand a little on the more/less we can/need to agree on?
23:52:50  <dominictarr>ralphtheninja: I'm writing up something now
23:54:27  <ralphtheninja>ok, cool
23:57:37  <gozala>Raynos: reopening same issue over & over again does not really help solving it
23:58:02  <Raynos>agreed
23:58:17  <Raynos>When I get round to it this week I'm going to make method stateful and PR reducers / reducible
23:58:19  <gozala>Blaming library for the dedup issue is not helpful either
23:58:46  <Raynos>gozala/method is the only library that has this issue :/
23:58:51  <gozala>Raynos: I pointed out the issues with the approach you've suggested
23:59:00  <gozala>it introduces more issues than it solves
23:59:00  <Raynos>I know there are issues
23:59:05  <Raynos>fuck them. Don't care.
23:59:11  <gozala>and in fact it just mitigates issues does not even solves it
23:59:32  <Raynos>sure it solves them
23:59:34  <gozala>you don't want to wind up with copies of same module in your browserified app
23:59:44  <gozala>I do care though
23:59:47  <Raynos>method("[email protected]")