00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:11  * ircretaryjoined
00:00:53  * ELLIOTTCABLEquit (Read error: Connection reset by peer)
00:01:01  * ELLIOTTCABLEjoined
00:04:45  * AvianFluquit (Remote host closed the connection)
00:12:24  * blobaumquit (Read error: Operation timed out)
00:13:45  * thl0joined
00:14:25  * ednapiranhaquit (Remote host closed the connection)
00:18:19  * thl0quit (Ping timeout: 252 seconds)
00:24:59  * thl0joined
00:29:40  <substack>http://github.com/substack/testling <-- updated to read the package.json testling field, uses mocha harnesses etc
00:29:55  * thl0quit (Ping timeout: 264 seconds)
00:54:26  * defunctzombiechanged nick to defunctzombie_zz
00:54:42  * jxson_quit (Remote host closed the connection)
00:56:28  * tmcwjoined
00:57:56  * jcrugzzquit (Ping timeout: 250 seconds)
00:58:40  <Raynos>substack: https://gist.github.com/Raynos/3f39b09df376ee4be223
00:58:54  <Raynos>something failed :(
00:59:55  * ralphtheninjaquit (Ping timeout: 264 seconds)
01:00:29  * no9quit (Ping timeout: 252 seconds)
01:01:21  * tmcwquit (Ping timeout: 248 seconds)
01:05:06  <Raynos>substack: https://gist.github.com/Raynos/7021373dcc6fd70040c0
01:07:57  * tilgoviquit (Quit: No Ping reply in 180 seconds.)
01:08:08  * tilgovi_joined
01:08:48  * jjjohnny_quit (Read error: Operation timed out)
01:09:08  * tim_smartquit (Ping timeout: 245 seconds)
01:10:34  * jjjohnnyjoined
01:12:40  * tim_smartjoined
01:12:46  <Raynos>substack: https://github.com/substack/browser-launcher/issues/16
01:16:53  * tilgovi_changed nick to tilgovi
01:19:06  <rvagg>Raynos, substack: https://github.com/substack/browser-launcher/pull/15 fixes #16
01:20:05  <rvagg>the problem I have with browser-launcher is getting it to die... if I run subsequent tests in FF I get the "bong" noise because it tries to launch a new instance while one is already running
01:20:17  <rvagg>I think when using Chrome it just keeps on opening tabs for each run
01:20:30  * thl0joined
01:22:41  <rvagg>which isn't ideal at all, I'd just rather it die
01:25:24  <substack>right
01:25:40  <substack>browsers do all kinds of stupid nonsense like that in the interests of "user friendliness"
01:25:53  <Raynos>https://github.com/airportyh/testem/blob/master/lib/browser_launcher.js
01:26:01  <Raynos>testem has a browser_launcher that i've had more success with
01:26:22  <substack>Raynos: try with -u
01:26:38  <substack>that won't launch a browser and instead just prints a url for you to visit
01:26:57  <substack>you can also specify the browser command with --bcmd
01:27:01  <rvagg>Raynos: does it destroy the browser after launch?
01:27:10  <Raynos>let me check
01:27:15  <substack>browsers detach themselves >_<
01:27:23  <substack>applications should never do that
01:27:42  <substack>somebody write a browser in node
01:27:50  <substack>that is all unixy and not completely stupid
01:27:58  <Raynos>rvagg: yes it does
01:28:54  <Raynos>testem ci opened firefox/chrome/phantom for me and quickly closed them again
01:28:58  <substack>oh fuck
01:28:58  <Raynos>including tabs in existing chrome sessions
01:29:01  <substack>a custom browser
01:29:06  <substack>could have real crypto in it
01:29:10  <substack>!
01:29:52  <substack>and you could sign, hash, and make offline web pages
01:30:01  <substack>"lock" a web page I mean
01:30:36  <substack>that way you could build secure sandboxed appliances with trusted source
01:42:16  <substack>ok published some more fixes
01:44:27  * jolissjoined
01:46:14  * jolissquit (Client Quit)
01:53:54  <rvagg>Raynos: testem looks pretty good, what test framework are you using with it?
01:54:11  <rvagg>I like that it can manage both browser tests and node tests in one go
01:55:43  <Raynos>rvagg: tape
01:55:54  <Raynos>rvagg: https://github.com/Raynos/dotfiles/blob/master/bin/testem-both
01:56:07  <Raynos>excuse the building of json using shell
01:56:24  <Raynos>rvagg: example usage ( https://github.com/Raynos/process-dashboard/blob/master/package.json#L69 )
01:57:15  <rvagg>mm.. I need to convert bustermove to use tape, or at least make it pluggable somehow
01:58:13  <Raynos>rvagg: I think you could configure testem to use buster if needed. I've configured it for my tape needs
01:59:12  <rvagg>yeah, I'm a little over buster as a package but I like the test style and integrations (I like sinon and I like referee--the assertion module), hence bustermove
02:00:55  <Raynos>rvagg: it works reasonably for larger things. complex test frameworks / sinon are overhead for small modules that have only one test file.
02:00:55  * AvianFlujoined
02:04:21  * defunctzombie_zzchanged nick to defunctzombie
02:08:55  <rvagg>aye
02:09:27  <substack>454 repos on testling-ci wheeee
02:09:49  * substackis writing the mocha guide now
02:10:32  <substack>then just 4 more guides to finish, 2 of which are half-written
02:14:11  * defunctzombiechanged nick to defunctzombie_zz
02:14:52  <Raynos>substack: why the manual support for mocha and pals?
02:15:23  <Raynos>substack: btw you should document testlingify on the ci.testling.com website!
02:19:36  * tilgoviquit (Ping timeout: 260 seconds)
02:36:56  <substack>I don't know what testlingify does
02:37:07  <substack>Raynos: because mocha and pals are poorly engineered
02:37:20  <substack>but people love them
02:37:24  <Raynos>substack: testlingify is like travisify but for testling
02:37:30  <Raynos>testlingify in a folder configures a hook
02:37:31  <substack>oh right
02:37:36  <thl0>substack: I thought I told you about it
02:37:36  <Raynos>testlingify test sends a hook payload to testling
02:37:50  <substack>yes ok
02:37:58  <substack>but first I need to get the existing guides finished
02:37:58  <Raynos>its basically the thing where I dont have to go into the github GUI because that sucks
02:38:12  <substack>so I can make the payment ui and launch this
02:38:29  <thl0>substack: Raynos: also it adds testling config to package.json, which also sucks to do manually ;)
02:38:43  <Raynos>oh I scaffold that out :)
02:39:21  <thl0>Raynos: well you are special with your ngen ;), but if I decide to use testlingify after the fact, it's quite useful
02:39:32  <Raynos>i am special with my npmify :D
02:39:36  <thl0>:)
02:39:53  <thl0>but the nstart script I extracted from your stuff is super useful
02:39:55  <Raynos>npmify ./lib/tiny-module tiny-module -> does shit then npm publish -> tiny-module on npm
02:40:00  <Raynos>yes!
02:40:02  <thl0>don't create a package w/out it anymore
02:40:24  <Raynos>I'm thinking npmify should halt and give you a github style code editor
02:40:32  <Raynos>and be like "write your unit test before you publish this file!"
02:40:35  <thl0>nah
02:40:40  <Raynos>git commit style code editor*
02:40:43  <thl0>should be all automatic
02:40:44  <Raynos>not github that would be silly
02:41:10  <thl0>btw we could hack on a node version of that @nodeconf
02:41:46  <substack>http://npmjs.org/package/editor
02:42:01  <substack>launches $EDITOR
02:43:32  <thl0>substack: does it basically 'open $EDITOR' ?
02:43:39  <substack>yes
02:43:43  * vitorpachecoquit (Ping timeout: 264 seconds)
02:43:53  <Raynos>thl0: good idea
02:44:08  <substack>thl0: with the file you want to edit
02:45:09  <thl0>substack: cool and works on window too with 'notepad' lol
02:45:23  * tim_smartquit (Ping timeout: 245 seconds)
02:45:31  * timoxleyquit (Ping timeout: 264 seconds)
02:46:10  <thl0>Raynos: that's what you'd need to halt npmify to allow user to edit stuff
02:46:25  <Raynos>i dont think npmify can work tbh
02:46:34  <Raynos>you need a three step process
02:46:36  <Raynos>scaffold
02:46:38  <Raynos>write docs & tests
02:46:40  <Raynos>publish
02:47:05  <Raynos>I'll pay 10k if you can automate the middle step
02:47:10  * tim_smartjoined
02:47:12  <thl0>just stop after scaffold
02:47:18  <thl0>I can publish myself
02:50:35  <owen1>is this the future of deployment? http://progrium.com/blog/2013/06/19/dokku-the-smallest-paas-implementation-youve-ever-seen/
02:50:44  <owen1>100 bash lines that wrapps docker
02:56:16  * thl0quit (Remote host closed the connection)
03:01:03  * vitorpachecojoined
03:01:15  <Raynos>thl0: but nstart is publish
03:01:46  <Raynos>nstart does git, github, testlingify hooks, travis hooks & npm publishing ( https://github.com/Raynos/dotfiles/blob/master/.functions#L29 )
03:02:18  <Raynos>these are all things I personally do after v0.1 of the code is done, i.e. it has tests and it works and the tests can run on the CI services and publishing a working version is good
03:02:29  <Raynos>thl0: your workflow is different because you github push non-working code
03:04:00  <Raynos>owen1: get it to run on smartos :)
03:04:57  <owen1>ahhah. only ubuntu 13 at the moment. at least it comes with vagrantfile, so all u need is 'vagrant up'
03:05:47  <owen1>and when will flame graphs and all the crazy instrumentation stuff will be available on linux?
03:14:51  <Raynos>owen1: I just do manual stuff with smartos for my deploy
03:14:58  <Raynos>I have documentation on how to configure a fresh joyent box
03:15:11  <Raynos>and from then on you just instrument it to run deploy scripts over ssh or something
03:15:26  <Raynos>maybe not as "nice" but its lean and works
03:16:34  <Raynos>owen1: btw have you seen generators? ( https://github.com/Raynos/process-dashboard/blob/master/routes/commands-item.js https://github.com/Raynos/process-dashboard/blob/master/test/http/commands-item.js )
03:16:38  <Raynos>they are really exciting :)
03:27:37  * shamaquit (Remote host closed the connection)
03:54:01  * fallsemojoined
03:55:19  <owen1>Raynos: so you are part of the 'human centipede'? (: heard about them but also heard substack argue on this channel about not using them (at least not in the near future) since callbacks can get you to the same place with less syntax to learn.
03:56:26  <owen1>but maybe i missed some of this conversation. basicaly when i come back from work i scroll up on this channel to see what i missed, and it's always enlightning
03:58:37  * fallsemoquit (Ping timeout: 268 seconds)
04:04:36  * vitorpachecoquit (Ping timeout: 260 seconds)
04:11:05  * whit537quit (Quit: whit537)
04:23:57  <substack>Raynos: es6 people have the worst generators examples
04:24:05  <substack>tj's co thing doesn't look so bad though
04:25:22  <substack>owen1: what is that
04:25:28  <substack>anyways I just use callbacks
04:25:37  <substack>they work everywhere and everybody knows how they work
04:33:43  * dguttmanjoined
04:37:17  <owen1>yup
04:39:05  * dguttmanquit (Quit: dguttman)
04:40:55  <substack>mocha guide finished http://browserling.com:9005/guide/mocha
04:50:53  * fotoveritequit (Quit: fotoverite)
05:05:08  * st_lukejoined
05:22:43  * AvianFluquit (Ping timeout: 264 seconds)
05:39:53  * Wraithanjoined
05:40:49  <Wraithan>https://github.com/wraithan/milestone/blob/master/server.js -- trying out hyperstream/hyperspace/streaming everything together
05:42:44  * wolfeidauquit (Remote host closed the connection)
05:44:41  <substack>Wraithan: on that note, check out the new trumpet api http://github.com/substack/node-trumpet
05:45:39  <substack>Wraithan: wait, why is res in the middle? https://github.com/wraithan/milestone/blob/master/server.js#L18
05:45:41  <Wraithan>substack: you recommending I use that for something, or just in the same vein of stuff I've been using
05:45:53  <substack>in the same vein
05:46:06  <substack>it's the library that hyperstream and hyperglue use internally
05:46:10  <Wraithan>oh hmmm, I may have inverted something in the switch
05:47:35  <Wraithan>It works
05:47:38  <Wraithan>but hmmm
05:48:12  <Wraithan>why is that working?
05:48:49  <Wraithan>It made sense when it wasn't just a chain of .pipe calls and I had variables for each stream
05:49:16  * wolfeidaujoined
05:49:31  <substack>the second fs.createReadStream should start a new pipe chain
05:50:06  <Wraithan>ah
05:50:08  <Wraithan>yea
05:50:12  <Wraithan>but why is it working?
05:50:17  <Wraithan>lol
05:50:28  <substack>who cares
05:51:05  <Wraithan>It worked when it was wrong, it matters a little to me
05:51:06  <Wraithan>lol
05:51:34  <Wraithan>I think it must be because I am piping circularly but into a read stream not a duplex stream so it doesn't actually accept the data
05:53:41  <Wraithan>I take it I'd need to use something like trumpet if I wanted to pipe into a data attribute of a element?
05:54:19  <substack>that doesn't work yet
05:55:09  <Wraithan>hmmm, ok
06:28:38  * mikolaly1enkojoined
06:29:33  <Raynos>owen1: but callbacks are bullshit
06:29:52  <Raynos>substack: I think my examples are nice ( https://github.com/Raynos/process-dashboard/blob/master/routes/commands-item.js https://github.com/Raynos/process-dashboard/blob/master/test/http/commands-item.js )
06:29:54  <Raynos>so is co tbh
06:30:04  <Raynos>callbacks work but they can get frustrating
06:31:53  * mikolalysenkoquit (Ping timeout: 240 seconds)
06:43:54  * mikolaly1enkoquit (Ping timeout: 240 seconds)
06:47:53  * jolissjoined
06:52:11  * jcrugzzjoined
07:07:48  * st_lukequit (Remote host closed the connection)
07:20:18  * no9joined
07:21:37  * cianomaidinjoined
07:29:09  * cianomaidinquit (Quit: cianomaidin)
07:36:05  * tilgovijoined
07:36:19  * tilgoviquit (Read error: Connection reset by peer)
07:38:10  * jibayjoined
07:50:29  * mikolalysenkojoined
07:55:45  * mikolalysenkoquit (Ping timeout: 248 seconds)
08:04:23  * no9quit (Ping timeout: 246 seconds)
08:04:57  * nicholasfquit (Read error: Connection reset by peer)
08:05:14  * nicholasfjoined
08:15:47  * ins0mniajoined
08:18:31  * no9joined
08:40:56  * jan____joined
08:41:31  * jan____quit (Changing host)
08:41:31  * jan____joined
09:00:23  * wolfeidauquit (Ping timeout: 245 seconds)
09:02:30  * cianomaidinjoined
09:13:11  * mcollinajoined
09:33:24  * cianomaidinquit (Quit: cianomaidin)
09:33:57  * cianomaidinjoined
09:48:50  * cianomaidinquit (Quit: cianomaidin)
09:54:26  * ralphtheninjajoined
10:10:01  * mcollina_joined
10:13:23  * mcollinaquit (Ping timeout: 240 seconds)
10:16:03  * wolfeidaujoined
11:00:54  * thl0joined
11:14:27  * timoxleyjoined
11:22:30  * missinglinkjoined
11:25:07  * whit537joined
11:40:25  * djcoinjoined
11:55:06  * ralphtheninjaquit (Quit: leaving)
12:28:15  * st_lukejoined
12:29:32  * owenb__quit (Ping timeout: 260 seconds)
12:48:23  * timoxleyquit (Quit: Computer has gone to sleep.)
12:50:58  * cianomaidinjoined
12:55:47  * thl0quit (Remote host closed the connection)
13:02:28  * ednapiranhajoined
13:10:50  * AvianFlujoined
13:24:18  * vitorpachecojoined
13:27:47  * ins0mniaquit (Ping timeout: 246 seconds)
13:40:04  * st_lukequit (Remote host closed the connection)
13:42:01  * cianomaidinquit (Quit: cianomaidin)
13:58:17  * tmcwjoined
13:58:47  * thl0joined
14:02:23  * ednapiranhaquit (Remote host closed the connection)
14:05:04  * ralphtheninjajoined
14:13:24  * ednapiranhajoined
14:13:36  * st_lukejoined
14:28:05  * owenb__joined
14:34:07  * no9quit (Ping timeout: 264 seconds)
14:35:30  * mikolalysenkojoined
14:43:53  * mcollinajoined
14:45:44  * no9joined
14:46:44  * mcollina_quit (Ping timeout: 268 seconds)
14:49:48  * ins0mniajoined
15:14:20  * ednapiranhaquit (Remote host closed the connection)
15:17:34  * thl0_joined
15:17:34  * thl0quit (Read error: Connection reset by peer)
15:18:51  * dguttmanjoined
15:22:00  * ednapiranhajoined
15:29:33  * mcollina_joined
15:31:26  * mcollinaquit (Read error: Operation timed out)
15:32:14  * cianomaidinjoined
15:43:02  * cianomaidinquit (Quit: cianomaidin)
15:45:21  * ins0mniaquit (Ping timeout: 246 seconds)
15:49:14  * ins0mniajoined
15:50:06  * dguttmanquit (Read error: Connection reset by peer)
15:51:28  * defunctzombie_zzchanged nick to defunctzombie
15:53:55  * vitorpachecoquit (Ping timeout: 264 seconds)
15:54:16  <mbalho>bummer, lunr.js takes ~400ms to do a search with only a few hundred items in the index https://github.com/olivernn/lunr.js
15:58:42  * tilgovijoined
15:59:53  * ins0mniaquit (Remote host closed the connection)
16:03:31  * shamajoined
16:03:53  <mikolalysenko>mbalho: only a few hundred? that is terrible
16:04:05  <mikolalysenko>even a linear search should work for that
16:05:11  <mbalho>mikolalysenko: i was playing with https://github.com/square/crossfilter but it is basically range queries and that doesnt work as well for text search
16:05:27  <mikolalysenko>mbalho: can you use a linear search?
16:05:42  <mbalho>mikolalysenko: its for http://maxogden.github.io/flavors
16:06:02  <mbalho>mikolalysenko: when the input changes i map over all objects and regex match the contents
16:06:09  <mbalho>mikolalysenko: but it is slow on mobile phones
16:06:15  <mbalho>mikolalysenko: like iphone
16:06:23  <mikolalysenko>are workers an option?
16:06:31  <mikolalysenko>maybe replace the map with a for loop
16:06:44  <mikolalysenko>and precalculate the regexp
16:07:05  <mbalho>mikolalysenko: workers dont work on android browser is all, just android chrome
16:07:12  <mikolalysenko>ah
16:07:14  <mbalho>mikolalysenko: but thats not too bad
16:07:51  <mbalho>mikolalysenko: do you think a full-text-index-esque approach would help?
16:07:58  <mikolalysenko>maybe
16:08:05  <mikolalysenko>depends on the queries you are doing
16:08:15  <mbalho>mikolalysenko: im generally interested in making filterable data tables in the browser
16:08:23  <mbalho>mikolalysenko: for relatively large datasets
16:08:29  <mikolalysenko>yeah, but what sorts of filters
16:08:39  <mikolalysenko>if they are arbitrary regexps you probably won't beat linear search
16:09:15  <mbalho>mikolalysenko: sorting, text filters (string matching, partial matches)
16:09:32  <mikolalysenko>how big can the result set be?
16:09:43  <mikolalysenko>if you have to return n items in the worst case, you should just plan for that
16:10:05  <mikolalysenko>filtering and optimizing won't make it any better if your query actually hits the whole database
16:10:06  <mbalho>mikolalysenko: yea i guess workers are the way to go, streaming results back if it takes too long
16:10:21  <mikolalysenko>especially if your queries are arbitrary regexp or crazy stuff
16:10:24  <mbalho>yea
16:10:30  <mikolalysenko>I'd try replacing the map with a for loop actually
16:10:40  <mikolalysenko>it may improve things quite a bit since map tends to be a little slow
16:10:48  <mbalho>cool will do
16:11:06  <mikolalysenko>also you could try splitting the recipes up into separate structures
16:11:18  <owen1>Raynos: not sure if it's related but i just finished listening the the performance episode of nodeup (http://nodeup.com/fortyfive) and they were talking about the fact that the v8 sucks at optimizing functional style (using a lot of closures for example) and if we need fast node programs we should write them in an OO style (like Dart)!
16:11:20  <mikolalysenko>like have one array for name, one for description, etc.
16:11:47  <mikolalysenko>and then storing each of those in sorted arrays separately
16:12:21  <owen1>it's not js fault, it's just that functional style is hard for the v8 to inline etc. the same reason for haskell's slowliness.
16:12:41  <mbalho>mikolalysenko: for partial search where 'foo' should match 'snafoo' sorting doesnt really help me though right?
16:12:50  <owen1>should i throw away all the 'partial application' approach i recently discovered?
16:14:07  <mikolalysenko>mbalho: it might, but it depends how you are going to do the searching
16:14:51  * ins0mniajoined
16:14:53  <mikolalysenko>stuff like cross filter probably won't help much for that, but you can do stuff like split your strings into parts and then sort on the parts
16:15:15  <mikolalysenko>this will increase the size of the data set, but might improve some searching operations
16:16:04  <mikolalysenko>most approximate string searching algorithms are modifications of regular searching that use two ideas:
16:16:19  <mikolalysenko>1. they store various mutations or parts of the original data independently in an index
16:16:37  <mikolalysenko>2. the mutate the input in several diffferent ways and try searching on each of those modifications
16:16:40  <mbalho>ahh yea like phonetic stubbing or whatever thats called
16:16:57  <mikolalysenko>or n-gram searching
16:17:01  <mikolalysenko>but that is kind of the idea
16:17:10  <mikolalysenko>those things can get really complicated though
16:17:21  <mbalho>i was thinking perhaps it could be precomputed
16:17:35  <mikolalysenko>and since your data set isn't even that big *I think* you may be able to get away with just doing a linear search
16:17:55  <mbalho>yea sounds like a web worker is the most immediate solution
16:17:58  <mikolalysenko>like it shouldn't take more than a few ms to loop over a few hundred items
16:18:11  <mikolalysenko>using a for loop anyway
16:18:17  <mbalho>yea its weird that it is so slow on mobile
16:18:20  <jcrugzz>owen1: i mean i know bind is supposed to be slow. but i wouldnt throw it out altogether. it usually makes nicer code.
16:18:32  <mikolalysenko>and if you are doing substring matching you can probably replace your regexp with a str.indexOf() call
16:18:43  <jcrugzz>if more people use these patterns hopefully they can make the magic v8 machine do something with it xD
16:18:57  <mbalho>mikolalysenko: in general im surprised at how simplistic search in JS is, i would be interested to see what people can build with leveldb and n-grams etc
16:19:06  <mbalho>mikolalysenko: *available solutions for search in JS
16:19:31  <owen1>jcrugzz: it's bind but i beleive it's any closure you create. bind is just a less verbose way to create a closure, right?
16:20:50  <mikolalysenko>owen1, jcrugzz : actually bind isn't that bad. v8 does partial evaluation and inlines them just fine, but it takes a little while for the interpreter to warm up and do it
16:20:53  <mbalho>prior art https://github.com/dominictarr/level-inverted-index https://github.com/eugeneware/levels
16:21:20  <mikolalysenko>I know this because I tried some experiments to do this statically and it ended up being a waste of time: https://github.com/mikolalysenko/specialize
16:21:34  <mikolalysenko>tl, dr: v8 inlines stuff just fine, stop worrying about it
16:22:02  <owen1>mikolalysenko: just to make sure - is returning a function actually the same under the hood as bind ? http://pastebin.com/gNCPsj9X
16:22:03  <jcrugzz>owen1: yea it makes things look cleaner
16:22:05  <mikolalysenko>the bigger perf problems in js vs dart are all memory layout related and due to the weirdness of javscript objects
16:22:17  <jcrugzz>mikolalysenko: good to know
16:22:34  <mikolalysenko>jcrugzz, owen1 : at the end of the day yes
16:22:44  <mikolalysenko>but it takes a few iterations for v8 to do all the optimizations
16:23:00  <mikolalysenko>so the first time you run it the performance may be different, but it eventually stabilizes to the same thing
16:23:17  <mikolalysenko>I also found bind to be slightly faster in my experiments, but the difference was very small
16:23:57  <jcrugzz>sweet
16:24:28  <jcrugzz>mbahlo: saw https://github.com/eugeneware/levels the other day
16:26:52  <mikolalysenko>also this talk was really interesting: http://www.youtube.com/watch?v=nkaDyj_3t5M&list=PLgKuh-lKre13o3mgqMBJcJzZkWp-H9_o5
16:26:54  <owen1>jcrugzz: interesting, but uses levelup instead of being a 'plugin' type of module. i wonder if it's hard to do that.
16:27:14  <mikolalysenko>I think the count-min-sketch data structure is pretty cool, and a nice generalization of bloom filters
16:28:28  <jcrugzz>mikolalysenko: this looks pretty interesting
16:28:33  <kenperkins>substack: having troubles getting to browserling, rackspace problem or?
16:29:57  <mikolalysenko>I'm somewhat embarrassed to say that this was the first time I'd heard of it
16:30:14  <mikolalysenko>I think I am going to make a point to pay more attention to what is going on in the space of streaming algorithms
16:30:48  <mikolalysenko>also this would be a great node module to have: http://en.wikipedia.org/wiki/Count-Min_sketch
16:31:32  <jcrugzz>yes this ^
16:32:13  <mikolalysenko>maybe I will code something up and write a quick blog post
16:34:22  * cianomaidinjoined
16:34:32  * no9quit (Ping timeout: 260 seconds)
16:34:35  * cianomaidinquit (Client Quit)
16:35:03  <mikolalysenko>the other really great talk from that conference was Bernard Chazelle's: http://www.youtube.com/watch?v=780U3IBz21M&list=PLgKuh-lKre13o3mgqMBJcJzZkWp-H9_o5&index=3
16:35:18  <mikolalysenko>which applied a new kind of renormalization to dynamic graph problems
16:35:43  <mikolalysenko>not sure if that is good for anything practical yet, but it is a really awesome idea
16:39:11  * mcollina_quit (Ping timeout: 260 seconds)
16:40:39  * jcrugzzquit (Ping timeout: 246 seconds)
16:42:07  * jcrugzzjoined
16:46:24  * no9joined
16:48:11  * tmcwquit (Remote host closed the connection)
16:49:34  * mcollinajoined
16:52:08  <Raynos>owen1: micro benchmarks are insignificant compared to IO latency
16:54:31  * mikolalysenkoquit (Ping timeout: 264 seconds)
16:54:36  * tilgoviquit (Remote host closed the connection)
16:55:48  * mikolalysenkojoined
17:07:19  * tmcwjoined
17:10:44  * jxsonjoined
17:11:42  * ralphtheninjaquit (Quit: leaving)
17:13:24  * AvianFluquit (Remote host closed the connection)
17:37:21  * jcrugzzquit (Ping timeout: 246 seconds)
17:37:27  <mikolalysenko>what are the options for good hashing functions for generic js objects
17:37:54  <mikolalysenko>I want to find something that can do k-wise independent hashes
17:38:34  * Wraithanpart ("WeeChat 0.4.2-dev")
17:43:15  * ednapiranhaquit (Remote host closed the connection)
17:44:32  * ednapiranhajoined
17:46:52  * jcrugzzjoined
17:51:58  * timoxleyjoined
17:53:34  <kenperkins>substack around?
18:05:13  * cianomaidinjoined
18:05:18  * mikolalysenkoquit (Ping timeout: 268 seconds)
18:07:10  * mikealjoined
18:07:31  * thl0_quit (Remote host closed the connection)
18:08:08  * thl0joined
18:09:19  * thl0quit (Remote host closed the connection)
18:34:21  * ins0mnia_joined
18:34:41  * ins0mnia_quit (Remote host closed the connection)
18:37:04  * vitorpachecojoined
18:39:42  * thl0joined
18:40:32  * timoxleyquit (Quit: Computer has gone to sleep.)
18:44:07  * dguttmanjoined
18:44:41  * dguttmanquit (Client Quit)
18:45:45  * ELLIOTTCABLEquit (Quit: best short-url ever. <http://ell.io/tt>)
18:45:56  * ELLIOTTCABLEjoined
18:47:54  * thl0quit (Ping timeout: 240 seconds)
18:53:04  * AvianFlujoined
18:53:37  * Kesslerjoined
18:54:12  <Kessler>hoi!
18:54:17  * thl0joined
18:56:07  * ELLIOTTCABLEquit (Remote host closed the connection)
18:56:15  * ELLIOTTCABLEjoined
19:03:41  * mikolalysenkojoined
19:04:08  * no9quit (Ping timeout: 246 seconds)
19:05:42  <mikolalysenko>what is the ettiquette for adding an existing js module to npm?
19:05:57  <mikolalysenko>should I just fork it, add a package.json submit a pull request and add it to npm myself?
19:07:25  <defunctzombie>mikolalysenko: I just fork and publish
19:07:25  * mcollinaquit (Read error: Connection reset by peer)
19:07:44  <defunctzombie>mikolalysenko: I contact the original author if they want publish access
19:08:07  <defunctzombie>but if they are unresponsive, I just keep the fork and have npm point to that repo
19:08:30  * vitorpachecoquit (Ping timeout: 264 seconds)
19:11:06  <mikolalysenko>defunctzombie: that is kind of what I was thinking. the module I am looking at forking is this one: https://github.com/garycourt/murmurhash-js which is MIT licensed so it should be ok to fork
19:11:54  * missinglinkquit (Ping timeout: 268 seconds)
19:14:28  <defunctzombie>mikolalysenko: everything is ok to fork
19:14:34  <defunctzombie>that is why it is on github
19:14:56  <defunctzombie>and yes, since it is MIT you could even just use a subset of the code and just make sure to attribute
19:15:43  <mikolalysenko>defunctzombie: yeah, that is what I am going to do
19:17:27  * no9joined
19:21:20  * cianomaidinquit (Quit: cianomaidin)
19:27:33  <mikolalysenko>done: https://npmjs.org/package/murmurhash-js
19:28:07  * dguttmanjoined
19:37:58  <owen1>got email from nodeconf about installing nodeconf2013 and got errors while installing it -
19:43:21  * dguttmanquit (Quit: dguttman)
19:45:00  * st_lukequit (Remote host closed the connection)
19:45:47  * ezkljoined
19:51:48  * tmcwquit (Remote host closed the connection)
19:56:46  * tmcwjoined
19:57:18  * whit537quit (Quit: whit537)
20:01:55  * Kesslerquit (Read error: Connection reset by peer)
20:03:14  * Kesslerjoined
20:04:48  * nicholasfquit (Read error: Connection reset by peer)
20:05:20  * nicholasfjoined
20:08:42  * tmcwquit (Remote host closed the connection)
20:10:18  * AvianFluquit (Read error: Connection reset by peer)
20:10:57  * AvianFlujoined
20:14:18  <Kessler>jesusabdullah: ping ping
20:17:55  * dguttmanjoined
20:18:02  * ezklquit (Ping timeout: 246 seconds)
20:20:35  <owen1>/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h:149: error: ‘CFRunLoopSourceRef’ does not name a type
20:21:26  <mikolalysenko>check it out: https://github.com/mikolalysenko/count-min-sketch
20:22:36  <owen1>the error is coming from johnny-five i believe. mikeal ^^
20:26:46  <Domenic_>owen1: you have the latest node version? just checking
20:33:54  <Raynos>miko: your coming to nodeconf right?
20:34:21  <mikolalysenko>Raynos: you mean me?
20:34:26  <Raynos>yes
20:34:30  <Raynos>your name is too long to type
20:34:51  <mikolalysenko>I don't think so, I didn't buy any tickets
20:35:07  <Raynos>do you live near SF / oakland ?
20:35:14  <mikolalysenko>no, in madison wisconsin
20:35:23  <mikolalysenko>though I work part time in sf
20:35:31  <Raynos>I see
20:35:49  <Raynos>I want to do a modular webgl hack day or something
20:35:59  <mikolalysenko>yeah, I think it would be pretty cool
20:36:09  <mikolalysenko>I started writing this the other day: https://github.com/mikolalysenko/gl-modules
20:36:17  <mikolalysenko>but it is still very early
20:37:02  <jesusabdullah>Kessler: pong
20:39:01  <mikolalysenko>I think a simple gpgpu hackday might be better than a full 3d graphics thing
20:39:12  <chapel>bleep
20:39:21  <mikolalysenko>since 3d programming requires a lot of extraneous math/geometry which could take awhile to explain
20:39:24  <chapel>stuck in the seattle airport for an hour or so more
20:39:36  <mikolalysenko>while gpgpu stuff is just indexing into buffers and map/reduce algorithms
20:39:50  <mikolalysenko>(in a somewhat horrible programming language)
20:39:57  * chapelflew from SFO to seattle to connect and fly into spokane, but the sfo flight was delayed and I missed my connection
20:40:24  <chapel>so I had to sleep in a hotel last night, without my bag, and the earliest flight out today was 11pm, 24 hours from the flight I missed the connection for
20:40:44  <chapel>so my girlfriend is on her way to pick me up, lol
20:41:15  <owen1>Domenic_: v0.10.6 on mac
20:41:16  <Raynos>miko: I have a maths degress so the geometry should be easy :p
20:41:35  <jesusabdullah>chapel: exciting XD
20:41:56  <chapel>jesusabdullah: yeah for sure
20:42:17  <chapel>add to the fact that I have sleep apnea and need a cpap machine to sleep, and that was in my checked luggage
20:42:22  <chapel>so I didn't really sleep
20:42:48  <mikolalysenko>Raynos: yeah, I guess it would depend on the sort of audience, though lately I have been thinking that the basic gpu programming side of things may be easier to introduce and could be a better base for learning more advanced geometry topics later
20:43:20  <Raynos>probably for the general populus
20:43:31  <Raynos>I was more optimizing for hackers in SF that should be able to pick stuff up :D
20:44:25  <jesusabdullah>what's a cpap machine?
20:45:36  <mikolalysenko>Raynos: also gpgpu programming is a good reason *not* to use three.js, since it is very hard to do within that framework
20:45:47  <Raynos>blargh
20:45:50  <Raynos>dont use three :(
20:45:52  <mikolalysenko>and it is much simpler to explain since it requires basically 0 linear algebra
20:46:08  <mikolalysenko>I totally agree, and would like to see more people move away from it
20:46:15  <Raynos>whats gpgpu?
20:46:26  <mikolalysenko>basically using the gpu to general purpose computing
20:46:49  <mikolalysenko>there is a simple demo here: https://github.com/mikolalysenko/gl-fbo
20:47:12  <mikolalysenko>you can do these things using open cl or cuda but those options aren't generally available on the web yet
20:47:35  <mikolalysenko>however it is also possible to implement gpu programs using shaders, which gives comparable performance with better portability
20:47:51  <mikolalysenko>(at the expense of some sanity, since this is not really the intended purpose of shaders)
20:50:31  * vitorpachecojoined
20:53:24  <jesusabdullah>what's so bad about three.js?
20:53:29  <jesusabdullah>it works for voxeljs
20:53:38  <mikolalysenko>kind of...
20:53:48  <mikolalysenko>there are some scalability problems, and is pretty clunky
20:53:54  <jesusabdullah>mmhmm
20:53:56  <mikolalysenko>like texture atlases are/were a big problem
20:53:59  <jesusabdullah>are there any good alternatives?
20:54:02  <mikolalysenko>not really
20:54:09  <mikolalysenko>I am working on building one though
20:54:24  <jesusabdullah>cool
20:54:29  <mikolalysenko>I have a general idea of what I think a better approach should look like
20:54:45  <jesusabdullah>and then you'll port voxel-engine away from threejs obviously
20:55:42  <mikolalysenko>that may happen
20:56:24  <mikolalysenko>it depends though, there are still lots of points where voxel.js code is interfacing with three.js directly and so it could take awhile for that to fully transition
20:57:20  <mikolalysenko>I am thinking that eventually what I will probably build is a set of modules for contouring ndarrays
20:57:24  <mikolalysenko>(both sparse and dense)
20:57:34  <mikolalysenko>along with some code for quickly rendering meshes
20:58:11  <mikolalysenko>that way you could do sparse smooth voxel volumes
20:58:24  <mikolalysenko>so the storage requirements would be on the order of n^2/3 of voxel.js currently
20:58:55  <mikolalysenko>and skipping three.js could dramatically improve rendering performance by eliminating lots of spurious unboxing and data conversion steps
20:59:46  <mikolalysenko>but I have no interest or intention to try rewriting core gameplay logic in voxel.js, I think that is mostly a separate thing
21:00:46  <jez0990>I'd like to see some sort of iframe texture/window for webgl, so that this doesn't have to be such a hack -> http://learningthreejs.com/blog/2013/04/30/closing-the-gap-between-html-and-webgl/
21:00:47  <mikolalysenko>the goal for all of this would be just rendering and representing volume data
21:00:47  <mikolalysenko>once you have that, how you turn it into a game is up to the application
21:01:20  <mikolalysenko>jez0990: I think that would be hard to do
21:01:25  <mikolalysenko>since you can read data back from webgl
21:01:37  <mikolalysenko>and if you had something like that you could basically read content out of a page using a shader
21:01:46  <mikolalysenko>there are lots of ways to do this
21:02:09  <mikolalysenko>you can use gl-readpixels (though w3c spec kind of prohibits this if you use textures from other domains)
21:02:23  <mikolalysenko>or you can use timing attacks with shaders
21:02:35  <mikolalysenko>which sounds crazy but it actually works pretty reliably
21:03:17  <mikolalysenko>so there would be many security implications for rendering web pages as textures in webgl :(
21:03:30  <jez0990>oh wow, that IS crazy
21:03:36  * djcoinquit (Quit: WeeChat 0.4.0)
21:04:08  <jez0990>well I guess the solution posted is good enough for now then
21:04:25  <mikolalysenko>yeah, and I think it is unlikely to ever change at least in the foreseeable future
21:04:32  <jez0990>but I do think we should be browsing the web in 3d already
21:04:40  <mikolalysenko>oh yeah, I agree totally
21:04:41  <jez0990>it's 2013 already
21:05:00  <mikolalysenko>webgl is a bit clunky in some ways, but it is the right way to do things
21:05:02  * defunctzombiechanged nick to defunctzombie_zz
21:05:22  <mikolalysenko>conceptually at least they totally got it right, though the details are a bit ugly
21:05:38  <mikolalysenko>I think that in retrospect people will look back at canvas2d and think "wtf were they doing?"
21:05:48  <mikolalysenko>we should have just went right to webgl from the beginning
21:05:52  * mcollinajoined
21:06:11  <mikolalysenko>since implementing canvas 2d as a library on top of webgl is pretty trivial
21:06:19  <mikolalysenko>and the performance is so much better in webgl
21:06:44  <mikolalysenko>and the hardware support is there, it is just a matter of waiting for browsers to catch up
21:06:52  <mikolalysenko>(or users more to the point)
21:06:56  <jez0990>aha, too true
21:07:04  <jez0990>needs a killer app
21:07:15  <mikolalysenko>I think games are a good candidate
21:09:02  <mikolalysenko>I think that the time is right for a big 3d multiplayer web game to take off
21:09:15  <mikolalysenko>but there are issues that need to be sorted out for sure
21:09:25  <mikolalysenko>like solving latency/streaming issues for asset loading
21:10:43  <jez0990>all the good distributed computing problems
21:11:46  <mikolalysenko>actually I think more of the issues in online gaming look like control theory, not really distributed computing
21:12:07  <mikolalysenko>since it is more about synchronizing and predicting state in physical simulations
21:12:59  <jez0990>I think of distributed computing in terms of tradeoffs between resilience, autonomy and trust
21:13:21  <jez0990>a p2p game with centralised servers requires a careful balance of the three
21:13:27  <jez0990>*WITHOUT
21:13:43  <mikolalysenko>I think in online games you can mostly trust people, and then just kick them if you detect they are cheating
21:14:00  <mikolalysenko>so basically a trust but verify approach
21:14:15  * jibayquit (Remote host closed the connection)
21:14:22  <mikolalysenko>the bigger issue is lag
21:14:39  <jez0990>but you can never know that they are cheating without centralisation or proof of work
21:14:42  * ednapiranhaquit (Remote host closed the connection)
21:14:46  <mikolalysenko>so use a central server
21:14:54  <mikolalysenko>p2p for games only makes sense for small lobby based things
21:15:02  <mikolalysenko>if you are doing an mmo a central server is the only way to go
21:15:07  <mikolalysenko>or a cluster of central servers
21:15:52  * tmcwjoined
21:15:58  <mikolalysenko>I don't think many games these days do p2p at all, and even the ones that kind of do it designate one of the players as a host and have them run the server
21:16:04  * no9quit (Read error: Operation timed out)
21:18:00  <jez0990>it's the ability to transition seemlessly between master and slave that's important ...games should work as flexibly as the internet
21:18:35  <mikolalysenko>but if you go by that metric, I can't really think of many services online that work the same way
21:18:45  <mikolalysenko>most pages have a single master server cluster that does all the work
21:19:03  <mikolalysenko>and then some proxy in front that switches clients to whatever server has available resources
21:19:26  <mikolalysenko>the only things that are really p2p and in wide use are simple protocols like bitcoin or bittorrent
21:19:30  * jden_changed nick to jden
21:19:35  <jez0990>because 99% of software is too monolithic and we only just developing the right abstractions
21:20:23  <jez0990>*we're...
21:20:23  <mikolalysenko>maybe. if it happens it would be pretty cool, but I just don't see how it would all work
21:20:42  <mikolalysenko>the pragmatic approach to online games today is to have a single master server (or cluster) and many clients
21:20:56  <mikolalysenko>clients locally simulate the game and apply predictor corrector methods to compensate for lag
21:21:21  <mikolalysenko>they also get local authority over things like movement and some physics objects to make things appear seamless
21:22:08  <mikolalysenko>of course "predictor corrector" is a vague thing and what it actually means has very complicated application dependent interpretations
21:22:46  <mikolalysenko>I think it would be a reasonable and valuable challenge to try to find some language which makes it easier to specify and reason about these types of systems
21:22:49  <jez0990>I imagine most mmos do these things very inelegantly at the moment
21:22:52  <jez0990>exactly
21:23:02  <jez0990>anyway, g2g, I'll have to write up these thoughts soon....
21:23:02  <mikolalysenko>yeah, it isn't pretty as I understand it
21:23:05  <mikolalysenko>ok
21:23:53  <jez0990>I did start actually: http://thoughts.jdt.me/2013/03/rat-theorem.html
21:27:15  * ralphtheninjajoined
21:31:03  * no9joined
21:31:17  <Raynos>p2p is nice
21:31:26  <Raynos>but it only works for trippy games
21:31:51  <Raynos>the best use case is a game where the semantics are that the world expands as players come online and contracts as players go offline
21:31:58  <Raynos>or maybe merge and unmerge
21:33:14  * ednapiranhajoined
21:45:33  * vitorpachecoquit (Ping timeout: 252 seconds)
21:51:42  <gozala>Raynos: so I have bing landing some node compatible net and fs modules
21:51:51  <Raynos>nice :D
21:51:56  <gozala>but now it seems there are Stream2 stuff
21:52:06  <gozala>and I'm not sure which one I should go with
21:52:11  <Raynos>in fs and net yes
21:52:19  <gozala>I don't wanna support both modes
21:52:20  <Raynos>streams2 is back compat with streams1
21:52:28  <Raynos>node basically supports both
21:52:36  <gozala>what's the recommended way to go about it /
21:52:49  <Raynos>use readable-stream or stream from node core
21:53:00  <Raynos>they expose Readable / Writable / Duplex / Transform base classes
21:53:06  <Raynos>that transparently handle back compat for you
21:53:17  <gozala>Raynos: those are the ones I was going to implement
21:53:19  * ednapiranhaquit (Remote host closed the connection)
21:53:29  <Raynos>i've been personally burnt by dicking around with writing my own streams and stream modules
21:53:43  <Raynos>if I want to write production quality streams code I would use those base classes from core or readable-stream
21:53:55  <gozala>Raynos: no you don't get me
21:54:05  <gozala>I'm planning to implement node compatible APIs
21:54:15  <gozala>but I can't use node stuff I don't have libuv
21:54:27  <Raynos>i would copy and paste Readable / Writable implementations from https://github.com/isaacs/readable-stream
21:54:31  <gozala>but intent is to have streams that will just work
21:54:35  <gozala>for node modules
21:54:58  <Raynos>I guess if you don't have buffer
21:55:02  <Raynos>then you'll have to rewrite stuff
21:55:31  <gozala>Raynos: yeah and we have typed arrays
21:55:38  * defunctzombie_zzchanged nick to defunctzombie
21:55:46  <gozala>kind of wonder why node isn't using typed arrays instead of buffers
21:55:47  * AvianFluquit (Read error: Connection reset by peer)
21:56:01  <Raynos>if you have to reimplement all of readable-stream from scratch then i'd lean more to using node 0.8 style streams
21:56:13  <Raynos>just because reimplementing readable-stream correctly is going to be a bitch
21:56:21  * AvianFlujoined
21:56:28  <Raynos>gozala: node is rewriting buffers to be even better :P
21:57:56  <mikolalysenko>gozala: because node was built before typedarrays were in v8 :P
21:58:17  <mikolalysenko>gozala: but I completely agree that it is a little ridiculous today
21:58:44  <gozala>mikolalysenko: no I know buffers were used before typed arrays existed
21:58:58  <gozala>but they do exist now and rewriting buffers to be better sounds kinda strange
21:59:08  <mikolalysenko>they are rewriting buffers?
21:59:21  <mikolalysenko>(I missed this news...)
21:59:33  <gozala>maybe Raynos was just trolling
21:59:39  <mikolalysenko>I think if they go down that route, then my only suggestion would be to remove the array accessors from buffer
21:59:46  <mikolalysenko>and restrict everything to get()/set()
22:00:02  <mikolalysenko>that way at least you could shim it in the browser
22:00:51  <mikolalysenko>because right now it is a horrible monstrosity
22:01:05  <gozala>Raynos: so this is just base class
22:01:06  <gozala>https://github.com/joyent/node/blob/master/lib/_stream_readable.js
22:01:26  <gozala>that does not actually depends on any of the platform stuff ?
22:01:41  <Raynos>gozala: it depends on buffer
22:01:56  <Raynos>miko: talk to tjfontaine in #libuv I think
22:02:10  <Raynos>gozala: https://github.com/joyent/node/blob/master/lib/_stream_readable.js#L359
22:02:21  <Raynos>gozala: https://github.com/joyent/node/blob/master/lib/_stream_readable.js#L94
22:02:21  <Raynos>etc
22:02:30  <gozala>I have buffers
22:02:34  <Raynos>Oh then it's fine
22:02:41  <Raynos>yeah it's just a base class
22:02:47  <gozala>Raynos: https://github.com/mozilla/addon-sdk/blob/master/lib/sdk/io/buffer.js
22:02:51  <Raynos>it just depends on javascript modules and not any platform or libuv stuff
22:03:10  <Raynos>miko: you should go talk to them in #libuv and rant
22:03:17  <gozala>It's just a wrapper over typedarary
22:03:49  <mikolalysenko>Raynos: ok. they will probably just ban me or something :)
22:03:49  <gozala>Raynos: the fs stuff just extends that base class then ?
22:04:45  <gozala>Raynos: I actually had node v0.8 streams now I have to deal with new ones :(
22:04:53  <gozala>is that something that going to stick at least ?
22:05:05  <Raynos>gozala: correct everything in node now extends Readable and Writable
22:05:30  <Raynos>gozala: for example https://github.com/joyent/node/blob/master/lib/fs.js#L1426
22:05:49  <Raynos>they just implement _read ( https://github.com/joyent/node/blob/master/lib/fs.js#L1498 )
22:06:06  <Raynos>which is a pull based stream
22:06:21  <Raynos>_read might as well be function (cb) { ... cb(value) }
22:10:57  <gozala>Raynos: ok at this point I think I'll just stick to 0.8 version as I already have it and maybe make it 0.10 in a future
22:11:09  <gozala>Looks like a lot of work ringt now
22:31:23  * thl0quit (Remote host closed the connection)
22:35:48  * tmcwquit (Remote host closed the connection)
22:38:02  * Kesslerquit (Ping timeout: 246 seconds)
22:38:39  * cianomaidinjoined
22:40:18  * mikealquit (Quit: Leaving.)
22:45:37  * ednapiranhajoined
22:48:46  * defunctzombiechanged nick to defunctzombie_zz
22:57:57  * mcollinaquit (Remote host closed the connection)
23:02:47  * ins0mniaquit (Ping timeout: 255 seconds)
23:06:32  * mikolalysenkoquit (Ping timeout: 260 seconds)
23:08:46  * cianomaidinquit (Ping timeout: 252 seconds)
23:10:58  * AvianFluquit (Read error: Connection reset by peer)
23:11:21  * AvianFlujoined
23:11:42  * ednapiranhaquit (Remote host closed the connection)
23:11:58  * thl0joined
23:16:52  * Kesslerjoined
23:22:16  * Kesslerquit (Ping timeout: 268 seconds)
23:40:45  * AvianFluquit (Read error: Connection reset by peer)
23:41:24  * AvianFlujoined
23:48:21  * no9quit (Ping timeout: 248 seconds)
23:53:22  * thl0quit (Remote host closed the connection)
23:55:11  * whit537joined