Show enters and exits. Hide enters and exits.
| 00:51:06 | rue | Bedtime, nite |
| 01:40:00 | dgtized | brixen: have you seen this stuff about non-blocking hash tables: http://blogs.azulsystems.com/cliff/2007/03/a_nonblocking_h.html |
| 01:43:25 | brixen | yes |
| 01:47:33 | dgtized | k, just checking |
| 05:47:22 | ddub | kinda quiet tonight |
| 05:50:55 | scoopr | g'morning |
| 16:32:38 | yakischloba | rue: ping |
| 16:34:02 | yakischloba | or anyone, actually. this isn't really a rubinius question but i think someone in here might have insight |
| 16:35:21 | manveru | yakischloba: ffi? :) |
| 16:36:33 | ddub | good morning, those for whom it is morning :) |
| 16:36:35 | yakischloba | im using FFI and some external library functions are allocating memory. the MRI gc at least, seems unaware of this memory being allocated, and so does not take it into consideration when it decides whether or not to run GC. This is a problem because my only hook for freeing the memory is the finalizer, so im ending up with huge RAM consumption because GC doesn't think memory is being used up |
| 16:36:54 | manveru | ddub: does 00:36 count as morning? :) |
| 16:37:05 | ddub | manveru: just barely |
| 16:37:25 | yakischloba | anyone run into this issue before? |
| 16:37:56 | manveru | that sounds like quite a big issue... |
| 16:38:16 | yakischloba | yeah but i mean, how the hell do you deal with it heh |
| 16:38:41 | yakischloba | I don't know if other GC's have awareness of other memory being allocated |
| 16:38:53 | yakischloba | i have no idea how its supposed to be handled |
| 16:40:01 | manveru | hmm |
| 16:40:07 | ddub | a GC has no awareness of non-GC objects, normally |
| 16:40:09 | manveru | yakischloba: googling for 'ruby ffi gc' gives some stuff |
| 16:42:32 | yakischloba | hmm. |
| 16:42:43 | ddub | yakischloba: I'd look at MemoryPointer |
| 16:42:56 | yakischloba | ddub: What do you mean? |
| 16:43:31 | ddub | I would imagine that if there was a way to indicate that a pointer has a certain amount of memory associated with it for GC purposes, that would be the object it would be exposed on |
| 16:43:48 | yakischloba | ah ok. i'll check it out. |
| 16:43:54 | ddub | but I kinda doubt it, I think your problem is one of zones |
| 16:44:13 | ddub | say there is the young object zone, which has a copy collector, and the mature object zone which has mark and sweep |
| 16:44:30 | ddub | you have another zone, which is the libc-managed zone |
| 16:44:57 | ddub | I don't believe there is any process which monitors say the sum of these three to make GC decisions |
| 16:45:10 | yakischloba | I'm curious about this but I don't think it will even solve my problem. I need to figure out where exactly it's happening, but basically copying a bunch of string data into ruby is giving me crazy performance decrease |
| 16:46:03 | yakischloba | Has anyone used FFI for operations like this, where a lot of string data is getting moved into Ruby? |
| 16:46:03 | ddub | hmm |
| 16:46:17 | ddub | not i |
| 16:52:09 | rue | yakischloba: You should not rely on the finalizer |
| 16:53:23 | yakischloba | rue: yeah I am coming to this conclusion |
| 16:53:59 | yakischloba | so then my problem is that I have to move all my string data into ruby when I instantiate the object, and then free the memory |
| 16:54:14 | yakischloba | but copying it all seems to take a long time ;( |
| 16:54:23 | rue | Yes, it would be the simplest starting point |
| 16:55:10 | rue | Other than that, you can possibly arrange a [un]register option for the FFI-backed data as a more explicit finalizer |
| 16:59:08 | rue | How much data do you have, anyway? And Strings? |
| 16:59:21 | yakischloba | database query results |
| 17:01:08 | rue | Do you have a defined scope in which they (or part thereof at least) live? |
| 17:01:22 | yakischloba | http://pastie.org/private/l2yb2emwuvkojb0s7ac3w that is what i am doing |
| 17:01:35 | yakischloba | but it is slow for large query result |
| 17:01:45 | yakischloba | defined scope meaning what? |
| 17:02:28 | yakischloba | they're buffered into memory allocated by the library and then it doesnt mess with it anymore, i believe |
| 17:03:08 | rue | How long do you need the data for? |
| 17:03:38 | yakischloba | well, so i'm trying to make a typical database adapter. someone should be able to use it manually, through an ORM, etc |
| 17:04:25 | rue | So you have to convert it to Ruby form at some point anyway, right? |
| 17:04:31 | yakischloba | correct |
| 17:08:00 | yakischloba | Is there a faster way to do what I am doing in the pastie? |
| 17:08:44 | rue | Do it lazily |
| 17:09:28 | yakischloba | but I have to free the underlying buffer in the constructor |
| 17:09:42 | yakischloba | because I can't rely on the finalizer |
| 17:12:14 | yakischloba | no good solution to this, is there :/ |
| 17:12:31 | rue | If you have a big chunk of memory |
| 17:15:50 | yakischloba | If I have a big chunk of memory, what? :0 |
| 17:15:54 | yakischloba | ;) |
| 17:18:00 | rue | If you have one big chunk of memory, you may need to release it all at once. If you have multiple small ones, then no |
| 17:19:54 | yakischloba | what are you saying? lazily free each row region or something? |
| 17:20:07 | yakischloba | if the user doesn't use the result, then im screwed again |
| 17:22:14 | yakischloba | it will suck if I am only able to produce a really slow thing with FFI :( |
| 17:24:06 | rue | What about something as simple as a block form? |
| 17:24:39 | yakischloba | connection.query do |result| which frees at the end? |
| 17:25:14 | yakischloba | makes sense. just still the slowness remains if the data set is slightly large |
| 17:28:49 | rue | Combine that with laziness |
| 17:29:04 | yakischloba | right |
| 17:29:27 | yakischloba | best thing to do I guess |
| 17:31:00 | yakischloba | tis a shame it cannot be more performant. a pure ruby library would almost be faster |
| 17:33:35 | rue | It is not the ideal use case |
| 17:34:09 | yakischloba | yeah. |
| 17:34:11 | rue | It is not possible to specify that you are getting strings? |
| 17:34:45 | yakischloba | what do you mean? |
| 18:02:09 | evan | morning |
| 18:03:28 | brixen | morning |
| 18:03:36 | rue | Moomin |
| 18:04:13 | evan | yakischloba: you still around? |
| 18:04:57 | yakischloba | evan: yo. |
| 18:05:15 | evan | yakischloba: how are you allocating a bunch of memory? |
| 18:05:31 | yakischloba | evan: with the library i am using via ffi |
| 18:05:39 | evan | so the library allocates the memory |
| 18:05:42 | yakischloba | yes |
| 18:05:51 | evan | and how is that memory supposed to be freed? |
| 18:05:56 | yakischloba | also through the library |
| 18:05:57 | evan | is there another function to call to free it? |
| 18:06:02 | evan | so thats all you need to be doing |
| 18:06:02 | yakischloba | yes |
| 18:06:33 | yakischloba | yeah, i know |
| 18:06:45 | evan | but your problem is "when do I free it"? |
| 18:06:50 | yakischloba | that issue is resolved, i guess |
| 18:06:51 | yakischloba | well |
| 18:07:19 | yakischloba | first I was wrapping those pointers with AutoPointer and using a finalizer to free it, but that turns out to not work well |
| 18:07:31 | evan | no |
| 18:07:32 | evan | it won't. |
| 18:07:39 | evan | because finalizers suck. |
| 18:07:41 | evan | in general. |
| 18:07:49 | yakischloba | so I have to somehow free it when I know my user is done with it |
| 18:08:02 | yakischloba | so thats fine, i can work around that |
| 18:08:10 | yakischloba | the only issue now really is that its slow to copy so much string data into ruby ;( |
| 18:08:14 | evan | you require them to use it in a block |
| 18:08:20 | evan | and free the memory when the block ends |
| 18:08:21 | yakischloba | yeah |
| 18:08:36 | evan | how much string data? |
| 18:08:39 | evan | and how are you copying it? |
| 18:08:58 | yakischloba | this is an example of how I am getting it: http://pastie.org/private/l2yb2emwuvkojb0s7ac3w |
| 18:09:21 | yakischloba | that is prior to the discussion of this lazy-copy block yielding thingy idea |
| 18:09:24 | evan | that means nothing to me |
| 18:09:29 | evan | because I can't see where the FFI calls are |
| 18:09:37 | evan | so i can't make heads or tails of this code |
| 18:09:47 | yakischloba | rowptr[i].get_string(0) |
| 18:09:52 | yakischloba | get_string, thats how im getting the strings into ruby |
| 18:09:54 | evan | is row a FFI Pointer? |
| 18:10:10 | yakischloba | rowptr is, yes |
| 18:10:40 | yakischloba | its a database client lib, so the amount of data is variable, but could be huge |
| 18:10:40 | rue | yakischloba: I meant that if you can indicate to FFI that the data you are getting is Strings, it should do the conversion |
| 18:10:43 | rue | I thinks |
| 18:11:03 | evan | it should be converting it |
| 18:11:11 | evan | .get_string returns a string. |
| 18:11:22 | evan | yakischloba: well, yeah |
| 18:11:23 | yakischloba | uh, yeah. |
| 18:11:27 | evan | sadly, this is how FFI has to work |
| 18:11:35 | evan | you have to copy the data out to persist it. |
| 18:11:42 | evan | because it's unmanaged |
| 18:12:01 | yakischloba | right. so lazy #get_string'ing is the best possible way to do it |
| 18:12:14 | evan | probably, yes. |
| 18:12:23 | evan | how slow is it? |
| 18:12:30 | evan | maybe there is a bug in .get_string |
| 18:17:20 | rue | Can you specify [:string] rather than :pointer or something? |
| 18:18:03 | yakischloba | yeah, but I don't think that has anything to do with it. not sure I could make it work either |
| 18:19:28 | yakischloba | it isnt *that* slow |
| 18:19:37 | evan | then stop complaining! :D |
| 18:19:50 | yakischloba | hah. just looking for ideas mang ;) |
| 18:19:55 | evan | i know. |
| 18:20:06 | evan | yeah, this is just an artifact of FFI |
| 18:20:34 | evan | i take it using the finalizer blew up the memory footprint of your process? |
| 18:21:05 | yakischloba | well, the finalizer itself didn't seem to be the problem. the GC just wasn't aware of the memory allocated by the library, so it didn't think it needed to run |
| 18:21:25 | yakischloba | so even the ruby objects wrapping the pointers weren't getting GC'd |
| 18:21:45 | evan | well |
| 18:21:49 | evan | thats not completely true |
| 18:22:14 | evan | what happens, in this case, is that because the GC can't see those external allocations |
| 18:22:20 | evan | it doesn't realize memory is running low |
| 18:22:23 | evan | so it doesn't run the GC |
| 18:22:30 | evan | MRI has a little bit of code to handle this case |
| 18:22:45 | yakischloba | oh? it didn't seem to be working very well this morning :p |
| 18:22:45 | evan | but it's just that when malloc() is called, if it fails, run the GC |
| 18:22:50 | yakischloba | oh. |
| 18:22:58 | evan | basically |
| 18:23:04 | yakischloba | useless heh |
| 18:23:06 | evan | if you make 10 ruby objects that each point to 100M of memory |
| 18:23:15 | evan | MRI's GC only sees the 10 objcts |
| 18:23:25 | evan | it doesn't take the 100M into account for if the GC should run. |
| 18:23:27 | rue | Can force-request a GC run, of course |
| 18:23:36 | evan | rubinius has an internal API to advise the GC on this |
| 18:23:55 | rue | Provided that the orphaned FFI objects would release their memory when collected |
| 18:24:08 | evan | rue: right, thats the trick |
| 18:24:10 | yakischloba | evan: that's nice |
| 18:24:17 | evan | if the user throws a ref to that ruby object somewher |
| 18:24:19 | rue | MemoryPointer can be prescribed as the "owner" of its pointee, right? |
| 18:24:20 | evan | eek! |
| 18:24:23 | evan | 100M in the bucket! |
| 18:24:29 | evan | yeah |
| 18:24:35 | evan | thats basically the AutoPointer thing |
| 18:24:38 | evan | that the MRI API added |
| 18:24:41 | evan | which I need to port over |
| 18:25:18 | evan | AutoPointer says "I'm the owner of this pointer, and it should be free()d when I'm GCd" |
| 18:29:35 | yakischloba | yeah. |
| 18:49:42 | yakischloba | evan: as an extremely unscientific comparison |
| 18:50:02 | yakischloba | well, nevermind. its that silly heh. |
| 18:50:57 | evan | hah |
| 18:51:00 | evan | well played. |
| 18:51:16 | yakischloba | for fun im just comparing my thing against the libmysqlclient MRI extension |
| 18:51:29 | evan | thats probably very unfair |
| 18:51:36 | evan | since they do completely different things |
| 18:51:38 | evan | don't they? |
| 18:51:46 | yakischloba | what does different things |
| 18:52:03 | evan | is your FFI library a mysql client? |
| 18:52:41 | yakischloba | it uses libdrizzle, which is based on libmysqlclient, and speaks mysql protocol (and has better performance in and of itself than libmysqlclient) |
| 18:53:13 | yakischloba | so it's doing the same thing: running a mysql query |
| 18:53:52 | evan | ok |
| 18:54:00 | yakischloba | running it 1000 times, my thing takes 25 seconds and the MRI ext takes 10 seconds |
| 18:54:01 | evan | perhaps that is a fair comparison |
| 18:54:10 | evan | well, use a profiler |
| 18:54:15 | evan | and see where your 25 seconds is going |
| 18:54:18 | evan | don't assume it's FFI |
| 18:54:29 | yakischloba | heh. I have been trying to. (and im not, necessarily) |
| 18:55:04 | yakischloba | I'm trying to use the google perftools profiler. I guess I'll have to build ffi against it, as well as libdrizzle, huh |
| 18:55:28 | evan | i mean a ruby profiler. |
| 18:55:47 | yakischloba | Oh. I am not familiar with ruby profilers |
| 18:55:48 | evan | like rubyprof |
| 18:55:55 | evan | since you're writing in ruby |
| 18:56:00 | evan | you should be using a ruby profiler |
| 18:57:27 | evan | yakischloba: are you new to ruby? |
| 18:57:31 | yakischloba | evan: no. |
| 18:57:35 | yakischloba | evan: i learned on ruby. |
| 18:57:52 | yakischloba | but i guess 'new' is a loose term :p |
| 18:57:57 | evan | time to learn to use a ruby profiler then. |
| 18:58:11 | evan | you pretty much can't say anything about ruby performance unless you use a ruby profiler |
| 18:58:46 | yakischloba | ok. i am trying it now. |
| 18:58:47 | rue | Mm, but would a Ruby profiler in any way distinguish time in the lib? |
| 18:59:13 | yakischloba | yeah i duno. I just figured in this case, there is very little ruby code, so at best it can help me narrow down where in the C the time is being spent. |
| 18:59:38 | evan | rue: no, but it would tell you whether or not you should consider the lib |
| 18:59:43 | evan | it's a process of elimination |
| 19:00:13 | evan | rubyprof should be able to show you calls into the FFI layers though |
| 19:00:22 | evan | which will tell you if FFI is the thing taking the most time |
| 19:00:32 | yakischloba | indeed. I am running it now. |
| 19:00:37 | brixen | ours reports time in ffi and capi calls, but our ffi may not support that code |
| 19:04:31 | rue | evan: Yeah, although I am not sure how well it groks the stubs |
| 19:04:58 | rue | Either way, definitely a good idea. I just assumed that you were seeing something definitely from the FFI side :) |
| 19:07:56 | evan | rue: probably not at all (grok the stubs) |
| 19:08:08 | evan | might be neat if it did though! |
| 19:08:46 | Arjen | evan, brixen, I was curious if guys have a (rough) date in mind for a 1.0 release? Couldn't resist asking, sorry. :) |
| 19:09:07 | evan | we don't. |
| 19:09:17 | evan | sometime in 2009 |
| 19:09:37 | brixen | Arjen_: did you see the roadmap? |
| 19:09:44 | Arjen | brixen, yep! |
| 19:09:49 | brixen | ok cool |
| 19:10:15 | brixen | that gives at least some idea of what we're driving at |
| 19:10:22 | brixen | Arjen_: help us fix bugs :) |
| 19:11:27 | Arjen | I know, I know. Can't be of much use though (trust me). |
| 19:12:04 | brixen | heh |
| 19:45:31 | yakischloba | ah, back from lunch. this is my output from ruby-prof here http://pastie.org/private/dgyfkwu2rxt3cjgrsqjla |
| 19:45:57 | yakischloba | whic i dont really know how to interpret. is %self a percentage of total run time? |
| 19:47:57 | evan | ruby-prof has a weird output format |
| 19:48:06 | yakischloba | yeah. |
| 19:48:57 | evan | i'd assume self% is "the ammount of time the program spent running this method, but not it's children" |
| 19:49:09 | evan | so, i'm assuming you benchmarked with 1000.times or something |
| 19:49:13 | yakischloba | yes |
| 19:49:15 | evan | and you didn't run enough iterations |
| 19:49:23 | evan | because the looping itself was the highest cost |
| 19:49:45 | yakischloba | i did not run enough iterations...so i should...5000.times? |
| 19:50:07 | evan | more |
| 19:50:09 | evan | probably lots lots |
| 19:50:14 | yakischloba | heh |
| 19:50:18 | evan | you should get it to last at least 10 seconds |
| 19:50:22 | evan | before it outputs anything |
| 19:50:41 | yakischloba | with the profiler, that took almost 5 minutes |
| 19:50:50 | yakischloba | Total: 293.370000 <- isn't that seconds? |
| 19:50:51 | evan | :/ |
| 19:50:54 | evan | i dunno |
| 19:50:57 | evan | it doesn't say. |
| 19:50:59 | yakischloba | and without it, it takes only 25 seconds |
| 19:51:04 | yakischloba | well |
| 19:51:08 | yakischloba | i *know* it took almost 5 minutes |
| 19:51:17 | yakischloba | i sat there waiting for it :) |
| 19:51:25 | evan | without what? |
| 19:51:31 | yakischloba | without the profiler |
| 19:53:15 | yakischloba | I don't understand how that could possibly be the case, that it's taking the most time, unless my ruby build has a broken Integer#times |
| 19:54:10 | evan | it is odd. |
| 19:54:17 | evan | well, rerun it |
| 19:54:20 | evan | and use a while loop |
| 19:54:24 | evan | instead of #times |
| 19:54:24 | yakischloba | k. |
| 20:01:29 | yakischloba | evan: Ah. That call to #times that its seeing is inside my code, not the loop iterator. |
| 20:04:24 | evan | ah. |
| 20:04:25 | yakischloba | evan: since it gets called for every row of a result. |
| 20:04:36 | evan | yes, thats the problem with MRIs profiler support |
| 20:04:46 | evan | it reports code in blocks incorrectly. |
| 20:04:58 | evan | it reports them as on the caller of the bolck |
| 20:04:59 | evan | block |
| 20:05:05 | evan | rather than the definer of the block |
| 20:06:39 | yakischloba | yeah, i'm having trouble understanding what it is telling me heh. |
| 20:07:53 | yakischloba | other than that the thing I spend the most time on is the thing I do the greatest number of times :) |
| 20:16:12 | dgtized | evan: what do we need to do to hookup the Selector / SendSite profilers again? |
| 20:16:59 | evan | not sure |
| 20:17:06 | evan | didn't know they weren't hooked up. |
| 20:20:33 | rue | dbussink: Are you still seeing a segfault? |
| 20:21:40 | dbussink | rue: haven't been any changes, have there? |
| 20:21:53 | dbussink | so still seeing those segfaults yeah |
| 20:24:23 | evan | ok |
| 20:24:29 | evan | anyone that sees a segfault |
| 20:24:34 | evan | please gather as much info as you can |
| 20:24:40 | evan | and open an issue on github |
| 20:24:42 | evan | so we don't loose them |
| 20:24:59 | evan | I didn't know people were seeing segfaults |
| 20:27:16 | rue | I do not seem to be getting them anymore. |
| 20:28:03 | dbussink | evan: this is with llvm and jit enabled though |
| 20:31:37 | dbussink | evan: is there an easy way to do a ci spec run in gdb? |
| 20:31:58 | brixen | gdb --args vm/vm mspec/bin/mspec-ci |
| 20:33:29 | dbussink | http://gist.github.com/115032 |
| 20:34:35 | brixen | evan fixed that at some point |
| 20:34:49 | brixen | iirc, that symbol is in llvm too |
| 20:35:02 | dbussink | brixen: this is against latest svn head |
| 20:35:38 | brixen | ok, well, lunch for me, bbiab.. |
| 20:36:06 | dbussink | from llvm that is, something that a rake clean would miss? |
| 20:38:28 | dgtized | evan: it just looks like SendSites::ALL and Selectors::ALL aren't getting filled with any entries |
| 20:39:36 | dgtized | or wait, maybe it's something else, just a sec |
| 20:41:25 | rue | dbussink: Could conceivably need distclean if it is LLVM code itself |
| 20:44:10 | dgtized | evan: nm it's not that it's not filling the ::ALL variable, it's just that SendSite.hits and .misses is never getting larger then 10 somehow |
| 20:47:07 | evan | hm |
| 20:47:22 | dgtized | because .hits and .misses is always 0 |
| 20:47:47 | evan | oh |
| 20:47:50 | evan | well, thats easy. |
| 20:47:59 | dbussink | rue: trying with a complete new llvm checkout and distclean rubinius, see whether it still fails |
| 20:48:02 | evan | it's just not being used atm I guess. |
| 20:48:11 | evan | dbussink: whats the segfault you're seeing? |
| 20:48:21 | dbussink | evan: http://gist.github.com/115032 |
| 20:48:39 | evan | not sure why that would be LLVM related at all |
| 20:48:49 | evan | are you saying you compiled with RBX_LLVM=1 |
| 20:48:50 | evan | ? |
| 20:48:55 | dbussink | evan: me neither, but it wasn't failing before |
| 20:48:57 | dbussink | evan: yeah |
| 20:49:17 | evan | oh |
| 20:49:18 | evan | i recall. |
| 20:49:30 | evan | yes, this should be fixed already. |
| 20:49:43 | evan | dbussink: are you compiling against SVN HEAD? |
| 20:49:59 | evan | oh oh |
| 20:50:00 | evan | i know |
| 20:50:03 | evan | you need to do a distlean |
| 20:50:03 | dbussink | evan: yeah |
| 20:50:04 | evan | distclean |
| 20:50:11 | evan | because I changed the name of that symbol |
| 20:50:19 | dbussink | evan: doing it atm, let's the see whether it fails after that |
| 20:50:20 | evan | of s2b_D2A |
| 20:50:23 | dbussink | rebuilding llvm atm |
| 20:50:32 | evan | it should be fine then |
| 20:50:36 | evan | that was a really weird error. |
| 20:50:40 | evan | it's a symbol conflict |
| 20:50:59 | dbussink | between rbx and llvm? |
| 20:52:54 | evan | between the custom strtof we use |
| 20:52:56 | evan | and llvm |
| 20:54:58 | dgtized | evan: we only increment hits/misses in mono_performer and mono_mm_performer, should we be incrementing them in SendSite::fill or find_method? |
| 20:58:24 | evan | no |
| 20:58:28 | dgtized | or I guess more importantly why aren't we using mono_performer and mono_mm_performer? |
| 20:58:32 | evan | i've half reworked that |
| 20:58:36 | dgtized | k |
| 20:58:37 | evan | and need to work on it more |
| 20:58:42 | evan | to make hit/misses work again |
| 20:59:18 | dgtized | alright, I'll just wait on it then |
| 21:00:40 | dgtized | had hoped that was something I could work on, but that sounds like it's not low hanging fruit |
| 21:12:38 | ddub | waves |
| 21:13:22 | ddub | I really would like to work on making a more maintainable compiler |
| 21:13:32 | dbussink | evan: hmm, weird, with everything clean, the first time running RBX_LLVM=1 rake fails with the __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS error |
| 21:13:42 | dbussink | the second time i run rake after that it, it does continue |
| 21:13:45 | ddub | but I fear that at most I would be able to make one incrementally better due to execution speed requirements |
| 21:13:58 | seydar | ddub: the ruby -> bytecode compiler, you mean? |
| 21:20:41 | dbussink | evan: http://gist.github.com/115065 |
| 21:21:00 | ddub | probaby ruby -> sexy |
| 21:21:07 | dbussink | evan: those are the different commands that are run the first compile and the second |
| 21:21:14 | ddub | where sexy should probably be written sexp, but thats how I pronounce it |
| 21:22:30 | seydar | ddub: but isn't the ruby->bytecode compiler an all-in-one program? |
| 21:24:21 | seydar | ddub: if you set up an hg/git repo, i'd be glad to help you out with it |
| 21:30:40 | evan | dbussink: hm.. |
| 21:30:52 | dbussink | evan: no segfaults anymore though |
| 21:30:52 | evan | dbussink: a bug in the rakefile i'm guessing. |
| 21:31:39 | evan | huzzah! |
| 21:31:52 | evan | ddub: what ideas do you have for improving on the compiler? |
| 21:32:53 | seydar | evan: if you could say hazzah to make it a palindrome... much appreciated |
| 21:33:27 | evan | hazzah! |
| 21:33:49 | rue | dbussink: Yeah, the macro fix is not defined for the configure phase or something, I did not look into it too far |
| 21:34:37 | boyscout | Finish teaching the JIT about all the instructions - 9209540 - Evan Phoenix |
| 21:39:56 | evan | wow |
| 21:40:06 | evan | i'm surprised how in sync using multiple spearsk in itunes is |
| 21:41:38 | seydar | ddub: so how do you want to change the compiler? |
| 21:45:14 | rue | evan: Like, stereo? |
| 21:45:26 | evan | quadero |
| 21:46:28 | boyscout | CI: 9209540 success. 2682 files, 10322 examples, 32867 expectations, 0 failures, 0 errors |
| 21:47:15 | dbussink | evan: more errors when running an extconf.rb: http://gist.github.com/115081 |
| 21:50:02 | rue | 'Das a nil |
| 21:52:10 | rue | dbussink: What does this look like in frames 1/2? |
| 21:52:50 | evan | um. |
| 21:53:19 | rue | Presumably there is a bound_method_ |
| 21:53:19 | evan | why is this nil... |
| 21:53:30 | evan | well, this should not be nil. |
| 21:54:25 | evan | dbussink: i need to know what you ran to get to that point |
| 21:55:46 | dbussink | evan: any extconf.rb from binary extensions seems to be triggering it |
| 21:55:51 | evan | dbussink: also |
| 21:55:57 | evan | i need you to get a ruby backtrace |
| 21:56:00 | dbussink | tested with some DO gems, but also with for example ruby-pg |
| 21:56:10 | evan | to up to a frame with a CallFrame |
| 21:56:11 | evan | and run |
| 21:56:17 | evan | p call_frame->print_backtrace(state) |
| 21:56:50 | evan | and I need the whole gdb backtrace |
| 21:56:55 | dbussink | evan: updated the gist: http://gist.github.com/115081 |
| 21:57:20 | evan | primarly |
| 21:57:21 | seydar | peaces |
| 21:57:32 | evan | how the fuck did a Proc get created without block_ set. |
| 21:57:59 | evan | BLAH |
| 21:58:00 | evan | fuck. |
| 21:58:24 | evan | rue: I guess i presume you meant there is ONLY a bound_method_ |
| 21:58:29 | evan | which I didn't grok. |
| 21:58:32 | evan | ok, one sec. |
| 21:58:34 | rue | Yes, sorry |
| 21:58:44 | rue | Which it probably should not have? |
| 21:59:12 | rue | bound_method_ is for Method only, right? |
| 21:59:16 | evan | yeah |
| 21:59:20 | evan | this is Proc having to be overloaded |
| 21:59:23 | evan | i did a refactoring of Proc |
| 21:59:29 | evan | and must have screwed this up |
| 21:59:30 | evan | one sec. |
| 21:59:34 | evan | it's just missing an extra check. |
| 22:00:02 | evan | hm. |
| 22:00:12 | evan | i must have screwed up the merge.... |
| 22:00:18 | evan | because I did fix this... |
| 22:09:30 | dbussink | evan: am i being annoying? :P |
| 22:09:35 | evan | nope |
| 22:09:42 | evan | i'm annoyed I reintroduced this bug. |
| 22:10:44 | evan | ok, incoming. |
| 22:10:56 | boyscout | Fix Method objects being used as blocks - e60c69b - Evan Phoenix |
| 22:11:13 | evan | dbussink: please to use issues on GH though |
| 22:11:20 | evan | it's easier to track these longterm |
| 22:11:28 | evan | and I can close them via commit then. |
| 22:11:37 | evan | please do use, rather. |
| 22:11:38 | dbussink | evan: yeah, ok, will do next time |
| 22:12:04 | dbussink | are these call_frame tricks etc. on the wiki too? |
| 22:12:11 | dbussink | so people can use that when reporting bugs? |
| 22:12:26 | evan | what wiki? |
| 22:12:32 | evan | we have a wiki? |
| 22:12:39 | dbussink | LH pages probably |
| 22:12:47 | dbussink | or is stuff moved to github wiki already? |
| 22:12:58 | evan | we've never used the GH wiki |
| 22:12:58 | brixen | stuff is/should be in /doc in the repo |
| 22:13:02 | evan | as far as I know. |
| 22:13:18 | brixen | we aren't going to use a wiki |
| 22:14:40 | dbussink | ok, well, main thing is that these debug tricks are very handy to have written down somewhere |
| 22:15:29 | brixen | we should make rbt work from gdb again |
| 22:15:40 | brixen | dbussink: /doc/debugging.txt |
| 22:15:50 | brixen | it's a bit dated, but you could update it |
| 22:16:14 | dbussink | how about doing something with catching a segfault and printing debugging instructions? |
| 22:16:27 | dbussink | would that be a useful tool or to hard to do properly? |
| 22:16:39 | evan | well |
| 22:16:39 | evan | hm. |
| 22:16:45 | evan | we could install a SIGSEGV handler |
| 22:16:59 | evan | to try and handle and display backtraces |
| 22:17:00 | boyscout | CI: e60c69b success. 2682 files, 10322 examples, 32867 expectations, 0 failures, 0 errors |
| 22:17:58 | dbussink | evan: i think it would greatly help people on reporting bugs |
| 22:19:05 | evan | I can add one |
| 22:19:12 | evan | but it will fail sometimes |
| 22:19:25 | evan | i'll go ahead and do it. |
| 22:19:46 | evan | hm.. how to get the most recent CallFrame though... |
| 22:34:10 | dbussink | brixen: still doing capi function requests? :P |
| 22:39:38 | brixen | dbussink: sure |
| 22:39:58 | dbussink | brixen: rb_exc_raise seems to be missing (throws the passed exception) |
| 22:40:25 | brixen | k |
| 22:40:40 | brixen | what ext are you testing? |
| 22:41:56 | evan | i still need to do those things that EM is missing |
| 22:41:58 | evan | so we can run thin |
| 22:42:17 | macournoyer | yeaaaaaaaah! |
| 22:42:26 | evan | :D |
| 22:42:30 | macournoyer | nice work! |
| 22:42:31 | dbussink | brixen: trying to get a somewhat a sane exception hierarchy for DO |
| 22:42:38 | dbussink | instead of just one type of exceptions :) |
| 22:42:40 | slava | hi evan |
| 22:42:49 | evan | dbussink: any functions you are missing |
| 22:42:54 | evan | throw them in GH issues |
| 22:43:07 | dbussink | evan: hehe, yeah, i get it :P |
| 22:43:07 | evan | since we can easily close them with commits |
| 22:43:14 | evan | :D |
| 22:43:19 | evan | i just don't want to forget! |
| 22:43:27 | evan | my dynamic memory sucks. |
| 22:43:49 | macournoyer | move it to the mature generation |
| 22:44:13 | evan | fate dealt me a highly reliable static mapping memory |
| 22:44:15 | evan | but thats about it. |
| 22:44:35 | evan | the layout of every home/school/mall i've been to? |
| 22:44:36 | evan | check, got that. |
| 22:44:41 | dbussink | made one, specially for you :) |
| 22:44:51 | evan | my wife's phone number though? |
| 22:44:52 | evan | nope. |
| 22:44:53 | evan | not in there. |
| 22:44:54 | evan | sadly. |
| 22:45:01 | evan | dbussink: yay! |
| 22:45:03 | dbussink | evan: ah, yeah, the i'm there for the first time and know the way back exactly? |
| 22:45:03 | macournoyer | haha |
| 22:45:16 | evan | dbussink: yep |
| 22:45:24 | evan | i can navigate directly to the pretzel stand! |
| 22:45:31 | evan | or the bathrooms |
| 22:45:38 | evan | or the principals office |
| 22:46:27 | dbussink | they redid a lot in my old high school, so i would probably be lost anyway now |
| 22:47:47 | evan | during my 10 year reunion |
| 22:47:53 | evan | i wandered around my high school illegally |
| 22:48:00 | evan | it was pretty much how I left it |
| 22:48:44 | dbussink | they rebuilt a whole bunch of stuff in the two years after i've left, so a lot changed, felt a bit weird actually |
| 22:48:54 | evan | i'll bet. |
| 22:50:14 | evan | ok, i need to get some fresh air |
| 22:50:20 | evan | then on to getting more of the JIT wired up. |
| 23:28:56 | tarcieri | this thread on Pythonic indentation is cracking me up |
| 23:29:33 | slava | hi tarcieri |
| 23:29:36 | tarcieri | sup |
| 23:30:46 | tarcieri | people just don't get why sticking pythonic indent blocks in expressions is... very hard |
| 23:31:38 | tarcieri | it took me quite awhile to understand too |
| 23:31:40 | tarcieri | I guess |
| 23:36:02 | evan | tarcieri: i hear you're giving a talk on reia? |
| 23:47:01 | tarcieri | evan: I gave one at Erlang Factory... giving another one tonight for the local Ruby group |
| 23:47:16 | evan | yep, i saw chad's tweet. |
| 23:47:26 | tarcieri | orly |
| 23:47:27 | tarcieri | heh |
| 23:47:34 | evan | too bad it's not taped |
| 23:47:36 | tarcieri | crazy |
| 23:47:36 | evan | i'd love to hear it. |
| 23:47:57 | tarcieri | the Erlang Factory one will be online soon, hopefully |
| 23:48:06 | tarcieri | video, that is |
| 23:48:16 | evan | cool |
| 23:48:37 | tarcieri | heh, haven't seen Chad Fowler at our Ruby group here in like... years |
| 23:49:07 | evan | his tweet made it sound that way, yeah :D |
| 23:50:17 | tarcieri | it was crazy when like... we had Chad Fowler and Ara Howard attending regularly |
| 23:50:56 | evan | ara doesn't go anymore? |
| 23:51:02 | evan | i haven't seen him in a while |
| 23:51:17 | tarcieri | actually he presented at the last one |
| 23:51:28 | tarcieri | but he has some scheduling conflict normally I guess |
| 23:51:37 | evan | ah |
| 23:54:36 | slava | tarcieri: are there any projects using reia yet? |
| 23:56:11 | tarcieri | slava: Ryan... a web framework |