00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:07  <isaacs>i think we can optionally add Buffer support, but meh.
00:00:09  * ircretaryjoined
00:00:22  <isaacs>but the current handling of strings can't change
00:01:34  <bnoordhuis>yeah, that was my thinking too
00:02:29  <bnoordhuis>it's just that the one-byte string thing is technically correct
00:02:41  <bnoordhuis>well, whatever - utf8 it is
00:12:29  * jmar777quit (Remote host closed the connection)
00:14:09  <isaacs>bnoordhuis: yeah. it's weird.
00:15:56  <isaacs>bnoordhuis: fwiw, ls shows the utf8 chars: https://gist.github.com/isaacs/6189920#comment-883270
00:16:41  <isaacs>bnoordhuis: shows Vökuró rather than VökuroÌ
00:17:41  <isaacs>and `$ ls /Users/isaacs/Music/Björk/Medúlla
00:17:46  <isaacs>ls: /Users/isaacs/Music/Björk/Medúlla: No such file or directory
00:18:58  * groundwaterquit (Quit: groundwater)
00:28:44  * TooTallNatequit (Quit: Computer has gone to sleep.)
00:34:48  * bradleymeckjoined
00:42:12  * dshaw_joined
00:43:44  * felixgequit (Quit: felixge)
00:47:13  * AvianFluquit (Remote host closed the connection)
00:47:42  * AvianFlujoined
00:49:11  * wolfeidaujoined
00:54:19  * dshaw_quit (Quit: Leaving.)
01:00:28  * indexzero_joined
01:01:03  * EhevuTovquit (Quit: This computer has gone to sleep)
01:02:38  * indexzeroquit (Ping timeout: 240 seconds)
01:02:39  * indexzero_changed nick to indexzero
01:04:28  * kazuponjoined
01:05:02  * kazuponquit (Remote host closed the connection)
01:05:09  * kazuponjoined
01:12:42  * wolfeidauquit (Ping timeout: 264 seconds)
01:12:44  * mikealquit (Quit: Leaving.)
01:13:18  * bnoordhuisquit (Read error: Operation timed out)
01:14:40  * wolfeidaujoined
01:20:46  * TooTallNatejoined
01:23:18  * abraxasjoined
01:33:12  * dshaw_joined
01:35:04  * wolfeidauquit (Remote host closed the connection)
01:37:55  * TooTallNatequit (Ping timeout: 246 seconds)
01:42:39  <mordy__>hrm, this is being quite troublesome
01:43:17  <mordy__>trying to figure out which -l incantations to use for libuv.. there seems to be quite a bit of ifdefs in config-unix.mk
01:44:30  <mordy__>maybe gyp can do something for me...
01:47:35  * TooTallNatejoined
01:50:25  * indexzero_joined
01:52:37  * indexzeroquit (Ping timeout: 240 seconds)
01:52:37  * indexzero_changed nick to indexzero
01:53:37  * brsonquit (Read error: Connection reset by peer)
01:54:05  * brsonjoined
01:56:00  * TooTallNatequit (Quit: Computer has gone to sleep.)
01:57:54  * dshaw_quit (Quit: Leaving.)
02:02:48  * kazuponquit (Remote host closed the connection)
02:06:15  * sblomquit (Ping timeout: 276 seconds)
02:09:06  * wavdedjoined
02:09:51  * st_lukequit (Remote host closed the connection)
02:17:39  * brsonquit (Quit: leaving)
02:17:52  * brsonjoined
02:27:41  * kazuponjoined
02:27:58  * wavdedquit (Quit: Nighty night)
02:31:47  * kazuponquit (Remote host closed the connection)
02:36:18  * c4miloquit (Remote host closed the connection)
02:45:02  * EhevuTovjoined
02:57:17  * wolfeidaujoined
02:58:39  * brsonquit (Ping timeout: 240 seconds)
02:59:35  * brsonjoined
03:08:09  * julianduquequit (Quit: leaving)
03:08:26  * mcavagequit (Remote host closed the connection)
03:16:58  * AvianFluquit (Remote host closed the connection)
03:18:43  * AvianFlujoined
03:20:30  * AvianFluquit (Remote host closed the connection)
03:24:46  * dapjoined
03:28:47  * wolfeidauquit (Remote host closed the connection)
03:36:56  * AvianFlujoined
03:52:56  * dapquit (Quit: Leaving.)
03:52:59  * EhevuTovquit (Quit: This computer has gone to sleep)
03:53:36  * EhevuTovjoined
03:57:22  * AvianFluquit (Remote host closed the connection)
03:59:20  * kazuponjoined
04:04:43  * wolfeidaujoined
04:06:17  * st_lukejoined
04:16:13  * mcavagejoined
04:18:45  * EhevuTovquit (Quit: Leaving)
04:19:46  * defunctzombiechanged nick to defunctzombie_zz
04:20:14  * mcavagequit (Ping timeout: 240 seconds)
04:36:44  * st_lukequit (Remote host closed the connection)
04:37:41  * st_lukejoined
04:39:09  * mikealjoined
04:46:30  * mcavagejoined
04:46:56  * Damn3dquit (Ping timeout: 246 seconds)
04:47:00  * bradleymeckquit (Quit: bradleymeck)
04:47:39  * brsonquit (Ping timeout: 260 seconds)
04:49:11  * Damn3djoined
04:49:59  * brsonjoined
04:55:08  * mcavagequit (Ping timeout: 260 seconds)
05:07:46  * amartensjoined
05:12:40  * stagasjoined
05:15:04  * wolfeidauquit (Remote host closed the connection)
05:16:25  * wolfeidaujoined
05:19:16  * wolfeida_joined
05:22:18  * wolfeidauquit (Ping timeout: 264 seconds)
05:24:21  * wolfeida_quit (Ping timeout: 248 seconds)
05:34:19  * mikealquit (Quit: Leaving.)
05:38:09  * brsonquit (Ping timeout: 256 seconds)
05:42:42  * brsonjoined
05:45:44  * st_lukequit (Remote host closed the connection)
05:49:04  * stagasquit (Ping timeout: 240 seconds)
05:51:12  * st_lukejoined
05:52:54  * stagasjoined
05:54:07  * wolfeidaujoined
06:00:45  * wolfeidauquit (Read error: No route to host)
06:00:56  * wolfeidaujoined
06:03:35  * wolfeidauquit (Read error: Connection reset by peer)
06:03:36  * wolfeida_joined
06:04:35  * mikealjoined
06:04:36  * defunctzombie_zzchanged nick to defunctzombie
06:07:21  * amartensquit (Quit: Leaving.)
06:12:12  * st_lukequit (Remote host closed the connection)
06:15:51  * paddybyersjoined
06:16:41  * stagasquit (Ping timeout: 256 seconds)
06:25:38  * felixgejoined
06:29:48  * indexzeroquit (Quit: indexzero)
06:52:50  * bajtosjoined
06:58:44  * roxluquit (Quit: leaving)
07:32:24  * wolfeidaujoined
07:32:51  * wolfeida_quit (Ping timeout: 260 seconds)
07:37:05  * wolfeida_joined
07:37:26  * wolfeidauquit (Ping timeout: 240 seconds)
07:37:26  * paddybyersquit (Ping timeout: 240 seconds)
07:53:17  * rendarjoined
07:55:28  * defunctzombiechanged nick to defunctzombie_zz
07:59:12  * hzjoined
08:01:58  * st_lukejoined
08:06:14  * st_lukequit (Ping timeout: 240 seconds)
08:24:42  * rendarquit
08:43:50  * brsonquit (Quit: leaving)
08:45:59  * bnoordhuisjoined
09:16:40  * bajtosquit (Ping timeout: 264 seconds)
09:18:05  <bnoordhuis>indutny: ping
09:20:14  * bajtosjoined
09:28:56  <bnoordhuis>bajtos: ping
09:29:24  <bajtos>bnoordhuis: pong
09:30:11  <bnoordhuis>bajtos: question about file paths / filename encodings
09:30:38  <bnoordhuis>bajtos: what do people in eastern europe usually use as their system's character set encoding?
09:31:13  <bnoordhuis>i guess for slovak and czech people utf-8 works okay, doesn't it?
09:31:22  <bnoordhuis>maybe even latin-1
09:31:32  <bajtos>depends on your OS
09:31:42  <bajtos>recent Linux distros use UTF-8
09:32:01  <bajtos>Windows used to use M$ specific encoding cp1250
09:32:05  * kazuponquit (Remote host closed the connection)
09:32:13  <bnoordhuis>ah, good ol' cp1250
09:32:31  <bajtos>I don't know if they have changed that in win8, considering the OS supports multiple languages
09:32:42  <bnoordhuis>reason i ask was that i realized yesterday that node uses utf-8 for file paths
09:33:02  <bajtos>I see
09:33:02  <bnoordhuis>which means that you cannot open some files if their filenames contain invalid utf-8 sequences
09:33:23  <bnoordhuis>i was wondering how people deal with that
09:33:25  <bajtos>which is very common among non-technical users on Windows XP let's say
09:33:43  <bajtos>bnoordhuis: you mean how developers deal with that?
09:33:47  <bajtos>or end-users?
09:33:53  <bnoordhuis>developers, in this case
09:34:09  <bnoordhuis>i guess it's not much of an issue for eastern european languages
09:34:14  <bajtos>well
09:34:21  * rendarjoined
09:34:36  <bajtos>there are two windows APIs for working with files and paths (AFAIK)
09:34:49  <bajtos>on uses 8bit encoding, the other 16bits
09:35:06  <bnoordhuis>right. but that's not an issue for node, libuv takes care of that
09:35:11  <bajtos>I assume that when you use 8bit encoding, you will get the name as-is in the system codepage (cp1250 in EE case)
09:35:13  * wolfeida_quit (Read error: No route to host)
09:35:45  <bnoordhuis>maybe i should've been more clear :)
09:35:46  <bajtos>and when you use 16bit encoding, I would expect the WinAPI to convert from whatever CP is used in FS to UCS16/UTF16/whatever else they use internally
09:36:17  * wolfeidaujoined
09:36:17  <bnoordhuis>the reason i asked is i expect people who use exotic character encodings to run into problems when dealing with files in node
09:36:42  <bajtos>I can see two cases:
09:36:42  <bnoordhuis>but most all eastern european languages fit in the basic multilingual plane so it's probably not much of an issue
09:36:51  <bnoordhuis>i should ask koichi :)
09:37:10  <bajtos>1. doing stuff like require('ěščř') - this IMO works as long as your .js file is saved in utf8
09:37:28  <bnoordhuis>(though hiragana is probably in the BMP as well)
09:37:48  <bajtos>2. opening files with a name coming from the end-user - this should be ok as long as browser/CLI converts the value to UTF8 before it gets into node
09:37:55  <bnoordhuis>right
09:38:15  <bajtos>asking koichi is a good idea, Asian languages are much difficult to support
09:38:15  <bnoordhuis>unices don't do that, of course. file paths are just byte strings
09:38:38  <bnoordhuis>yeah
09:39:13  * wolfeida_joined
09:40:00  * dominictarrjoined
09:41:54  * wolfeidauquit (Ping timeout: 276 seconds)
09:48:35  <MI6>joyent/node: Ben Noordhuis master * f674b09 : src: use v8::String::NewFrom*() functions - http://git.io/I-sHpw
09:48:49  <bnoordhuis>29 files changed, 749 insertions(+), 514 deletions(-)
09:49:43  <bnoordhuis>749 insertions that don't have a really positive aesthetic effect but oh well
09:53:52  * stagasjoined
09:57:48  <MI6>nodejs-master: #392 FAILURE smartos-ia32 (2/621) smartos-x64 (8/621) linux-x64 (1/621) http://jenkins.nodejs.org/job/nodejs-master/392/
09:58:24  <MI6>nodejs-master-windows: #193 FAILURE http://jenkins.nodejs.org/job/nodejs-master-windows/193/
09:59:25  * roxlujoined
09:59:32  <roxlu>hey!
10:00:04  <roxlu>I just found something interesting on windows; I'm using the uv_pipe* features for ipc
10:00:14  * wolfeida_quit (Ping timeout: 240 seconds)
10:00:29  <roxlu>and I noticed that when I try to connect to a pipe, I always got 2 connections for one client;
10:00:40  <bnoordhuis>make[1]: *** [/Volumes/External/jenkins/workspace/nodejs-master/929cb465/out/Release/obj.target/cares/deps/cares/src/ares_parse_a_reply.o] Segmentation fault: 11 <- nice...
10:00:50  <roxlu>I debugged it and it seems that checking if a file exists "opens" a connection
10:01:00  <bnoordhuis>i'm guessing gcc ran out of memory there
10:01:24  <roxlu>Therefore I was wondering how you guys check if a pipe exists ?
10:01:51  <bnoordhuis>roxlu: you're using uv_pipe_connect()?
10:02:04  <roxlu>yes
10:02:18  <roxlu>bnoordhuis: I do something like:
10:02:51  <roxlu>bnoordhuis: if(!rx_file_exists("\\\.\\pipe\myapp")) { return err; } uv_pipe_init().. uv_pipe_connect
10:03:19  <bnoordhuis>ah... checking if a file exists before doing something with it is something of an anti-pattern
10:03:30  <roxlu>ah I c
10:03:43  <roxlu>so.. I should remove that and check the result of connect/write ?
10:03:44  <bnoordhuis>it's inherently race-y. just do it and handle the error if the file/pipe/whatever isn't there
10:03:50  <bnoordhuis>yep
10:04:28  <roxlu>thanks man!
10:05:46  <bnoordhuis>np :)
10:06:43  <roxlu>then my next thing I need to look into ... when I try to connect I get "operation not permitted"
10:08:41  * hzquit
10:09:02  * hzjoined
10:10:30  * wolfeidaujoined
10:13:37  <roxlu>so that's an EPERM error
10:15:14  * wolfeidauquit (Read error: Connection reset by peer)
10:16:08  <bnoordhuis>roxlu: that's still on windows?
10:16:32  <roxlu>yeah
10:16:54  <roxlu>I'm trying to see if the pipe exists using "Process Explorer"
10:17:01  <roxlu>(pretty sure it exists)
10:17:53  * wolfeida_joined
10:18:37  <roxlu>ah found it
10:18:47  <roxlu>I started my pipe in a administrator console
10:19:04  <roxlu>wasn't aware that that made the pipe unavailable for other users :#
10:19:43  * wolfeida_quit (Read error: Connection reset by peer)
10:20:04  * wolfeida_joined
10:21:29  * bajtosquit (Ping timeout: 256 seconds)
10:28:52  * Damn3dquit (Ping timeout: 246 seconds)
10:29:40  * wolfeida_quit (Read error: No route to host)
10:30:51  * wolfeidaujoined
10:31:11  * Damn3djoined
10:31:27  * felixgequit (Quit: felixge)
10:34:44  * felixgejoined
10:34:57  * felixgequit (Client Quit)
10:35:07  * felixgejoined
10:56:29  * wolfeida_joined
10:57:02  * wolfeidauquit (Ping timeout: 240 seconds)
10:59:41  * abraxasquit (Remote host closed the connection)
11:09:04  * wolfeida_quit (Read error: Connection reset by peer)
11:10:31  * wolfeidaujoined
11:25:03  <bnoordhuis>indutny: https://github.com/joyent/node/issues/6024
11:45:12  * bajtosjoined
11:50:02  * Damn3dquit (Ping timeout: 264 seconds)
11:51:51  * Damn3djoined
11:59:44  * paddybyersjoined
12:19:59  * pachetjoined
12:22:17  * mcavagejoined
12:24:34  <indutny>bnoordhuis: pong
12:24:39  <indutny>bnoordhuis: ok
12:25:24  <bnoordhuis>indutny: also, a question about cyrillic file paths
12:25:31  <indutny>cyrillic file paths?
12:25:45  <bnoordhuis>well, what character set encodings are common in russia?
12:26:08  <bnoordhuis>node for better or worse uses utf-8 internally for file paths
12:26:13  <indutny>yeah
12:26:15  <indutny>cyrillic
12:26:23  <indutny>doesn't it work with it?
12:26:39  <indutny>I'm not really using russian file names, though
12:26:43  <bnoordhuis>well, unix paths are byte strings and not all byte strings are valid utf-8
12:26:45  * hzquit (Ping timeout: 248 seconds)
12:26:49  * mikealquit (Quit: Leaving.)
12:26:52  * mcavagequit (Ping timeout: 264 seconds)
12:27:17  <bnoordhuis>i was wondering if that's a common issue for russian node programmers
12:27:23  <bnoordhuis>but apparently it isn't for you :)
12:32:11  <bnoordhuis>apropos nothing, the per-message SCM_RIGHTS limit on linux is... 253!
12:32:20  <bnoordhuis>i wonder who came up with that number. and why
12:33:35  * kazuponjoined
12:33:42  <indutny>heh
12:34:26  <indutny>is it an argument of setsockopt?
12:34:38  * M28quit (Ping timeout: 240 seconds)
12:34:45  <indutny>ah, no
12:34:45  <indutny>http://linux.die.net/man/3/cmsg
12:35:15  <indutny>hm...
12:35:17  <indutny>why 253 then? :)
12:35:24  * kazuponquit (Remote host closed the connection)
12:35:32  <indutny>probably because header has sizeof 3?
12:36:43  * M28joined
12:39:33  * paddybyersquit (Ping timeout: 248 seconds)
12:51:30  <bnoordhuis>indutny: don't think so. the cmsg payload is independent of the cmsg header
12:51:44  <indutny>oh, well
12:51:50  <bnoordhuis>oh well indeed
12:51:52  <indutny>you should look in kernel sources
12:52:07  <bnoordhuis>yeah, i did. couldn't really find anything
12:52:13  <bnoordhuis>didn't spend hours on it though :)
12:52:23  <indutny>haha
12:52:24  <indutny>ok
12:52:30  <indutny>so what about that _tlsError PR?
12:52:36  <indutny>have you got a chance to take a look at it?
12:53:19  <bnoordhuis>not yet. maybe later today. i'm heading out though, biab
12:53:32  <indutny>https://github.com/joyent/node/pull/6009
12:53:38  <indutny>bnoordhuis: ok
12:55:14  * jmar777joined
12:56:59  * mikealjoined
12:58:18  * bnoordhuisquit (Ping timeout: 264 seconds)
13:00:03  * abraxasjoined
13:04:37  * abraxasquit (Ping timeout: 248 seconds)
13:06:42  * mikealquit (Ping timeout: 264 seconds)
13:08:13  * c4milojoined
13:22:35  * mcavagejoined
13:23:01  * bradleymeckjoined
13:25:03  * bradleymeckquit (Client Quit)
13:27:28  * mcavagequit (Ping timeout: 264 seconds)
13:28:04  * Dasmyllerquit (Ping timeout: 264 seconds)
13:29:27  * Dasmyllerjoined
13:30:31  * mikealjoined
13:32:20  * mikealquit (Client Quit)
13:45:50  * kazuponjoined
13:46:07  * bajtosquit (Ping timeout: 264 seconds)
13:48:19  * paulfryzeljoined
13:50:30  * kazuponquit (Ping timeout: 264 seconds)
13:51:03  * bnoordhuisjoined
13:55:57  * wavdedjoined
13:56:05  * hzjoined
13:58:46  * hzquit (Disconnected by services)
13:58:48  * bajtosjoined
13:58:51  * hzjoined
14:03:10  * hzquit (Client Quit)
14:09:20  * c4miloquit (Remote host closed the connection)
14:19:33  * bajtosquit (Quit: bajtos)
14:22:55  * mcavagejoined
14:25:07  * bradleymeckjoined
14:26:42  * bradleymeckquit (Client Quit)
14:27:17  * mcavagequit (Ping timeout: 248 seconds)
14:28:21  * bradleymeckjoined
14:45:02  * AvianFlujoined
14:57:56  * mcavagejoined
15:02:04  * wolfeidauquit (Remote host closed the connection)
15:05:06  * groundwaterjoined
15:14:53  * indexzerojoined
15:19:08  * bajtosjoined
15:28:04  * bradleymeckquit (Remote host closed the connection)
15:28:43  * bradleymeckjoined
15:31:57  <tjfontaine>bnoordhuis: src\node.cc(2154): error C3861: 'TWO_BYTE_STRING': identifier not found [g:\jenkins\workspace\nodejs-master-windows\eec653f3\node.vcxproj]
15:32:05  <tjfontaine>http://jenkins.nodejs.org/job/nodejs-master-windows/193/DESTCPU=ia32,label=windows/console
15:36:13  * kenperkinsjoined
15:39:40  * julianduquejoined
15:40:48  <bnoordhuis>tjfontaine: aw
15:41:02  * amartensjoined
15:45:13  <MI6>joyent/node: bnoordhuis created branch fix-windows-build - http://git.io/tXyyIw
15:46:31  <bnoordhuis>c'mon jenkins, do yo thang
16:07:32  * paulfryzelquit (Read error: Connection reset by peer)
16:08:08  * paulfryzeljoined
16:10:05  * bradleymeckquit (Remote host closed the connection)
16:10:32  * bradleymeckjoined
16:15:05  * TooTallNatejoined
16:15:42  * indexzeroquit (Quit: indexzero)
16:27:18  * dapjoined
16:28:07  <tjfontaine>hmm bnoordhuis odd that jenkins didn't
16:28:43  <tjfontaine>triggered manually
16:30:30  * wavdedquit (Quit: Nighty night)
16:33:27  * austojoined
16:33:41  <bnoordhuis>thanks, tj
16:33:53  <tjfontaine>no, thank *you* :)
16:34:24  <tjfontaine>not sure why the mac build earlier to segfaulted, that's worrisome, more about the mac mini it's on than about node :)
16:34:29  * nsmquit (Quit: ZNC - http://znc.in)
16:34:30  <tjfontaine>*earlier today
16:35:18  * nsmjoined
16:35:57  * nsmquit (Client Quit)
16:36:31  * nsmjoined
16:37:40  * bajtosquit (Quit: bajtos)
16:38:15  * nsmquit (Client Quit)
16:39:09  * nsmjoined
16:41:33  * nsmquit (Client Quit)
16:44:27  <MI6>joyent/node: Ben Noordhuis master * 422b334 : dgram: don't call into js when send cb is omitted (+1 more commits) - http://git.io/bQBtxQ
16:45:14  <bnoordhuis>tjfontaine: it's probably because gcc ran out of memory. i don't think it checks for NULL return values from malloc() anywhere
16:45:43  <tjfontaine>heh, well it's clang, but that's distressing to hear either way :)
16:45:58  <bnoordhuis>that said, i don't know if malloc() ever returns null on os x
16:46:14  * defunctzombie_zzchanged nick to defunctzombie
16:47:03  <trevnorris>morning
16:47:13  <tjfontaine>morn
16:47:22  <MI6>nodejs-master-windows: #194 FAILURE http://jenkins.nodejs.org/job/nodejs-master-windows/194/
16:48:15  <trevnorris>anyone mind reviewing https://github.com/joyent/node/pull/6019
16:48:47  <bnoordhuis>..\..\src\runtime-profiler.cc : fatal error C1090: PDB API call failed, error code '23' : '( [g:\jenkins\workspace\nodejs-master-windows\eec653f3\deps\v8\tools\gyp\v8_base.ia32.vcxproj] <- wut?
16:49:16  <tjfontaine>god damn jenkins, as it turns out jenkins kills too many processes
16:49:32  <tjfontaine>I pasted a link abotu this when I did the 0.11.5 build
16:49:41  <tjfontaine>you *can't* run windows builds in parallel.
16:49:41  <tjfontaine>:/
16:49:54  <tjfontaine>strike 9001
16:51:00  <bnoordhuis>trevnorris: why the obsession with exporting things in node.h?
16:51:23  <tjfontaine>bnoordhuis: the review branch went fine though
16:51:31  <bnoordhuis>trevnorris: as an optimizer fanatic, you should consider node.h the seventh ring of hell
16:51:33  <tjfontaine>http://jenkins.nodejs.org/job/node-review/55/DESTCPU=x64,label=windows/console
16:51:41  <trevnorris>bnoordhuis: i'm working on another patch that'll let users build their own domain like modules, which will require them to know when they're actively in a domain
16:51:44  <bnoordhuis>trevnorris: for one, exported functions go through the PLT
16:51:48  <trevnorris>bnoordhuis: not just when the domain module has been loaded.
16:52:01  <bnoordhuis>(at least, on unices)
16:52:12  <bnoordhuis>tjfontaine: thanks
16:52:19  <trevnorris>PLT?
16:53:18  <bnoordhuis>trevnorris: google :)
16:53:20  * kenperkinsquit (Quit: Textual IRC Client: http://www.textualapp.com/)
16:53:33  <MI6>nodejs-master: #393 UNSTABLE smartos-ia32 (2/622) smartos-x64 (8/622) http://jenkins.nodejs.org/job/nodejs-master/393/
16:53:48  <bnoordhuis>hm, some worrisome warnings there, on the windows build
16:53:58  <bnoordhuis>g:\jenkins\workspace\node-review\1d92f228\deps\uv\src\uv-common.c(476): warning C4715: 'uv__getaddrinfo_translate_error' : not all control paths return a value [g:\jenkins\workspace\node-review\1d92f228\node.vcxproj]
16:54:02  <bnoordhuis>g:\jenkins\workspace\node-review\1d92f228\deps\uv\src\win\tcp.c(439): warning C4700: uninitialized local variable 'buf' used [g:\jenkins\workspace\node-review\1d92f228\node.vcxproj]
16:54:07  <bnoordhuis>that's not the kind of warning you want to see in your project
16:54:35  <tjfontaine>trevnorris: plt may not be easy to google, Procedure Linkage Table is the name of it :P
16:55:04  <trevnorris>tjfontaine: thanks, funny though because that just links to "dynamic linker" at least on wiki
16:55:10  <bnoordhuis>also...
16:55:11  <bnoordhuis>../../src/udp_wrap.cc: In constructor ‘node::SendWrap::SendWrap(v8::Local<v8::Object>, bool)’:
16:55:14  <bnoordhuis>../../src/udp_wrap.cc:66: error: class ‘node::SendWrap’ does not have any field named ‘ReqWrap’
16:55:20  <bnoordhuis>wtf apple-clang?
16:57:17  <MI6>joyent/node: Ben Noordhuis master * 78f709d : src: fix windows build breakage from f674b09 (+1 more commits) - http://git.io/Z9qocQ
16:57:29  <bnoordhuis>fsck it, force-pushed the fix
16:58:08  <bnoordhuis>apparently the clang apple ships is too weak to figure out that ReqWrap(...) means 'call the constructor' when your class derives from ReqWrap<uv_udp_send_t>
17:01:57  * bradleymeckquit (Quit: bradleymeck)
17:02:50  <trevnorris>bnoordhuis: I decided to export those functions because I consider them necessary api additions to finish implementing https://github.com/joyent/node/pull/6011
17:04:20  <tjfontaine>Rollback to 3.20.12.1, the last known "good" V8 in preparation for the Chrome
17:04:21  <tjfontaine>M30 branch.
17:04:32  <tjfontaine>heh, kinda scary to see conversations like that :)
17:06:16  <MI6>nodejs-master: #394 UNSTABLE smartos-ia32 (2/622) smartos-x64 (9/622) http://jenkins.nodejs.org/job/nodejs-master/394/
17:07:34  <MI6>joyent/libuv: Ben Noordhuis master * db1dccb : windows: fix missing return value warning (+1 more commits) - http://git.io/n9WDmQ
17:08:07  * bradleymeckjoined
17:08:24  * bradleymeckquit (Client Quit)
17:08:25  <bnoordhuis>trevnorris: looking
17:09:03  <trevnorris>bnoordhuis: sec. to appease the moment i've moved it to node_internals. i'll move it back in the other pr if absolutely proves to be necessary.
17:10:50  <bnoordhuis>trevnorris: well, the reason i bring up is this: are you prepared to support those two functions for the next five years, come what may?
17:11:06  * dominictarrquit (Quit: dominictarr)
17:11:30  <bnoordhuis>that's essentially how you should view api additions at this point
17:11:58  <trevnorris>bnoordhuis: yes I am. the api changes are so we never have to be bothered by what others want domains to be
17:12:11  <trevnorris>or how much error handling we should implement, etc.
17:14:41  * AvianFluquit (Remote host closed the connection)
17:20:30  * st_lukejoined
17:22:22  <bnoordhuis>creationix: congrats tim
17:22:38  <indutny>bnoordhuis: you're ben
17:23:27  <bnoordhuis>indutny: only on even days
17:23:45  <bnoordhuis>indutny: on odd days, i'm batman!
17:23:52  * indexzerojoined
17:24:03  <bnoordhuis>as i like to say "programmer by night, crime fighter by day"
17:25:44  <MI6>libuv-master: #155 FAILURE linux (2/191) windows (3/192) http://jenkins.nodejs.org/job/libuv-master/155/
17:26:23  <tjfontaine>right, I need to do that today
17:26:34  <MI6>libuv-master-gyp: #94 UNSTABLE windows-x64 (3/192) linux-x64 (1/191) smartos-ia32 (3/191) osx-ia32 (1/192) smartos-x64 (2/191) windows-ia32 (3/192) osx-x64 (1/192) http://jenkins.nodejs.org/job/libuv-master-gyp/94/
17:27:25  <MI6>nodejs-master: #395 UNSTABLE smartos-ia32 (2/622) smartos-x64 (9/622) http://jenkins.nodejs.org/job/nodejs-master/395/
17:28:11  * indexzeroquit (Client Quit)
17:30:01  * AvianFlujoined
17:31:58  * indexzerojoined
17:32:37  * indexzeroquit (Client Quit)
17:36:21  * hzjoined
17:36:23  * dshaw_joined
17:37:54  * pachetquit (Quit: leaving)
17:41:43  * paulfryzelquit (Remote host closed the connection)
17:42:18  * paulfryzeljoined
17:43:02  * paulfryz_joined
17:44:00  <creationix>bnoordhuis, thanks
17:46:14  * paulfryzelquit (Ping timeout: 240 seconds)
17:47:19  <trevnorris>isaacs: curious. process.domain isn't documented anywhere I can see, but do we consider it public api?
17:48:06  * paulfryz_quit (Ping timeout: 276 seconds)
17:50:33  * sblomjoined
17:55:45  * wavdedjoined
18:02:07  <trevnorris>bnoordhuis: any obvious problems with https://github.com/joyent/node/pull/6019 ?
18:11:22  * mikealjoined
18:18:15  * c4milojoined
18:18:43  * kenperkinsjoined
18:29:53  * pachetjoined
18:29:53  * pachetquit (Changing host)
18:29:53  * pachetjoined
18:30:58  <trevnorris>isaacs: ping
18:35:17  * bnoordhuisquit (Ping timeout: 248 seconds)
18:35:22  * brsonjoined
18:37:05  * bradleymeckjoined
18:43:22  <tjfontaine>wtf gyp, https://gist.github.com/tjfontaine/6196041
18:45:18  <trevnorris>hah, tjfontaine you've just been having great luck today.
18:45:47  <trevnorris>bbiab
18:45:49  * trevnorris&
18:45:49  <LOUDBOT>IT SHOULDN'T COVER EVERYTHING!
18:47:03  * hzquit (Read error: Connection reset by peer)
18:49:26  * hzjoined
18:52:10  * `3Echanged nick to `3rdEden
19:00:17  <isaacs>trevnorris: pong
19:00:24  <isaacs>trevnorris: yeah... people figured it out. they're using it.
19:00:28  <isaacs>trevnorris: we should probably document it
19:00:31  * nsmjoined
19:00:34  <isaacs>trevnorris: it's in blog posts and shit
19:12:49  * sblomquit (Ping timeout: 240 seconds)
19:15:15  * hzquit
19:17:33  * dshaw_quit (Quit: Leaving.)
19:26:06  * mikealquit (Quit: Leaving.)
19:32:38  * sblomjoined
19:41:19  * bnoordhuisjoined
19:42:37  * indexzerojoined
19:45:48  * nsmquit (Quit: ZNC - http://znc.in)
19:46:07  * bnoordhuisquit (Ping timeout: 264 seconds)
19:46:27  * nsmjoined
19:47:47  * nsmquit (Client Quit)
19:50:22  * nsmjoined
19:52:08  * nsmquit (Client Quit)
19:59:02  * bradleymeckquit (Remote host closed the connection)
19:59:36  * bradleymeckjoined
20:00:25  * nsmjoined
20:00:40  <groundwater>is there a preferred/sane way to give Javascript objects hidden c++ properties that can be passed around in JS land, but only accessed from c++ land?
20:00:51  <groundwater>i am trying to avoid constantly converting between the two worlds
20:07:37  <kuplatupsu>there are internal pointers
20:10:41  * nsmquit (Quit: ZNC - http://znc.in)
20:12:28  * brsonquit (Ping timeout: 264 seconds)
20:13:08  * brsonjoined
20:13:24  <tjfontaine>groundwater: SetHiddenValue
20:14:36  <isaacs>tjfontaine, groundwater: Or you could use trevnorris's new trick :)
20:14:37  <groundwater>@tjfontaine: i still have to wrap those in JS types
20:14:48  * bnoordhuisjoined
20:14:49  <groundwater>i want to store raw c types
20:15:05  * nsmjoined
20:15:13  <groundwater>@isaacs: where can i learn trevnorris's trick?
20:15:44  <tjfontaine>groundwater: External is your friend.
20:15:56  * nsmquit (Client Quit)
20:16:08  <tjfontaine>trevnorris's trick is quite evil, and I think External is much more straight forward for someone who comes back to see what it is
20:16:13  * EhevuTovjoined
20:16:35  <isaacs>groundwater: obj->SetIndexedPropertiesToExternalArrayData(data, type, size);
20:16:38  <tjfontaine>groundwater: presuming of coures when you say "raw c types" you actually mean pointers to things
20:17:28  <groundwater>@isaacs @tjfontaine thanks, i'll look over each
20:17:40  <isaacs>groundwater: then later, obj->GetIndexedPropertiesExternalArrayData()
20:17:41  <tjfontaine>groundwater: if what you want is to represent a handle to a C resource, that can be passed around and reused other places you want External, and just pass it straight to JS, you don't need to muck with hidden pieces
20:18:00  <isaacs>groundwater: yes, External is the way to go, probably
20:18:08  * nsmjoined
20:18:10  <tjfontaine>External is an opaque wrapper to C memory
20:18:23  * dshaw_joined
20:18:24  <groundwater>i think External will be my first attempt
20:18:37  * nsmquit (Client Quit)
20:18:47  <groundwater>though SetIndexedPropertiesToExternalArrayData is a longer name, so it's probably better /s
20:18:57  <tjfontaine>hehe
20:19:07  <isaacs>ok, back to the outgoingmessage mines :)
20:19:25  <isaacs>groundwater: yeah, it's way more extrasuperdoubleplusgood
20:20:23  <groundwater>is there an AbstractSingletonFactory version?
20:20:39  <tjfontaine>you missed some templates
20:23:16  * dshaw_quit (Ping timeout: 264 seconds)
20:23:41  <groundwater>oh, also, is there a way to free the memory when the JS object is reaped?
20:24:37  <tjfontaine>groundwater: make it a persistent and do .MakeWeak()
20:25:04  <tjfontaine>groundwater: a brief document that describes this for the shim I'm writing, http://tjfontaine.github.io/node-addon-layer/md_docs_handle.html
20:25:46  <tjfontaine>the shim is a thin C binding to the v8 constructs, so it's pretty straight forward to write that in pure v8 c++
20:28:30  <groundwater>ahh, MakeWeak accepts a callback
20:29:35  * mikealjoined
20:30:09  <groundwater>tjfontaine: is your node-addon-layer ready for use?
20:31:21  <isaacs>are http trailers only valid with chunked encoding?
20:31:28  <tjfontaine>groundwater: it's coming along, there's a guy using it, next week I will have more examples and will be asking for people to start banging on it
20:33:13  * c4miloquit (Remote host closed the connection)
20:33:59  <groundwater>tjfontaine: starred
20:34:37  * paddybyersjoined
20:35:52  * brsonquit (Ping timeout: 264 seconds)
20:37:02  * mikealquit (Read error: Connection reset by peer)
20:38:10  * mikealjoined
20:38:34  * jmar777quit (Remote host closed the connection)
20:39:56  * stagasquit (Read error: Connection reset by peer)
20:44:52  * sblomquit (Ping timeout: 264 seconds)
20:50:50  * brsonjoined
20:59:28  <bnoordhuis>interesting... i've somehow managed to get v8 to enter an infinite loop somewhere in the GC
20:59:53  <bnoordhuis>looks like the same busy loop some people have complained about
20:59:57  <bnoordhuis>that's with master btw
21:00:19  <tjfontaine>what's your memory usage like, were you near the 1.5 limit?
21:01:25  * c4milojoined
21:01:47  <bnoordhuis>no, not even remotely close. 580 MB virtual, 12.6 MB rss
21:01:57  <tjfontaine>interesting
21:02:17  <bnoordhuis>unfortunately the release build is not very debuggable. let's see if i can trigger it with a debug build
21:02:40  <tjfontaine>bnoordhuis: did you see my comment about dtrace+autotools?
21:03:47  <bnoordhuis>tjfontaine: no. where/what did i miss?
21:03:50  * bradleymeck_joined
21:04:01  <tjfontaine>on the actual github issue
21:04:18  * bradleymeckquit (Ping timeout: 264 seconds)
21:04:18  * bradleymeck_changed nick to bradleymeck
21:04:19  <tjfontaine>using find ${top_builddir}/src -name \*.o worked in my testing
21:04:41  <bnoordhuis>oh, if that fixes it, then land at will
21:05:01  <bnoordhuis>there's an issue about freebsd+dtrace too btw
21:05:04  <tjfontaine>alright, I'm currently looking into soname and gyp atm, since that's also broken on smartos
21:05:11  <tjfontaine>ya, I need to figure out that feature test there
21:05:27  <bnoordhuis>soname and gyp? what's broken?
21:06:02  <tjfontaine>when gyp is building run-tests it tries to pass soname to building the executable, becase we set soname in 'libraries' instead of using product_extension like v8
21:06:25  * mikealquit (Quit: Leaving.)
21:06:26  <tjfontaine>and the sun linker says "ah ah ah, you didn't say the magic word"
21:06:28  * c4miloquit (Ping timeout: 264 seconds)
21:06:42  <tjfontaine>actually more: "you're trying to do a nonsense thing, soname doesn't make sense for executable"
21:06:57  <bnoordhuis>ah okay
21:07:01  <bnoordhuis>true enough
21:07:06  * pachetquit (Ping timeout: 264 seconds)
21:07:07  <tjfontaine>so I looked at how v8 does it
21:07:16  <tjfontaine>'product_extension': 'so.<(soname_version)',
21:07:28  <tjfontaine>which I could make gyp_uv actually grab from the version header
21:07:47  <bnoordhuis>er, but how does it set the soname field in the ELF header?
21:07:54  * mikealjoined
21:08:04  <tjfontaine>v8 doesn't appear to in its gyp
21:08:16  <tjfontaine>looking further
21:08:23  <bnoordhuis>ah. that kind of defeats the purpose of soname, doesn't it?
21:08:32  <bnoordhuis>apropos that v8 busy loop:
21:08:34  <bnoordhuis>#0 0x000000000077df3e in v8::internal::IncrementalMarkingRootMarkingVisitor::VisitPointers(v8::internal::Object**, v8::internal::Object**) ()
21:08:37  <bnoordhuis>#1 0x00000000006558b6 in v8::internal::HandleScopeImplementer::IterateThis(v8::internal::ObjectVisitor*) ()
21:08:40  <bnoordhuis>#2 0x0000000000708c2b in v8::internal::Heap::IterateStrongRoots(v8::internal::ObjectVisitor*, v8::internal::VisitMode) ()
21:08:43  <bnoordhuis>#3 0x000000000077f5a4 in v8::internal::IncrementalMarking::StartMarking(v8::internal::IncrementalMarking::CompactionFlag) ()
21:08:46  <bnoordhuis>#4 0x000000000077f828 in v8::internal::IncrementalMarking::Start(v8::internal::IncrementalMarking::CompactionFlag) ()
21:08:49  <bnoordhuis>#5 0x0000000000713b61 in v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollector, char const*, char const*) ()
21:08:52  <bnoordhuis>#6 0x00000000006bc2eb in v8::internal::Factory::NewProperSubString(v8::internal::Handle<v8::internal::String>, int, int) ()
21:08:55  <bnoordhuis>#7 0x000000000086fec2 in v8::internal::Runtime_StringMatch(int, v8::internal::Object**, v8::internal::Isolate*) ()
21:08:58  <bnoordhuis>it's always the same stack trace
21:09:04  <bnoordhuis>below #7 are js frames that i can't decode
21:09:19  * c4milojoined
21:09:28  <tjfontaine>do you have a test I can play with to see what mdb sees as those js stacks?
21:09:45  <bnoordhuis>yeah. however, it requires a patch i'm working on
21:09:56  <tjfontaine>mk
21:09:59  <bnoordhuis>let me push it to a branch
21:11:39  <bnoordhuis>tjfontaine: https://github.com/bnoordhuis/node/compare/joyent:master...remove-sethiddenvalue-wip - it's test/simple/test-net-GH-5504.js that hangs 1 out of 3 times
21:11:50  <tjfontaine>bnoordhuis: ok, I will try it out
21:12:16  <bnoordhuis>tjfontaine: btw, the test has a three second timeout. you'll want to disable that or else debugging will get hard :)
21:12:25  <tjfontaine>hehe
21:13:24  <bnoordhuis>of course it's possible i broke things somehow by removing SetHiddenValue()
21:13:32  <bnoordhuis>trying to verify that
21:14:39  <bnoordhuis>oh, and another thing - it only seems to happen in release builds
21:14:57  <bnoordhuis>i can't get it to trigger in debug builds, even after 500 runs :-/
21:15:51  <tjfontaine>perhaps trying to gcore this was a bad idea
21:16:00  <tjfontaine>it's taking a while
21:16:01  * wavdedquit (Quit: Hasta la pasta)
21:16:03  * bradleymeckquit (Quit: bradleymeck)
21:16:14  <bnoordhuis>heh
21:16:33  <bnoordhuis>adding back the SetHiddenValue() call in stream_wrap.cc doesn't fix it
21:16:48  <tjfontaine>2.1 GB
21:17:40  <tjfontaine>bnoordhuis: https://gist.github.com/tjfontaine/6197295
21:18:32  * dshaw_joined
21:18:43  <bnoordhuis>tjfontaine: oh, that's interesting
21:18:55  <bnoordhuis>i guess that's a console.log statement somewhere
21:19:01  <bnoordhuis>the test has like a million of them
21:19:12  <bnoordhuis>let's see what happens when i turn console.log in a no-op
21:19:23  <tjfontaine>looks like internally in the afterWrite debug though
21:19:59  <tjfontaine>there are fewer debugs there
21:20:49  <bnoordhuis>ah, you're right
21:20:52  <tjfontaine>bnoordhuis: this could be the normal GC+Number issue we've seen other times
21:21:26  <bnoordhuis>ah... it's logging the req and the req contains the buffer
21:21:33  <bnoordhuis>which is a _big_ buffer
21:21:36  <bnoordhuis>ffs
21:22:12  <bnoordhuis>yep, that's it
21:22:27  * bnoordhuissmacks head against table
21:22:28  <bnoordhuis>thanks, tj
21:22:43  * kenperkinsquit (Quit: Computer has gone to sleep.)
21:22:44  <tjfontaine>you're welcome :)
21:23:12  <tjfontaine>bnoordhuis: I think we should thank dap for mdb v8.so :P
21:23:15  * dshaw_quit (Ping timeout: 276 seconds)
21:23:28  * c4miloquit (Remote host closed the connection)
21:23:43  * bradleymeckjoined
21:23:59  <isaacs>i'm starting to think that OutgoingMessage should be a Transform stream rather than a Writable stream directly
21:24:01  <bnoordhuis>heh yeah
21:24:10  <isaacs>there's a lot of clumsiness in the callback handling, etc
21:24:34  <bnoordhuis>i was working on a gdb plugin a while ago, i guess i should finish that. would make my life a lot easier at times
21:24:34  <isaacs>it'd be nice to say that assigning a socket to the outgoing message is just `this.pipe(socket)`
21:25:29  <isaacs>maybe i just don't have enough calories in me to solve this problem. need lunch, i think
21:26:35  <tjfontaine>isaacs: you really need the lunch siren
21:26:53  * mikealquit (Read error: Connection reset by peer)
21:26:57  <isaacs>tjfontaine: I DO!
21:27:18  <isaacs>tjfontaine: but when i'm at home, i usually snak through the day, so 12:00 is kinda early for lunch
21:28:55  * mikealjoined
21:29:14  * julianduquequit (Quit: leaving)
21:29:59  * julianduquejoined
21:30:07  <tjfontaine>heh
21:36:08  <bnoordhuis>tjfontaine: want to review the final version? https://github.com/bnoordhuis/node/compare/joyent:master...remove-sethiddenvalue-wip
21:38:21  <tjfontaine>interesting, so we weren't doing anything with that other than to just hold the reference alive?
21:39:15  <bnoordhuis>yep
21:39:34  * bradleymeckquit (Quit: bradleymeck)
21:39:57  <tjfontaine>then LGTM, do we need to fix util.format so it doesn't muck with large buffers?
21:40:44  <bnoordhuis>yes, that sounds like a good idea
21:41:49  <MI6>joyent/node: Ben Noordhuis master * f9b7714 : src: don't call v8::Object::SetHiddenValue() (+1 more commits) - http://git.io/vF6KIg
21:43:15  * trevnorrisfg
21:43:19  <trevnorris>what I miss?
21:44:35  * bradleymeckjoined
21:45:11  <trevnorris>groundwater: the trick is significantly faster, but there are several others you can use which aren't so evil
21:45:54  <trevnorris>isaacs: ping again :P
21:46:13  * mikealquit (Quit: Leaving.)
21:48:06  <trevnorris>tjfontaine: why you telling people my tricks of performance are evil? ;)
21:48:38  * wolfeidaujoined
21:48:45  <groundwater>tjfontaine is secretly an anarchist
21:48:50  <trevnorris>hah
21:49:25  * bradleymeckquit (Client Quit)
21:49:46  <groundwater>trevnorris: i'm more concerned with getting it working first than performance, but I'll keep your trick in the back pocket
21:50:15  <groundwater>i'm wrapping a bunch of ioctl syscalls, and ioctl is some dark magic
21:50:32  <trevnorris>groundwater: there are others that are "safer", whatever that's about :P
21:50:41  <trevnorris>but still almost as fast
21:51:10  <trevnorris>groundwater: are you creating an object just to attach these objects?
21:51:17  <MI6>nodejs-master: #396 UNSTABLE smartos-ia32 (2/622) smartos-x64 (10/622) linux-ia32 (1/622) osx-x64 (2/622) osx-ia32 (1/622) linux-x64 (1/622) http://jenkins.nodejs.org/job/nodejs-master/396/
21:51:38  <groundwater>i will be
21:51:43  * trevnorrisflogs github
21:52:02  <groundwater>right now i'm actually converting between c++ / js land but that's proving to be a losing strategy
21:52:47  <groundwater>and i'm just playing around with various approaches to find the best fit
21:52:59  <trevnorris>groundwater: then the actual proper way to do this is create an ObjectTemplate, set the InternalFieldCount = 1
21:53:21  <trevnorris>then use SetAlignedPointerInInternalfield
21:53:35  * dshaw_joined
21:53:42  <trevnorris>oy, again. SetAlignedPointerInInternalField (int index, void *value)
21:53:54  <groundwater>awesome
21:54:20  <trevnorris>yeah, use the ObjectTemplate to create your new objects, then you can store as many pointers on the object as you want
21:54:36  <groundwater>same question as before, is there a callback i can register for when the object is reaped by teh GC?
21:54:42  <trevnorris>use GetAlignedPointerFromInternalField to get the pointer out
21:55:14  <trevnorris>for that you need to Persistant the object you create, then set the weak callback
21:55:23  <trevnorris>you can see an example in master src/smalloc.cc
21:55:35  <groundwater>okay, yah tjfontaine showed me that example
21:56:14  <trevnorris>yeah, that's actually the only way to accomplish that. no performance tricks around that crap
21:56:24  <groundwater>thanks, this is great
21:56:50  * sblomjoined
21:56:51  <groundwater>heh, i think i'm pretty far away from worrying about performance, but it's appreciated
21:57:23  <austo>tjfontaine: I was just reading the module design page of your addon-layer docs and you advise against using objects for interaction. I've found it's kind of painful to use primitive types and keep track of parameter order. Are you saying it's better to have a shim for that?
21:57:25  * mikealjoined
21:57:36  * EhevuTovquit (Quit: This computer has gone to sleep)
22:01:08  * mikealquit (Client Quit)
22:11:27  <MI6>nodejs-master-windows: #196 UNSTABLE windows-x64 (18/622) windows-ia32 (22/622) http://jenkins.nodejs.org/job/nodejs-master-windows/196/
22:18:43  * jmar777joined
22:19:37  <groundwater>trevnorris: i think i'm doing this wrong, or i'm getting a cast wrong, but i'm getting ‘class v8::Object’ has no member named ‘SetAlignedPointerInInternalField’
22:20:40  <groundwater>obj->SetAlignedPointerInInternalField(0, (void*) some_pointer );
22:20:56  * jmar777quit (Remote host closed the connection)
22:22:00  <bnoordhuis>groundwater: what v8 version?
22:22:09  <bnoordhuis>you can find out with `node -pe process.versions`
22:22:25  <groundwater>v8: 3.14.5.9
22:22:34  <bnoordhuis>ah, node v0.10?
22:22:36  <tjfontaine>groundwater, trevnorris: the trick is only faster if you need to access it off an existing object, it is not faster if what you need is actually this handle
22:22:56  <groundwater>node v0.10.13
22:23:24  <bnoordhuis>groundwater: right. SetAlignedPointerInInternalField() first appeared in 3.16 iirc
22:23:31  <bnoordhuis>you want SetPointerInInternalField()
22:23:47  <bnoordhuis>make sure it's aligned on at least a two-byte boundary or bad things will happen
22:24:14  <tjfontaine>austo: I advise against mutating objects on the native side, regardless of the shim or not, it's a BestPractice for v8
22:25:13  <groundwater>hmm, i feel like External will be less dangerous for me
22:25:35  <trevnorris>tjfontaine: what do you mean "this handle"?
22:25:39  <groundwater>i don't want bad things to happen, that's for sure
22:26:11  <tjfontaine>trevnorris: void* handle = library_init(); if that's what you're passing around back and forth, there's no reason to be more clever than External
22:26:20  <trevnorris>external goes way back, the proper way to do it now is using an internal field.
22:26:32  <tjfontaine>I'm unconvinced of this
22:26:46  <trevnorris>well, external requires you to mutate the object, so what's you solution?
22:27:04  <tjfontaine>external requires the creation of an object, which happens anyway
22:27:11  * nsmjoined
22:27:23  <bnoordhuis>Real Men encode the pointer in a double and pass that to Number::New()
22:27:27  <bnoordhuis>Real Women do too
22:27:30  <trevnorris>haha
22:27:41  <tjfontaine>bnoordhuis: what are, ruby? :)
22:27:43  <tjfontaine>*we
22:28:08  <tjfontaine>also, External.toString() in 3.14 does look exactly like that
22:28:09  <bnoordhuis>no, closet spidermonkey users
22:28:20  <bnoordhuis>it uses nan tagging for storing just about anything
22:28:29  <tjfontaine>in 3.20 External.toString() is {}
22:28:58  * rendarquit
22:32:17  <trevnorris>tjfontaine: external is not near as useful setting an internal pointer. it only lets you pass around an empty object. if you have additional properties to track you'd need to pass around two objects.
22:32:32  <tjfontaine>trevnorris: or maintain state in js
22:34:09  <trevnorris>that's a fair amount of inflexibility. and if you wanted to use any logic of where that pointer was to go, or read some state on that pointer?
22:34:32  <tjfontaine>on the contrary, I think it provides far more flexibility, especially consideringn you're actually letting the JIT do the work for you
22:34:47  <trevnorris>how so, the jit has almost nothing to do with this
22:35:07  * EhevuTovjoined
22:35:17  <tjfontaine>you're claiming it's inflexible because you can't hang state on the same object, and I'm saying you maintain the state in a different piece in js land where the jit can do the work
22:36:43  <trevnorris>the code complexity rises when you have to maintain state and the data separately
22:37:04  <tjfontaine>they aren't maintained separately
22:37:23  <bnoordhuis>is this turning into a discussion about monads again?
22:37:30  <trevnorris>nothing can be directly attached to the external, so you're saying make the external another objects property?
22:37:49  <trevnorris>i dunno. no idea what a monad is, other than it sounds like gonad
22:38:03  <tjfontaine>trevnorris: yes, but that when interacting with the native layer you separate it in JS before passing to native
22:38:21  <tjfontaine>which is what we've already determined is a best practice
22:38:50  * nsmquit (Quit: ZNC - http://znc.in)
22:39:03  <trevnorris>so you explicitly pass a property of an object to function calls that go native?
22:39:17  * brsonquit (Ping timeout: 256 seconds)
22:39:21  * nsmjoined
22:39:25  <tjfontaine>you avoid doing Get's in the native layer, when at all possible
22:40:44  <trevnorris>that would annoy me to need to remember when I need to pass the object, and when to pass just an object property. just pass the entire thing all the time and you're done
22:41:09  * tjfontaineshrugs
22:41:19  <tjfontaine>it's quite a common pattern for those already accustomed to doing C interfaces
22:41:25  * nsmquit (Client Quit)
22:41:54  <trevnorris>i thought you were against exposing those properties to js?
22:42:01  * nsmjoined
22:42:02  * nsmquit (Remote host closed the connection)
22:42:20  <tjfontaine>when writing an addon module, you should not expose such a method to the consumer, no
22:42:32  <tjfontaine>in JS land though you wrap it up nice and neat
22:42:35  <tjfontaine>and make it usefule
22:42:36  <tjfontaine>-e
22:42:39  * brsonjoined
22:42:42  <trevnorris>then you'd have to mutate the object in native, or use Object.defineProperty which sucks
22:42:49  * nsmjoined
22:42:54  <trevnorris>what do you mean "wrap it up"?
22:43:08  <tjfontaine>new MyLibrary(); does handle = binding.init(); and then when you do instance foo.bar() it passes binding.bar(handle)
22:43:22  <tjfontaine>no, you use javascript exactly like it was defined
22:43:25  <tjfontaine>*designed
22:43:42  * jmar777joined
22:44:07  <trevnorris>how do you attach the external to the object instance so that it's not exposed to the user but still can be tracked?
22:44:08  * EhevuTov_joined
22:44:21  <tjfontaine>so you have binding.foo_{bar,baz,bat} that all take as their first parameter the handle, your MyLibrary constructor calls the init, and stores internally ._handle, and then as bar/baz/bat properties, and when you call them, it does the right thing and passes the handle
22:44:58  <trevnorris>._handle is still technically exposed to the user. that's what i'm getting at
22:45:05  <isaacs>trevnorris: pong
22:45:07  <trevnorris>e.g. it could be overwritten
22:45:07  <tjfontaine>"so"
22:45:26  <tjfontaine>you could do the other normal variable hiding mechanisms with closure scopes
22:45:33  <tjfontaine>if it was *that* important, but it's not really
22:45:57  <trevnorris>function closures basically tell the jit to f-off
22:46:20  <tjfontaine>that's what you get for trying to hide something that you didn't really need to hide :)
22:47:09  <trevnorris>so you definition of "hiding" is to place an _ before the object property?
22:47:24  <tjfontaine>have you met node/lib/*.js? :)
22:47:30  * EhevuTovquit (Ping timeout: 264 seconds)
22:48:01  <tjfontaine>I'm not sure there's a reason to be more clever than that, it's already the accepted pattern in js to let someone know they're mucking with something they really ought not to be
22:48:17  <trevnorris>you hide as much as you can. the _ convention is a necessary evil at times for performance.
22:49:04  * paddybyersquit (Ping timeout: 264 seconds)
22:49:05  <tjfontaine>I don't see a reason to be any more clever, or obtuse with the implementation than with _
22:49:05  <trevnorris>isaacs: working on the domains patch for a more generic api. wanted feedback, it would move some of the core concepts to src/node.js that would allow the user to create their own domain-like things
22:49:38  <trevnorris>isaacs: some work i've been doing for https://github.com/joyent/node/pull/6011
22:49:45  <isaacs>trevnorris: yeah, so, i wanted to talk you about the storage stuff that othiym23 is doing, as well
22:50:25  <isaacs>newrelic has a very particular use-case need, but i think it's also pretty generically applicable.
22:50:31  <trevnorris>isaacs: using the method I've been able to recombine the domain stuff as zero performance cost to core
22:50:39  <isaacs>basically any case where you'd do res.blerg = bloo, cls woudl be better
22:50:51  <isaacs>trevnorris: that is exciting to me on many levels.
22:51:05  <bnoordhuis>isaac gets excited easily
22:51:09  <trevnorris>heh
22:52:00  * indexzeroquit (Quit: indexzero)
22:53:30  <trevnorris>isaacs: i've been able to share state so well that in native we can check if the user is actively in a domain at any given time, instead of just checking that the domain module has been loaded.
22:53:53  <isaacs>trevnorris: yeah, i saw that in your first patch
22:54:00  <isaacs>trevnorris: is it worthy of further review?
22:54:10  <trevnorris>isaacs: I have a few other commits, but waiting for a lgtm on https://github.com/joyent/node/pull/6019
22:54:16  <trevnorris>that'll need to go in first
22:54:18  * isaacslooking now
22:54:27  * jmar777quit (Remote host closed the connection)
22:55:30  * AvianFlu_joined
22:55:56  * felixgequit (Quit: felixge)
22:56:35  * AvianFlu_quit (Remote host closed the connection)
22:58:22  <trevnorris>tjfontaine: well seems we'll just have to agree to disagree. :)
22:58:36  <tjfontaine>heh, guess so
22:58:42  <tjfontaine>fwiw I'm fine with doing whatever we want in core
22:58:52  <tjfontaine>I'm not fine with advertising this as a best practice for people writing modules
22:59:23  <trevnorris>using the external data array thing is a complete and total hack, and if you have an existing object i'd recommend your technique
22:59:39  * AvianFluquit (Ping timeout: 260 seconds)
22:59:41  <trevnorris>the other is for when you can create the object from an ObjectTemplate
22:59:56  <trevnorris>when possible, it's a better modal, imho
23:00:44  <trevnorris>tjfontaine: e.g. you need to create an object on a c++ class instantiation (like req_wrap) and you want to attach the class instance to that object
23:00:49  <groundwater>i think the biggest difference is being able to encapsulate one pointer, or many in a single opaque object
23:01:02  <tjfontaine>groundwater: a simple struct solves the latter
23:01:05  <tjfontaine>trevnorris: perhaps
23:01:17  <tjfontaine>trevnorris: I'm really not a fan of the ObjectWrap model we have in core
23:01:37  <tjfontaine>as is demonstrated by my opinion for how I think others should do it themselves :P
23:01:46  <trevnorris>imo it's the best for when you are coming from c++ (e.g. incoming request) and you don't want to visit js just to set an object property
23:02:04  <trevnorris>hah
23:02:33  <tjfontaine>:)
23:03:48  <trevnorris>tjfontaine: jenkins treating you well? ;)
23:03:55  <tjfontaine>no.
23:03:58  <tjfontaine>:<
23:04:15  <trevnorris>seems this week it's basically become worse than useless
23:04:23  <tjfontaine>the frontend wobbles back and forth between blazing fast and excrutiating slow
23:04:30  <tjfontaine>but it's at least not hard locked today so far
23:04:48  <trevnorris>heh
23:04:52  <isaacs>trevnorris: so... explain why _domain[0] is faster than just using process.domain?
23:05:56  <trevnorris>isaacs: accessing an array property by numeric index is 3x's faster than accessing an object property, not including the need to first access the object from global context
23:06:13  <trevnorris>it basically serves as a wrapper around the object for quickest access from native
23:06:20  <isaacs>ohh
23:06:23  <isaacs>from C++
23:06:25  <trevnorris>yeah
23:06:45  <trevnorris>mainly how it's used in req_wrap
23:07:42  <isaacs>right
23:07:51  <isaacs>trevnorris: so, internally, why use process.domain and not _domain[0]?
23:08:06  <isaacs>trevnorris: eg https://github.com/joyent/node/pull/6019/files#L2R419
23:08:30  * wolfeidauquit (Remote host closed the connection)
23:08:46  <trevnorris>isaacs: because it's local to domain.js, but that'll be addressed in my next pr
23:09:21  <isaacs>oh, ok
23:09:29  <isaacs>yeah, i see, i thought i was reading src/node.js
23:09:34  <isaacs>nvm
23:09:37  <trevnorris>:)
23:10:13  <isaacs>trevnorris: have you run any benchmarks with this?
23:11:01  * mikealjoined
23:11:15  <trevnorris>isaacs: not w/ domains yet. but it has 0 perf impact on normal use
23:11:23  <isaacs>trevnorris: ok, well, that'sa plus :)
23:11:59  <trevnorris>the minimal goal is to introduce the more extensive api w/o making normal operations slower.
23:12:38  <isaacs>trevnorris: NODE_USE_DOMAINS=1 NODE_BENCH=http ./node benchmark/compare.js ./node ./node-master
23:12:44  <isaacs>er, no
23:12:48  <isaacs>trevnorris: NODE_USE_DOMAINS=1 NODE_BENCH=bench-http ./node benchmark/compare.js ./node ./node-master
23:12:56  <trevnorris>oooh. didn't know you could do that :)
23:13:04  <isaacs>yeah
23:13:16  <isaacs>that affects all the benchmarks that use the benchmark/http_simple.js script
23:16:59  <isaacs>trevnorris: if the benchmarks in the domain use-case are favorable, land at will. code lgtm
23:17:10  <trevnorris>isaacs: coolio, thanks :)
23:17:20  <isaacs>it's a bit weird, but meh :)
23:17:27  <isaacs>performance critical code is often oddball
23:18:12  <trevnorris>seriously
23:18:22  <trevnorris>the state sharing trick is coming in handy
23:20:12  * mikealquit (Quit: Leaving.)
23:22:03  <othiym23>isaacs, trevnorris: I am totally keeping an eye on all this stuff and am enthusiastic about how it's going, but I'm also up to my ass in alligators right now so I'm kinda quiet
23:22:06  * mikealjoined
23:23:40  <trevnorris>othiym23: hm. strange visual. i'm trying to make this my next thing out the door, so hopefully within a week or so
23:26:36  <othiym23>trevnorris: my main concern about the changes to domains is that I would very much like to be able to continue to introspect into domains and selectively wrap things like process._fatalExceptionHandler for the New Relic agent's error tracer
23:27:19  <othiym23>having hooks into those systems from the outside is more or less a necessity, because I need to stick myself in somewhere where I can see every error without altering the system's behavior
23:30:51  * mcavagequit
23:39:03  <trevnorris>othiym23: this should have 100% backwards compatibility
23:41:30  <othiym23>(o_o)-b
23:49:11  * dshaw_quit (Quit: Leaving.)
23:51:00  * mikealquit (Quit: Leaving.)
23:51:18  * groundwaterquit (Quit: groundwater)
23:56:49  <MI6>joyent/node: Trevor Norris master * 3f5d584 : domain: share object and state with native land (+1 more commits) - http://git.io/rvf7_A
23:58:25  * bnoordhuisquit (Ping timeout: 246 seconds)
23:59:34  <trevnorris>isaacs: so, domain.create shows it accepts a callback, but nothing is done with it. something I'm missing?
23:59:58  <isaacs>trevnorris: hmmm...