00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:32:15  * yorickquit (Remote host closed the connection)
00:58:00  * dominictarrjoined
01:02:41  <devaholic>nice
01:05:20  * jez0990_quit (Remote host closed the connection)
01:06:33  * defunctzombiechanged nick to defunctzombie_zz
01:13:17  * jez0990joined
01:13:17  * jez0990quit (Changing host)
01:13:18  * jez0990joined
01:16:42  * jez0990quit (Remote host closed the connection)
01:19:52  * nk109joined
01:21:22  <dominictarr>http://www.webcrunchers.com/stories/easywriter.html
01:22:00  * AvianFlu_joined
01:22:03  * AvianFluquit (Read error: Connection reset by peer)
01:22:46  * AvianFlu_changed nick to AvianFlu
01:28:14  * AvianFluquit (Read error: Connection reset by peer)
01:28:34  * AvianFlujoined
01:45:20  * defunctzombie_zzchanged nick to defunctzombie
01:45:58  <defunctzombie>github is down
01:46:05  <defunctzombie>I don't think I can go on living
01:48:17  <dominictarr>this is why npm doesn't depend on github
01:48:36  <chrisdickinson>wonder how well component is doing with the outage :|
01:50:19  <dominictarr>that was my thoughts also
01:50:24  <dominictarr>poor tj
01:55:33  <defunctzombie>awww
01:56:33  <Raynos>substack: being able to do `testling run` in current git repo would be cool without having to bump github
01:58:00  <substack>that would be nifty
01:58:04  <substack>good idea
02:00:34  <substack>dominictarr: http://ci.testling.com/dominictarr/crypto-browserify
02:00:41  <substack>must have a testling field
02:01:28  <dominictarr>oh, right
02:02:40  <dominictarr>what browsers are supported?
02:03:07  <substack>whichever ones you want to support
02:03:19  <substack>I got http-browserify working all the way down to ie6
02:03:24  <substack>just depends on what your goals are
02:03:53  <dominictarr>that is awesome
02:04:08  <dominictarr>you have the latest chrome?
02:04:35  <substack>http://testling.com/browsers.json
02:04:40  <substack>chrome/canary is the nightly build
02:04:53  <substack>or you can do chrome/23.0
02:04:57  <defunctzombie>still think you should have the inverse browser list :p
02:05:11  <defunctzombie>and when new browsers are deployed run tests for people
02:05:12  <defunctzombie>:)
02:05:27  <defunctzombie>it would be cool if travis did this actually for node
02:05:31  <defunctzombie>so when node 0.10 lands
02:05:35  <defunctzombie>they re-run my repos
02:05:41  <defunctzombie>and I know what shit won't work
02:05:44  <substack>defunctzombie: https://npmjs.org/package/normalize-browser-names
02:06:09  <defunctzombie>substack: but that is a manual process
02:06:13  <substack>browser names are refactored out into that repo
02:06:17  <dominictarr>substack, okay, fixed it. have to wait for github to come back to test...
02:06:20  <defunctzombie>and an api or something
02:06:25  <substack>dominictarr: ok sweet!
02:06:39  <Raynos>aw man github
02:06:40  <Raynos>y u down
02:07:14  <substack>defunctzombie: all the browser naming is factored out into that module
02:07:19  <defunctzombie>substack: the point is that since browsers are released all the time, I don't want to constantly update my files
02:07:24  <substack>so if you want the feature sooner, you can send me a pull req
02:07:37  <defunctzombie>but I still want to continue testing on versions that existed
02:07:41  <defunctzombie>:)
02:08:01  <defunctzombie>it wouldn't be a pull request for that repo tho right?
02:08:13  <substack>sure it would
02:08:30  <defunctzombie>to do the inverse thing?
02:08:41  <substack>"chrome/-2"
02:08:50  <defunctzombie>fascinating
02:08:56  <substack>you'd just need to tell the module what all the available browser versions are
02:09:11  <defunctzombie>so you ok with interpreting - to mean not
02:09:17  <defunctzombie>ie/-6
02:09:22  <defunctzombie>etc
02:09:22  <substack>no, minus
02:09:25  <substack>like array slice
02:09:44  <substack>latest minus N
02:09:59  <defunctzombie>hm.. but what about capturing all except?
02:10:16  <substack>why would you ever want that?
02:10:24  <defunctzombie>so lets say I support ie8/9/10 today
02:10:27  <defunctzombie>and tomorrow 11 comes out
02:10:32  <defunctzombie>I want to just have 11 now
02:10:39  <defunctzombie>and not stop supporting 8
02:10:45  <ralphtheninja>01
02:10:53  <substack>ie/8, ie/9, ie/10, ie/latest
02:10:57  <substack>or perhaps "ie/8.."
02:10:59  <defunctzombie>and I don't want to have to keep up with that since firefox and chrome iterate quickly
02:11:08  <ralphtheninja>ups my dog climbing on the keyboard
02:11:13  <defunctzombie>well, that won't work cause when ie 12 comes out
02:11:16  <defunctzombie>then I will stop testing 11
02:11:25  <defunctzombie>ie/8.. could be good
02:11:30  <defunctzombie>that is interesting syntax
02:11:32  <defunctzombie>and common
02:11:35  <defunctzombie>ie/8..latest
02:11:50  <defunctzombie>the point is that when you guys add an ew browser it could run the tests
02:11:58  <defunctzombie>for that new browser
02:12:16  <defunctzombie>letting me know.. hey.. your shit is broken or works in new browser (since you guys are the ones that know when you add it)
02:12:23  <defunctzombie>and what browsers my commit had run for
02:13:05  <defunctzombie>just thinking about the workflow, I think people could find that useful and requires less maintenance of their metadata
02:13:34  <defunctzombie>I wish travis did this actually, maybe one day they will
02:14:57  <defunctzombie>anyhow... I will add the browser/N..N syntax :)
02:17:12  * rvagg_joined
02:25:13  <substack>sweet!
02:25:57  <substack>and to make "latest" work you'll need to change the api to support taking the entire list of supported browsers as a param
02:29:43  * jibayquit (Quit: Leaving)
02:33:18  * defunctzombiechanged nick to defunctzombie_zz
02:33:44  * defunctzombie_zzchanged nick to defunctzombie
02:34:09  <defunctzombie>my dom library is going to be glorious
02:34:41  <substack>did you figure out how to fix the mouseenter thing?
02:34:50  <substack>without restoring to jquery that is
02:36:09  <defunctzombie>yea
02:36:14  <defunctzombie>emulate it
02:36:19  <defunctzombie>that is what jquery does as well
02:36:39  <defunctzombie>I added a todo to make sure I get proper emulation and need to work on that a bit more
02:36:46  <defunctzombie>been working on making tests
02:36:49  <defunctzombie>and such
02:37:44  <substack>tests are pretty great
02:37:51  <defunctzombie>yea
02:38:06  <defunctzombie>does testling have a way for me to add shims?
02:38:14  <substack>nope
02:38:38  <defunctzombie>sadness, guess it won't be marked as working in some IE versions that would need shims
02:38:50  <defunctzombie>haha
02:39:07  <substack>do you mean es5 shims?
02:39:10  <defunctzombie>yea
02:39:19  <defunctzombie>sorry, not the browser field stuff
02:39:30  <defunctzombie>es5 shims so older ghetto browsers can be tested
02:39:34  <substack>you can just inline working versions of those
02:39:41  <defunctzombie>inline?
02:40:06  <defunctzombie>(I can't view any examples as github is offline hahah)
02:40:10  <substack>var isArray = Array.isArray || function (obj) { return Object.prototype.toString.call(obj) === '[object Array]' }
02:40:34  <defunctzombie>well, I don't like to include those in my lib
02:40:46  <defunctzombie>I believe that the user should be responsible for feature compat
02:40:55  <defunctzombie>and the readme will just say what you should use
02:40:57  <substack>it's much, much worse if you require people to use something like es5-shim
02:41:04  <defunctzombie>I wouldn't require it
02:41:12  <substack>you should just not even show tests in that case
02:41:20  <defunctzombie>I would just list the individual shims for those
02:41:21  <substack>for browsers that require es5-shim
02:41:27  <substack>don't even do that
02:41:29  <substack>just make it work
02:41:31  <substack>it's seriously easy
02:41:47  <substack>you add a couple inline functions then it works
02:41:52  <defunctzombie>the problem is it causes all these libs to have the same copies over and over of the shims
02:41:57  <substack>so?
02:42:02  <defunctzombie>which just bloats them
02:42:06  <substack>not really
02:42:17  <substack>it's like 200 bytes
02:42:19  <defunctzombie>stuff like function.bind, etc
02:42:20  <substack>tops
02:42:24  <substack>these are all really tiny
02:42:26  <defunctzombie>indexOf
02:42:32  <substack>all tiny
02:42:34  <defunctzombie>what else
02:42:37  <defunctzombie>any dom things
02:42:54  <substack>dom compat is best left to libraries to abstract away
02:43:05  <defunctzombie>I shall see, maybe it will be easy enough to just add inline
02:43:13  <defunctzombie>but I typically frown upon that
02:43:27  <substack>inlining little functions is the simplest possible thing
02:43:29  <defunctzombie>cause now every library has its own broken ass version of all these shims
02:43:40  <substack>and you do it once and then you forget about it
02:43:50  <defunctzombie>instead of just assuming a certain environment and going with it
02:44:05  <substack>you can publish the shims individually as modules
02:44:13  <substack>like this one http://npmjs.org/package/jsonify
02:44:45  <substack>var JSON = typeof JSON === 'undefined' ? require('jsonify') : JSON
02:44:47  <substack>or rather
02:44:50  <defunctzombie>Array.filter etc
02:44:54  <substack>var json = typeof JSON === 'undefined' ? require('jsonify') : JSON
02:45:49  <substack>function filter (xs, f) { var res = []; for (var i = 0; i < xs.length; i++) if (f(xs[i],i)) res.push(xs[i]); return res }
02:45:52  <substack>easy
02:46:16  <substack>if you've got tests these aren't too bad
02:46:30  <substack>since you've got indirect verification
02:46:32  <defunctzombie>mozilla already provides nice shims for those
02:47:16  <defunctzombie>basically, my thinking is this.. I am going with a certain language baseline (supported by the majority of modern browsers)
02:48:14  <defunctzombie>if you don't meet the baseline, then you just have to use shims to bring your support up to date, this is nice cause it lets the person decide what support they wish and prevents me from having to maintain shim code
02:48:21  <defunctzombie>I dunno.. maybe I will find a flaw in this
02:48:25  <defunctzombie>or it will be annoying
02:48:33  <defunctzombie>right now gotta just see what it works on period haha
02:48:45  <defunctzombie>but since github is offline.. well, here I wait :)
02:48:55  <substack>it's much nicer I think if libs just work
02:49:03  <substack>people shouldn't need to hassle with external dependencies
02:49:22  <substack>perhaps if there were a way to tell the build system to include shims or not things would be different
02:49:43  <substack>but that is its own kind of complexity
02:49:51  <defunctzombie>yea
02:50:17  <defunctzombie>I agree that the libs should just work, part of me just wants to push forward with assuming a modern base tho
02:50:25  <defunctzombie>and if you want older shit then it is on you more
02:50:28  <defunctzombie>and not on me
02:51:05  <defunctzombie>and yea.. I guess part of the problem is that it is seen as annoying to include the shims
02:51:14  <defunctzombie>but that doesn't have to be the case (I think)
03:01:24  * rvagg_quit (Ping timeout: 264 seconds)
03:02:12  * rvagg_joined
03:08:57  <defunctzombie>oh god dammit
03:09:05  <defunctzombie>I wanted to publish the lib under the name 'dom'
03:09:12  <defunctzombie>apparently someone already has a lib with that name
03:09:19  <defunctzombie>some old lib
03:18:26  <defunctzombie>WHY IS GITHUB DOWN?!
03:18:27  <LOUDBOT>NORTON INTERNET SECURITY THINGS "SMOKE SOME WEED" BY ICE CUBE IS A GOOD CHOICE, AND THINKS I'LL LIKE THEIR SOFTWARE, TOO.
03:26:10  <substack>defunctzombie: but what does your lib actually do?
03:26:29  <substack>anyways do this: grep dom /usr/share/dict/words
03:27:09  <substack>kingdom is available
03:27:20  * paul_irishchanged nick to paul_irish_
03:27:32  <substack>although descriptive names are nicer if there is something more appropriate
03:32:30  <defunctzombie>kingdom hahah
03:32:42  <defunctzombie>I would show you what it does if GITHUB WAS ONLINE
04:00:27  <defunctzombie>substack: to make chrome/latest work that needs the list of versions (this is what you were talking about before I guess)
04:00:33  <defunctzombie>I got ie/8..10 to work
04:01:39  <defunctzombie>are you ok with normalize(obj|arr [, list of browsers]); ?
04:03:19  <hij1nx>good thing git is distriubted.
04:04:42  <defunctzombie>dominictarr: your distributed system is needed hahaha
04:04:47  <defunctzombie>we need to reboot society
04:05:00  <defunctzombie>hij1nx: what's your ip.. we need to start sharing repos! haha
04:05:36  <substack>defunctzombie: yeah that works, as I was saying earlier
04:05:46  <substack>is necessary in fact
04:05:49  <defunctzombie>k
04:05:59  <defunctzombie>have a preference for the format of that list?
04:06:06  <defunctzombie>or just the same as what testling-ci returns?
04:06:26  <substack>could use this: http://testling.com/browsers.json
04:06:38  <substack>or this one: http://browserling.com/browsers.json
04:06:46  <substack>which are different
04:06:51  <substack>one normalized, one denormalized
04:06:57  <substack>easy to convert between those
04:07:28  <defunctzombie>have a preference?
04:07:56  <defunctzombie>I like the expanded one personally as a data structure
04:08:01  <defunctzombie>since it has already been parsed
04:08:16  <substack>sure that works
04:09:46  <defunctzombie>what i really want is browser: [ versions ] hahha
04:12:22  <defunctzombie>substack: do you want N.. to imply N..nightly or N..latest ?
04:12:31  <defunctzombie>or do you want it to always be explicit?
04:12:59  <defunctzombie>(latest being the latest "stable")
04:16:19  <substack>which would be more useful?
04:17:25  <defunctzombie>my initial thoughts are latest
04:17:36  <defunctzombie>since I don't want to have broken nightlies annoy me
04:17:49  <defunctzombie>(just thinking about what I care failing)
04:18:03  <defunctzombie>very few people have nightlies or use them for their main browsing
04:18:12  <defunctzombie>however as soon as a new stable lands
04:18:15  <defunctzombie>that becomes relevant
04:18:42  <defunctzombie>also, latest is a bit ambiguous actually
04:18:47  <defunctzombie>'stable' maybe?
04:19:22  <defunctzombie>(and I would favor explicit over implicit and maybe not support N.. at all)
04:24:48  <dominictarr>defunctzombie: this is exactly as I predicted at nyc.js
04:25:38  <dominictarr>make the syntax STABLE~2
04:25:45  * defunctzombiechanged nick to defunctzombie_zz
04:25:47  <dominictarr>like HEAD~2
04:25:52  <dominictarr>like in git
04:26:17  <dominictarr>that would mean "the version 2 before stable
04:26:18  <dominictarr>'
04:46:46  <substack>github's back
04:46:57  <ik>waaannk
04:50:46  * defunctzombie_zzchanged nick to defunctzombie
05:03:08  <Raynos>Hey guys
05:03:17  <Raynos>How do you handle duplication between tests, examples, readmes?
05:03:40  <substack>Raynos: I don't think duplication among those is much of an issue
05:03:42  <Raynos>https://github.com/Colingo/valid-schema/tree/master/examples, https://github.com/Colingo/valid-schema/tree/master/test, https://github.com/Colingo/valid-schema#validators
05:03:48  <Raynos>has pretty much the exact same code
05:03:57  <substack>tests are write-and-forget for the most part
05:04:00  <Raynos>substack: duplication is only an issue when I forget to update one of the three 3
05:04:10  <substack>just copy an example of two in the readme
05:04:16  <Raynos>im likely to change tests
05:04:21  <Raynos>and forget to update README or examples
05:04:29  <Raynos>I do this already with other older projects
05:04:38  <Raynos>or better phrased
05:04:56  <substack>be more diligent
05:05:06  <Raynos>thats like saying
05:05:11  <substack>I don't know of a good technical solution to this one
05:05:15  <Raynos>you can keep comments and code in sync by being more diligent
05:05:19  <substack>that can justify its own complexity
05:05:30  <Raynos>im thinking I should use isaacs/tt
05:05:36  <Raynos>to add assert statements to my examples
05:05:43  <Raynos>and have my examples be a subset of my tests
05:05:46  <substack>gross
05:05:49  <substack>that sounds terrible to read
05:06:05  <Raynos>substack: https://github.com/Colingo/valid-schema/blob/master/examples/arbitary-functions.js
05:06:14  <substack>prediction: your examples will be worse and your tests will test less things
05:06:16  <Raynos>does the additional assert statement make the example terible?
05:06:40  <substack>that's not very useful as a test though
05:06:44  <Raynos>I can solve the "test less thigns" problem by having examples be a _subset_ of the tests and writing specific verbose test cases that are not examples
05:07:03  <Raynos>substack: https://github.com/Colingo/valid-schema/blob/master/test/arbitary-functions.js that isn't a bad test
05:07:37  <Raynos>well at the very least I should be able to write a tool that keeps README and examples folder in sync
05:09:52  <defunctzombie>writing tests and examples is good cause it forces you to use the api :)
05:10:17  <defunctzombie>you could write tests that are examples
05:10:28  <Raynos>defunctzombie: Agreed. the problem is having the diligence to update them when you fix bugs / make tweaks later
05:10:54  <defunctzombie>well, ideally tests will continue to be updated... examples could get stale
05:11:06  <Raynos>examples and README.md get stale
05:11:20  <defunctzombie>but not sure there is a good technical solution since those things are intended for people
05:11:32  <defunctzombie>and are written with in a different way as a resuly
05:11:34  <defunctzombie>*result
05:12:34  <Raynos>substack: does testling fail a test if it throws an exception at the top level but otherwise outputs valid TAP
05:13:01  <substack>it tries to catch errors and generates tap for them
05:13:39  <Raynos>i think ill add assert statements to my examples folder and add them to my test runner aswell as my test folder
05:13:54  <Raynos>then use diligence to keep the README upto date
05:14:10  <Raynos>maybe add npm test as a pre publish hook
05:29:46  <defunctzombie>substack: is testling-ci backed up?
05:40:47  <substack>the data is just in couchdb
05:41:02  <substack>no backups but it's easy to make your own backups
05:41:20  <substack>just add .json to any project page: http://ci.testling.com/substack/node-falafel.json
05:41:42  <defunctzombie>substack: sorry.. I meant is it delayed :)
05:41:51  <defunctzombie>http://ci.testling.com/shtylman/dom
05:41:53  <defunctzombie>been pending a while
05:42:13  <substack>"pending" doesn't mean anything
05:42:21  <substack>there is no queue to get backed up
05:42:38  <substack>except for on github's end perhaps
05:42:57  <defunctzombie>I see
05:43:09  <defunctzombie>so what does it mean?
05:43:11  <substack>http://ci.testling.com/shtylman/nonsense
05:43:18  <defunctzombie>ah ok
05:43:18  <substack>it means it doesn't have any data
05:43:20  <Raynos>defunctzombie: still no typeahead
05:43:30  <defunctzombie>Raynos: https://github.com/shtylman/dom
05:43:36  <substack>"no data" would be a better default badge
05:43:36  <defunctzombie>working on it :)
05:43:49  <substack>but I have more important things to be building
05:43:54  <defunctzombie>yes
05:44:07  <defunctzombie>substack: https://github.com/shtylman/normalize-browser-names/commits/master
05:44:10  <defunctzombie>first stab at it
05:44:14  <defunctzombie>N..N support
05:44:17  <defunctzombie>and N..stable support
05:44:30  <Raynos>defunctzombie: so its another take on zepto
05:44:34  <substack>and chroot and branches
05:45:28  * dominictarrquit (Ping timeout: 245 seconds)
05:45:34  <defunctzombie>Raynos: no ajax
05:45:38  <defunctzombie>no effects
05:45:41  <substack>function qs (sel) { return [].slice.call(document.querySelectorAll(sel)) }
05:45:43  <defunctzombie>this is just the dom basics
05:46:06  <defunctzombie>the goal isn't to match jquery
05:46:18  <defunctzombie>just looks similar cause 1) I find some of the api reasonable
05:46:22  <defunctzombie>2) familiarity
05:46:48  <defunctzombie>right now it is a random collection of pieces from different modules I found
05:47:05  <defunctzombie>and made to work under the tests and such
05:47:06  <substack>why not just use the different modules directly?
05:47:26  <defunctzombie>too annoying
05:47:37  <defunctzombie>no consistency and everything becomes more verbose
05:47:40  <defunctzombie>much harder to follow
05:47:58  <defunctzombie>fundamentally I want to use the dom api directly, but that shit is all over the place
05:48:14  <defunctzombie>so things like these thing dom apis are aimed at just doing the basics
05:48:17  <defunctzombie>quickly and easily
05:49:15  <substack>dunno, the dom isn't so bad
05:49:38  <substack>ever since querySelector found its way into browsers
05:49:45  <defunctzombie>it is if you want to do anything and not have it be crazy
05:49:50  <defunctzombie>querySelector is very nice
05:49:53  <defunctzombie>and makes many things easier
05:49:59  <defunctzombie>but it is still bad in many places
05:52:23  * stlsaintjoined
05:52:23  * stlsaintquit (Changing host)
05:52:23  * stlsaintjoined
05:53:51  <defunctzombie>Raynos: https://github.com/shtylman/typeahead/commits/master
05:53:53  <defunctzombie>happy?
05:54:31  <Raynos>defunctzombie: that's like saying "its an underscore clone without templating and chaining"
05:54:46  <defunctzombie>?
05:55:36  <Raynos>if you remove two things from the kitchen sink its still a kitchen sink :D
05:55:52  <defunctzombie>when I want to make some good food, I need a kitchen sink
05:56:07  <defunctzombie>otherwise I have to go to too many places to get anything done
05:56:36  <defunctzombie>I challenge you to refactor typeahead with all these tiny modules
05:56:41  <defunctzombie>and show me that code vs this code
05:57:57  <Raynos>your code is still ugly :D
05:58:10  <Raynos>you just replaced jquery with something thats very similar just smaller
05:59:38  <defunctzombie>like I said.. if you think it is ugly
05:59:42  <defunctzombie>use little modules
05:59:47  <defunctzombie>and then show me what yours looks like
06:00:11  <defunctzombie>I guarantee it will be harder to read and develop with
06:00:22  <defunctzombie>the reason I like a basic dom lib is simple
06:00:27  <defunctzombie>when I am working on dom tasks
06:00:34  <defunctzombie>I view that as one task
06:00:41  <defunctzombie>and one cohesive set of operations
06:00:56  <defunctzombie>and don't want to hunt all over for random broken ass attempts to do these things
06:02:33  <Raynos>the DOM is not one task
06:02:35  <Raynos>far from it
06:02:54  <Raynos>but who gives a shit :D
06:03:01  <Raynos>ill refactor typeahead
06:03:17  <Raynos>typeahead doesnt have a test nor an example
06:03:28  <defunctzombie>nope :)
06:03:35  <defunctzombie>not yet
06:04:51  * substackdoesn't care so long as there are tests
06:05:02  <substack>and nice node-style exports
06:05:25  <substack>do that and let the npm users pick the winners!
06:05:28  <defunctzombie>haha
06:05:32  <defunctzombie>\o/
06:05:49  <defunctzombie>I think github is still acting funny.. my testling tests aren't running
06:05:57  <defunctzombie>maybe the hook isn't firing :(
06:05:58  <substack>highly possible
06:06:03  <substack>you can click "test hook"
06:06:20  <substack>https://github.com/shtylman/dom/settings/hooks
06:06:50  <defunctzombie>yea, I did
06:07:28  <defunctzombie>oh well, probably some stuff still delayed
06:07:32  <defunctzombie>will just give it time
06:07:39  <defunctzombie>anyhow.. thoughts on the normalize stuff?
06:07:45  <defunctzombie>I went with N..stable vs latest
06:07:49  <defunctzombie>to be more clear
06:07:55  <defunctzombie>and ..nightly is not supported
06:08:02  <defunctzombie>as that is browser dependent
06:12:25  * defunctzombiechanged nick to defunctzombie_zz
06:26:46  * mikealquit (Quit: Leaving.)
06:29:00  * mikealjoined
06:41:38  * AvianFluquit (Remote host closed the connection)
06:44:00  * AvianFlujoined
06:46:35  * defunctzombie_zzchanged nick to defunctzombie
06:47:53  * AvianFluquit (Remote host closed the connection)
07:12:05  <substack>[email protected] out
07:12:19  <substack>adds programmatic directories and actually has unit tests
07:32:40  <substack>ok so this is pretty sweet
07:33:00  <substack>with the testling-ci server that will go live soon you can `git push` to it multiple times and not get the "Everything up-to-date" message :D
07:33:07  <substack>I should do a blog post about that
07:33:40  <substack>so this will let you send a web hook again to re-run tests without doing a dummy commit
07:34:14  <substack>the next thing is to get branches working, which involves fixing https://npmjs.org/package/github-push-receive
07:34:53  <substack>and I'll push the `..` range support tomorrow too
07:34:59  <substack>but getting pretty sleepy here
07:36:06  <substack>oh sweet, this will also get around some of the fast-forward issues we were having
07:36:22  <substack>since it just forgets completely previous history after an interval has elapsed
07:36:51  <defunctzombie>\o/
07:52:04  <substack>blarg not getting anything for http://ci.testling.com/substack/ever either
07:52:10  <substack>could be github is just being flakey tonight
08:00:23  * ralphtheninjaquit (Ping timeout: 255 seconds)
08:05:36  * ITproquit (Ping timeout: 264 seconds)
08:05:47  * ITprojoined
08:19:49  <defunctzombie>github hooks are back
08:20:05  <defunctzombie>I think they are still bringing random things online
08:20:54  <defunctzombie>I got this fun error http://ci.testling.com/shtylman/dom
08:24:38  <substack>\o/
08:25:14  * defunctzombiechanged nick to defunctzombie_zz
08:25:47  <substack>odd
08:26:14  <substack>hooray, ever tests are passing! http://ci.testling.com/substack/ever
08:26:24  <substack>on some browsers that is
08:31:03  <substack>Raynos: your patch worked! http://ci.testling.com/substack/ever
08:59:31  * rvagg_quit (Read error: Connection reset by peer)
09:13:24  * devaholicquit (Ping timeout: 260 seconds)
09:32:33  * rvagg_joined
09:42:41  * jibayjoined
09:54:53  <Raynos>Aw man
09:54:56  <Raynos>I just looked at github
09:55:01  <Raynos>it says I have 134 open issues
09:55:06  <Raynos>on my repos
09:59:28  * harrowquit (Read error: Connection reset by peer)
10:08:52  * harrowjoined
10:58:56  * yorickjoined
10:58:56  * yorickquit (Changing host)
10:58:56  * yorickjoined
11:14:06  * jez0990_joined
11:50:30  * rvagg_quit (Read error: Connection reset by peer)
11:59:18  * stlsaintquit (Ping timeout: 244 seconds)
14:04:38  * b__joined
14:39:58  * ralphtheninjajoined
15:32:13  * b__quit (Quit: Computer has gone to sleep.)
15:41:22  * devaholicjoined
16:03:16  * devaholicquit (Ping timeout: 246 seconds)
16:22:39  * defunctzombie_zzchanged nick to defunctzombie
16:29:32  <defunctzombie>substack: still getting the same error btw http://ci.testling.com/shtylman/dom
16:30:14  <defunctzombie>oh.. I see why that might be
16:30:23  <defunctzombie>test/*.js is recursive?
16:34:04  <defunctzombie>hm.. nope that wasn't it
16:38:48  <defunctzombie>nvm, was my bad not having the mocha dep listed in my package.json for devDeps
16:39:14  * AvianFlujoined
16:40:51  <defunctzombie>testling suggestion: bundle using --debug so that tracking down errors is easier
16:56:00  * yorickquit (Read error: Connection reset by peer)
16:56:16  * yorickjoined
16:56:16  * yorickquit (Changing host)
16:56:17  * yorickjoined
17:12:01  * AvianFluquit (Remote host closed the connection)
17:17:25  * dguttmanjoined
17:18:44  * ralphtheninjaquit (Ping timeout: 250 seconds)
17:18:49  * st_lukejoined
17:25:56  * dguttmanquit (Quit: dguttman)
17:27:12  * dguttmanjoined
17:39:11  * ranndeerquit (Ping timeout: 260 seconds)
17:39:14  * dsfadfjoined
17:57:43  * AvianFlujoined
18:08:04  * dguttmanquit (Read error: Connection reset by peer)
18:08:17  * dguttmanjoined
18:17:57  * st_lukequit (Remote host closed the connection)
18:23:31  <defunctzombie>oh yea... http://ci.testling.com/shtylman/dom got the major browsers working
18:26:03  * mikealquit (Quit: Leaving.)
18:28:21  * shuaibjoined
18:35:42  * dsfadfchanged nick to rannmann
18:35:42  * rannmannquit (Changing host)
18:35:42  * rannmannjoined
18:44:02  <yorick>substack: in seaport.connect, you don't expose the created stream anywhere, do you? 'sync' is emitted on that, and it'd be pretty useful to have :/
18:53:46  * st_lukejoined
18:56:06  * mikealjoined
18:56:35  <substack>yorick: seaport() is a stream now
19:31:27  <defunctzombie>substack: if you want IE9 support for 'ever' https://github.com/shtylman/dom/commit/edf41829258269b56bd042a55069eae0fbcd381d
19:31:49  <defunctzombie>you need to do something along those lines
19:32:03  <defunctzombie>i.e. use the default field values when user does not specify
19:38:24  <yorick>substack: well, I still need on('sync')
19:39:55  <yorick>substack: also, are you sure? there still is a s.createStream
20:08:25  * dominictarrjoined
20:09:04  <dominictarr>Raynos: substack documentation for level-scuttlebutt https://github.com/dominictarr/level-scuttlebutt
20:09:12  <Raynos>nice!
20:10:03  <Raynos>dominictarr: next up is travis & testling badges!
20:10:28  <dominictarr>documentation for map-reduce is next
20:10:35  <Raynos>oh thats probably better
20:12:15  <Raynos>dominictarr: udid is used to have a "source" thats persistent for that device?
20:12:39  <Raynos>why does it need to be persistent, why not just random
20:15:04  <dominictarr>a random one would work - like a session id
20:15:15  <dominictarr>but that will cause the vector-clock to grow
20:15:38  <dominictarr>really, this wants to be a hash of the public key
20:15:54  <dominictarr>there are also a few extra gotchas
20:16:14  <dominictarr>like, you have to consider each tab to be it's own VM
20:17:27  <dominictarr>so, each browser tab that has your application open gets it's own udid...
20:17:31  <dominictarr>but these can be reused later
20:17:59  <dominictarr>have a module for that, which i'll document today
20:18:38  <Raynos>the only weird part of the api
20:18:41  <Raynos>is whats the name
20:18:51  <Raynos>who gives level-scuttle the name?
20:19:34  <Raynos>oh theres a scuttlebutt function
20:33:09  <dominictarr>you can have multiple document types, which all corrispond to different scuttlebutt subclasses
20:34:02  <dominictarr>your app needs to know what type each thing is, to understand how to interpret the data
20:35:04  <dominictarr>also, the name is used to identify the data in leveldb
20:36:14  <Raynos>ok this is a bit weird
20:45:04  <dominictarr>Raynos: whats weird?
20:45:19  <Raynos>map reducing scuttlebutts
20:45:36  <Raynos>having scuttlebutts stored
20:45:46  <Raynos>replicating all the scuttlebutts in one go
20:45:59  * dguttmanquit (Quit: dguttman)
20:46:10  <dominictarr>welcome to level2
20:47:23  * dguttmanjoined
20:49:17  <dominictarr>Raynos: have you looked at scuttlebucket?
20:49:40  <Raynos>yes
20:49:43  <Raynos>thats a sensible idea
20:51:01  <dominictarr>so, scuttlebucket replicates multiple scuttlebutts in one go
20:55:28  * dominictarrquit (Ping timeout: 245 seconds)
21:00:30  * dominictarrjoined
21:01:30  <dominictarr>Raynos: you need map reduce, or something like that... so you can query or do aggregations over scuttlebutts.
21:01:55  <dominictarr>I'm beginning to think of queries more as data-pipelines
21:02:01  <dominictarr>than as queries, however
21:05:38  <Raynos>dominictarr: https://gist.github.com/4366145
21:05:59  <Raynos>thinking purely about an api to persists scuttlebutts
21:06:07  <Raynos>and map reducing is out of scope for that api
21:07:43  <Raynos>all thats saying is that changes to the scuttlebutt get stored under key "a:1~..." so it can store every single change if needed
21:08:08  <dominictarr>livefeed won't work as you expect
21:08:08  <Raynos>as long as you document what the storage schema is you can use map-reduce and level-map to map reduce and re-index the scuttlebutts
21:08:32  <dominictarr>because scuttlebutts are stored as ranges
21:08:37  <Raynos>yes
21:08:42  <Raynos>thats why its a substr
21:08:54  <Raynos>because I expect a:1~source~ts to be the key
21:09:16  <dominictarr>oh, rigth
21:09:25  <defunctzombie>substack: https://github.com/shtylman/zuul <-- for mocha users who want to test their stuff locally in a browser
21:09:39  <defunctzombie>without having to remember all the crap you have to setup
21:10:03  <Raynos>dominictarr: i guess there would be two changes from livefeed, to a:1~source~ts and a:1~~ts~source ?
21:10:19  <dominictarr>you would need to restrict the range
21:10:20  <substack>defunctzombie: neat!
21:10:25  <Raynos>but thats ok the denormalized one can be stored as ~a:1~ts~source
21:11:24  <Raynos>dominictarr: my desires for this is being able to work with db, readStream and livefeed directly assuming theres a documented way for scuttlebutts to be persisted
21:11:32  <dominictarr>you need to know from a key what sort of scuttlebutt it is
21:11:53  <Raynos>dominictarr: does that matter?
21:11:55  <dominictarr>I don't like the LevelScuttle(Model) thing
21:12:14  <dominictarr>how it overrides the scuttlebutt api to take a db as an argument
21:13:12  <dominictarr>so, if you try to connect two different types of scuttlebutt together they will break
21:13:33  <dominictarr>an api where it's easy to do that is a bad idea
21:13:44  <Raynos>i guess so
21:14:28  <dominictarr>there isn't anything stopping you from working with the live stream directly....
21:14:35  <dominictarr>but what do you want to do with it?
21:16:06  <Raynos>dominictarr: https://gist.github.com/4366200
21:16:39  <Raynos>I dont know I need to think about this more
21:16:52  <dominictarr>like I want to do queries like: what is the list of all the document names
21:18:33  <dominictarr>Raynos: what you link there will actually work with level-scuttlebutt
21:18:36  <dominictarr>currently
21:19:32  <dominictarr>except that it still patches the db object,
21:19:48  <dominictarr>but I'm thinking of a different approach that avoids that
21:20:08  <Raynos>look at gozala/method and Benvie/weakmap for those
21:20:46  <dominictarr>using a weakmap is still basically the same thing
21:20:55  <dominictarr>it just hides the patch
21:21:12  <dominictarr>what I'm thinking is to create a subdb
21:21:30  * substackdb
21:21:58  <dominictarr>that has the same api as levelup but prefixes all puts with a key...
21:22:39  <dominictarr>so that it fits within a parent levelup
21:22:46  <Raynos>dominictarr: https://gist.github.com/4366238 thats the api I want
21:22:57  <dominictarr>then you could join these into pipelines... basically...
21:24:22  <dominictarr>why are put and del seperate functions?
21:24:29  <Raynos>edited https://gist.github.com/4366238
21:25:02  <Raynos>dominictarr: because I want to use the levelup api but have level-scuttle persist the operations in a way that is compatible with a scuttlebutt
21:25:09  <Raynos>so del should set __deleted__: true
21:25:18  <dominictarr>but what sort of scuttlebutt?
21:25:19  <Raynos>and put should add a new key "a:1~source~ts": value
21:25:29  <Raynos>updated the gist to configure what sort of scuttlebutt
21:25:38  <Raynos>but I would assume scuttlebutt/model by default
21:25:46  <dominictarr>or do you just want the leveldb api? but replicated?
21:26:09  <Raynos>yeah really I just want to replicate leveldb
21:26:25  <Raynos>I think the cleanest way is to have seperate put & del functions that store the data in a replicatable form via scuttlebutts
21:27:48  <dominictarr>they need to share data
21:28:02  <dominictarr>they are more tightly coupled than your api represents
21:29:32  <dominictarr>also, if you are using put/del but with scuttlebutt underneath you loose fast range queries... so it's not really a levelup anymore
21:34:11  <Raynos>dominictarr: depends how you store it
21:34:31  <Raynos>but you are right my api is bullshit let me fix it
21:37:09  <Raynos>dominictarr: what about https://gist.github.com/4366291 ?
21:37:40  <Raynos>the idea is that its normal leveldb except it stores meta data to enable scuttlebutt replication under special keys
21:39:53  <dominictarr>yeah, that is better
21:40:06  <dominictarr>but it will actually be more like this: https://gist.github.com/4366290
21:40:52  <dominictarr>puts will be delayed, and leveldb will do a get first, and merge the put data with the old value
21:41:08  <dominictarr>and the user can implement a versioning pattern
21:42:12  <Raynos>thats different from level scuttle
21:42:36  <Raynos>thats arbitary merge strategies
21:43:34  <dominictarr>yes, but otherwise, everything about leveldb will still work
21:43:55  <Raynos>true
21:44:01  <Raynos>my suggestion is similar
21:44:09  <dominictarr>and the same use-cases will still be fast
21:44:12  <Raynos>except its store the replication meta data in seperate keys not in the document
21:44:20  <Raynos>in the value*
21:44:50  * rvagg_joined
21:45:33  <dominictarr>hmm, yes maybe you could use a write log
21:45:42  <dominictarr>to track what has been saved
21:46:05  <Raynos>defunctzombie: you could use testem instead
21:46:49  <defunctzombie>Raynos: didn't know about that, let me check it out
21:46:55  <defunctzombie>I wanted something really really simple
21:47:07  <defunctzombie>that seems more involved
21:47:08  <Raynos>testem is "simple" once you get it started :D
21:47:21  <defunctzombie>basically I just needed something to test before I push to testling :)
21:47:26  <defunctzombie>ahaha
21:47:27  <Raynos>https://github.com/Colingo/valid-schema/blob/master/.testem.json
21:47:37  <defunctzombie>I would prefer to not have more config files
21:47:41  <Raynos>:D
21:47:56  <Raynos>its just moving the testing config from the makefile to a json file
21:47:59  <defunctzombie>with zuul I just run it and point it at the tests I already have
21:48:10  <defunctzombie>it is really more like browserify-server
21:48:15  <defunctzombie>with a specific index.html
21:48:20  <defunctzombie>and ability to launch phantomjs
21:48:28  <Raynos>that works
21:48:44  <dominictarr>you'd just transform the put into a batch that saved the key:value for quering, and materialized it again source:ts:key for replication and conflict merges
21:48:46  <Raynos>now make it work with tape >:3
21:49:02  <Raynos>dominictarr: that's what I was thinking methods.put would do
21:49:23  <defunctzombie>Raynos: I thought about that actually, all you need some something to intercept the console.log calls
21:49:27  <defunctzombie>and add html elements to the page
21:49:35  <defunctzombie>I started to do it but I don't have any tape tests :)
21:49:47  <Raynos>defunctzombie: convert your tests to tape :D
21:49:48  <dominictarr>... but that is just a less flexible version of what level-scuttlebutt does
21:49:56  <defunctzombie>Raynos: bah
21:50:30  <substack>if software works you should have a good reason for fucking with it
21:50:35  <defunctzombie>yes
21:50:58  <Raynos>dominictarr: but level scuttlebutts focus is putting scuttlebutts into leveldb. The other focus is making leveldb mutations replicatable with scuttlebutt
21:51:11  <dominictarr>REWRITE EVERTHING TO USE STREAMS2 BECAUSE THAT IS WHY
21:51:11  <LOUDBOT>DON'T SAY THAT, THAT'S MEAN!
21:51:26  <Raynos>dominictarr: with my gist the fact that scuttlebutts are used is an internal detail of the replication logic.
21:51:29  <defunctzombie>ahahaha
21:51:37  <defunctzombie>I love when loudbot is relevant
21:52:17  <dominictarr>scuttlebutts are designed to be an instance entirely held within memory
21:52:41  <dominictarr>using them to replicate a entire database ruins that
21:53:18  <dominictarr>you could make an async scuttlebutt though...
21:53:21  <Raynos>blargh
21:53:44  <Raynos>ill play with level scuttlebutt some time
21:53:47  <Raynos>and try to figure things out
21:53:58  <Raynos>I realized I need an in memory representation of the state _somewhere_
21:54:07  <Raynos>it might as well be in scuttlebutts
21:54:16  <dominictarr>if you made a scuttlebutt-like thing that had put(key, val, cb) that could work
21:55:08  <dominictarr>Raynos: would you use the merge thing?
21:55:16  <dominictarr>if that worked?
21:55:30  <Raynos>dominictarr: I dont know how to implement my own merge :D
21:55:51  <Raynos>I would use it if it came with some convenient examples of merging at say replicator/model
21:55:58  <Raynos>that I can then start using in production :D
21:57:23  <dominictarr>right
22:00:08  <Raynos>maybe I do need a merge
22:03:02  <dominictarr>the merge is where you handle conflicts and validation
22:03:38  <dominictarr>read the dynamo paper
22:25:28  <dominictarr>substack: Raynos streetfood map-reduce example https://github.com/dominictarr/map-reduce#complex-aggregations
22:29:01  <Raynos>dominictarr: wouldnt that example be more efficient if you didnt store street
22:29:05  <Raynos>also I get the map / reduce
22:29:12  <Raynos>now what does the reduced data look like in leveldb?
22:29:35  <Raynos>i.e. how can I query it with views?
22:29:50  <substack>dominictarr: try some non-associative aggregates
22:30:03  <dominictarr>hang on
22:30:11  <substack>what makes couch reduce so useless is that they only ever wrote associative operations
22:30:28  <substack>so they didn't realize what a pain it is to conflate reduce with combine
22:30:41  <defunctzombie>substack: if I wanted to test something like an ajax request library, is there any way to do that with testling?
22:30:53  <substack>defunctzombie: very soon
22:30:59  <defunctzombie>\o/
22:31:26  <substack>server-side pieces with node nearly work
22:31:37  <defunctzombie>that will be awesome
22:31:39  <substack>as soon as the chroot build goes live
22:32:22  <substack>pkrumins is working on it
22:35:41  <dominictarr>substack: I did think into about that, but it's too hard
22:36:04  <dominictarr>I'd have to keep meta-data about that
22:36:33  <dominictarr>it's simpler to let the user check if it's the map output, or a combine step, inside the reduce
22:36:57  <dominictarr>unlike couch, this is just running in node, so you can publish a module that abstracts that.
22:37:02  <substack>dominictarr: well absolutely do that at least
22:37:14  <substack>it's actually really easy to implement if you just give me a 'rereduce' boolean
22:37:29  <substack>like seriously trivial
22:37:39  <substack>but without that it's pretty much impossible
22:38:31  <dominictarr>the problem is that I would have to store the fact that it's a map reduce output somewhere...
22:38:52  <substack>yes
22:39:43  <substack>otherwise the type contraints make it impossible to write some very useful reductions
22:39:47  <dominictarr>basically you'd have to do map: function (k, v, emit) { emit(k, JSON.stringify({map:true, value: whatever(v)}) }
22:40:03  <substack>that's fine
22:41:00  <dominictarr>A module can do this, therefore a module _should_ do this.
22:42:10  <dominictarr>depending on the map-reduce, the types may be implicit, and the reduce can easily detect them... in the general case you need to box it
22:47:25  <dominictarr>substack: Raynos added the view code to the streetfood example. https://github.com/dominictarr/map-reduce#complex-aggregations
22:50:21  <dominictarr>Raynos: substack http://chat.easyrtc.com/
22:50:31  <dominictarr>someone just posted that to the mailing list
22:51:04  <substack>view looks good
22:51:50  <dominictarr>are you joined? I can't see anyone else
22:52:15  <dominictarr>maybe it's a NAT
22:52:29  <substack>Uncaught ReferenceError: showErr is not defined
22:54:54  <defunctzombie>I joined
22:54:56  <defunctzombie>what is it?
22:55:16  <dominictarr>it looks like it should be video chat
22:55:37  <defunctzombie>oh god.. there are animals running all over my screen
22:55:55  <dominictarr>MERRY CHRISTMASS
22:55:56  <LOUDBOT>THE ELIMINATION OF WASTE WITH MINIMAL SPLASHBACK, OR AS I LIKE TO SAY DROPPING BOMBS ON THE TP
22:56:04  <defunctzombie>hahaha
22:56:13  <defunctzombie>I don't think this thing works
22:56:28  <dominictarr>it kinda works
22:57:54  <dominictarr>defunctzombie: are you on chrome23
22:58:07  <defunctzombie>dominictarr: yea
22:59:31  * Tim``joined
22:59:46  <Tim``>good day chaps
23:02:08  * dominictarrquit (Ping timeout: 245 seconds)
23:03:03  <Raynos>dominictarr: I looked at easyrtc a while back. its just like webrtc.io
23:03:39  <Tim``>he gawn
23:11:59  <Raynos>I just looked at https://github.com/twitter/bower
23:12:07  <Raynos>It uses a component.json component/component also uses one :D
23:12:21  <Raynos>yeoman builds on top of bower and is riding the disaster train.
23:13:53  <defunctzombie>I looked at bower a while back
23:13:57  <defunctzombie>couldn't figure it out
23:14:18  <defunctzombie>"Bower is installed using Node and npm "
23:14:25  <defunctzombie>I think the readme should stop there
23:15:24  <defunctzombie>so what is teh point of bower, when there is npm?
23:17:14  * substackjust registered browserify.org
23:17:19  <Raynos>defunctzombie: both bower and component are "lets rewrite npm for lulz"
23:17:36  <substack>going to have a search function that ties npmjs.org into testling-ci badges
23:17:51  <substack>and then it'll have featured repos and regular posts
23:17:59  <defunctzombie>oooo
23:18:04  <defunctzombie>Raynos: I am all for making tools better
23:18:06  <defunctzombie>and simpler
23:18:15  <defunctzombie>but I just don't see what those add that I am not able to do with npm
23:18:22  <defunctzombie>and custom fields in package.json
23:18:33  <Raynos>substack: I was watching a talk by paul irish about yeoman and was thinking i want to do something similar about front end developer work flows using npm
23:19:06  <Raynos>defunctzombie: the biggest problem with npm is lack of performance.
23:19:24  <defunctzombie>Raynos: is that an issue with just the fact that there is so much load on teh server?
23:19:41  <Raynos>defunctzombie: thats an issue that npm search is not optimized
23:19:45  <defunctzombie>I install modules all the time and don't really feel that hindered by it :/
23:19:49  <Raynos>and that git uris are slow as fuck
23:19:57  <defunctzombie>why are they slow?
23:20:02  <defunctzombie>does anyone know that
23:20:03  <Raynos>git+ssh is slow
23:20:07  <Raynos>No thats not true
23:20:07  <defunctzombie>and why not just make them faster then?
23:20:28  <Raynos>git cloning a repo is simply slow
23:21:17  <defunctzombie>I don't think it git clones
23:21:21  <Raynos>dominictarr: can we cache npm search in leveldb ?
23:21:27  <defunctzombie>iirc it downloads the tar
23:21:53  <Raynos>git+ssh links clone the private repo
23:28:40  <defunctzombie>I see, don't use those
23:28:47  <defunctzombie>so maybe I don't have exposure to that
23:29:10  <defunctzombie>what we used to do at the company I worked for is have our own debian repo clone
23:29:25  <defunctzombie>if your use is so much, why not just do that with npm?
23:29:35  <defunctzombie>seems like that would be easier
23:42:10  <rvagg_>Raynos: I was thinking about that the other day, would be so easy, search could just be a map operation over the whole set via a readStream()
23:44:54  <substack>fiefdoms of npm
23:48:02  <defunctzombie>a new series from the makers of pawn stars
23:48:13  * ralphtheninjajoined
23:48:25  * dguttmanquit (Quit: dguttman)