Show enters and exits. Hide enters and exits.
| 00:01:23 | BrianRice-work | dylan/slate stick with linear ordering. slate modified this to allow per-type linearization of all supertypes at type definition time |
| 00:02:17 | evan | slava: so given to unrelated classes, how do you pick which one goes first? |
| 00:02:19 | slava | in factor there's no ordering among the superclasses of a class though |
| 00:02:54 | slava | evan: if they're unrelated, it uses a tie breaker (class name and meta class type) |
| 00:03:24 | evan | so is the bug because sometimes the ordering is different based on who created the generic word? |
| 00:06:29 | evan | hm, we should be sure that rubinius works with sinatra 1.0 |
| 00:07:01 | brixen | yah |
| 00:09:46 | binary42 | would test it on the sinatra app they are working on right now but the code is written for 1.9. |
| 00:10:19 | evan | thats too bad. |
| 00:10:27 | evan | what 1.9 stuff do you use? |
| 00:11:00 | ohdouhr | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 00:11:00 | ohdouhr | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 00:11:00 | ohdouhr | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 00:11:03 | binary42 | Fibers, new symbol hash key syntax, blocks with block args mostly. |
| 00:11:10 | brixen | rspec's handling of shared specs is odd |
| 00:11:20 | evan | oh, fibers |
| 00:11:25 | evan | how are you using them? |
| 00:11:29 | evan | i mean, whats the workflow |
| 00:11:50 | binary42 | Well, the first place they are used is in FiberSpawn mode for Rainbows. |
| 00:12:03 | slava | how does MRI do fibers? |
| 00:12:24 | binary42 | Then I also use them for pausing execution if a rendering job is synchronous. |
| 00:12:37 | binary42 | The rendering is done in another process and this is just a web api. |
| 00:12:37 | slava | I'd switch stacks from assembly but they're too pussy so how do they do it from C? |
| 00:12:47 | binary42 | But the whole rendering system is event based. |
| 00:12:56 | binary42 | slava: ucontex in 1.9 |
| 00:13:05 | slava | ah |
| 00:13:15 | binary42 | in 1.8 people have shim libraries that sleep regular green threads which is done with memcpy. |
| 00:13:28 | binary42 | 1.8 fibers == mostly useless. |
| 00:13:30 | evan | well, not just ucontext |
| 00:13:34 | evan | ucontext is not nearly enough |
| 00:13:37 | evan | it uses stack copying too. |
| 00:13:41 | slava | you have to allocate a stack too |
| 00:13:42 | binary42 | evan: Not at all. |
| 00:13:50 | evan | binary42: yeah, bigtime. |
| 00:13:53 | binary42 | slava: Yeah. It's a 4k stack. |
| 00:13:56 | evan | useless you use makecontext() |
| 00:14:00 | evan | which it doesn't appear to |
| 00:14:27 | binary42 | evan: It didn't but I talked to koichi about this and he has worked on it. |
| 00:14:29 | evan | it appears to still use setjmp/longjmp also, not ucontext |
| 00:14:43 | binary42 | evan: Which head are you on? |
| 00:14:53 | evan | looking at an older 1.9 |
| 00:14:56 | binary42 | :-) |
| 00:14:58 | evan | let me look at trunk |
| 00:15:32 | binary42 | Regardless, ucontext isn't perfect either but it's hell-a better than copying stacks. |
| 00:15:50 | evan | well, again, it's not ucontext |
| 00:15:57 | evan | it's allocate seperate stacks |
| 00:16:00 | evan | you can do that with setjmp. |
| 00:16:09 | slava | setjmp saves and restores registers |
| 00:16:15 | slava | not the stack contents |
| 00:16:24 | evan | le sigh. |
| 00:16:25 | evan | i know. |
| 00:16:38 | slava | oh, I was talking to binary42 |
| 00:16:44 | evan | i mean that you can use the heap stacks method with just setjmp |
| 00:16:46 | binary42 | Right. The problem with setjmp is you can't guarantee w/o reverse engineering where in the struct each register is. |
| 00:16:47 | evan | gnu pth does it. |
| 00:17:04 | evan | binary42: on 1.9 trunk |
| 00:17:07 | slava | binary42: ucontext layouts aren't portable either |
| 00:17:08 | binary42 | So ucontext at least exposes the register layout. |
| 00:17:11 | evan | kendall :: svn/ruby-trunk » ack makecontext |
| 00:17:12 | evan | kendall :: svn/ruby-trunk » |
| 00:17:16 | binary42 | slava: More portable. |
| 00:17:28 | binary42 | 1.9 reverts to copying if it can't find a suitable ucontext implementation. |
| 00:17:32 | evan | so it's still stack copying. |
| 00:18:10 | slava | I count 13 implementations of #define UAP_STACK_POINTER in factor's VM :) |
| 00:18:17 | slava | one for each platform. |
| 00:18:24 | evan | no surprise! |
| 00:19:55 | evan | ucontext doesn't expose the stack pointer in the same place |
| 00:19:55 | slava | if that's considered portable, then I dunno what to say :) |
| 00:19:55 | evan | each platform is seperate. |
| 00:19:55 | binary42 | evan: Regardless... It doesn't matter how it does it. I switch once per block which is a rare case. |
| 00:19:55 | evan | sure |
| 00:19:55 | evan | but what is the workflow |
| 00:19:55 | evan | i'm curious why you needed fibers |
| 00:19:55 | evan | implementation aside. |
| 00:20:42 | binary42 | Because how else am I going to pause sync code and do other things? |
| 00:20:47 | binary42 | i.e. it's a rack stack. |
| 00:20:59 | binary42 | Threads don't work here. |
| 00:21:12 | binary42 | Or at least if you think stack copying is bad, threads are 2x worse here. |
| 00:21:49 | ezmobius | evan any chance of rbx getting a decent Fiber impl? |
| 00:21:56 | evan | when is it unpaused? |
| 00:22:11 | evan | ezmobius: we'll probably use heap stacks when we get around to it |
| 00:22:15 | evan | so yeah, no stack copying. |
| 00:23:01 | ezmobius | cool |
| 00:23:13 | ezmobius | i'd really love to be able to use fibers in 1.8 |
| 00:23:15 | binary42 | I just did over 1 million Fiber switches in 1.9 in 1.45 seconds. |
| 00:23:21 | binary42 | So I'd say it is fast enough. |
| 00:23:23 | ezmobius | they make evented code libraries so much more palatable |
| 00:23:42 | evan | binary42: why not use continuations in 1.8? |
| 00:23:50 | rue | Ew |
| 00:24:05 | binary42 | evan: slow. In that case you have to copy because of how continuations work. |
| 00:24:11 | binary42 | I don't need delimited control. |
| 00:24:49 | evan | i think you guys are daring me to implement Fibers. |
| 00:25:02 | binary42 | evan: I can't verify how 1.9 is working right now but it is pretty obvious that Fiber in 1.9 is many many times faster than callcc. |
| 00:25:04 | rue | Naw, you would not dare anyway |
| 00:25:12 | evan | after yesterdays OS#each_object support |
| 00:25:19 | evan | i'm flush with confidence. |
| 00:25:26 | slava | heh |
| 00:25:36 | binary42 | evan: Well, I'd just vote for you to implement 1.9 and say hell with 1.8. I know the argument but that's my position is all. |
| 00:25:54 | evan | and I know it's wrong, yes. |
| 00:25:55 | evan | :) |
| 00:27:03 | binary42 | Anyway... fast fibers are possible and portable to the practical platforms. Other platforms can be supported with simple fallback code that's already used. |
| 00:27:27 | binary42 | So I see no reason to use them to enhance the organization of asynchronous systems that have to deal with synchronous parts. |
| 00:27:29 | evan | binary42: when is the sync code you have "paused" unpaused? |
| 00:27:46 | slava | evan: I dare you to implement fibers |
| 00:27:56 | binary42 | evan: When other work is done, aka. a fiber resumes. |
| 00:28:47 | binary42 | So lets say I have an asynchronous service that I need to present optionally as a synchronous one. So instead of a post-back I literally just render back. |
| 00:28:53 | evan | I suspect that you feel like Fibers are faster than Continuations probably because 1.9 is on the whole faster than 1.8 |
| 00:28:55 | binary42 | I could do this with a custom stack. |
| 00:28:58 | evan | because implementation wise |
| 00:29:03 | evan | they appear to be the same. |
| 00:29:07 | binary42 | But I'd like to use Rack + Sinatra as a lot of the code is pretty simple. |
| 00:29:27 | binary42 | evan: No. On the same process Fibers are orders of magnitude faster. |
| 00:29:33 | binary42 | In 1.9 |
| 00:29:45 | evan | so you mean Fibers vs. Continuations in 1.9 |
| 00:29:46 | evan | ? |
| 00:29:49 | binary42 | Yes. |
| 00:29:53 | evan | well thats fucked. |
| 00:29:57 | evan | they must have really fucked something up then. |
| 00:30:03 | binary42 | How so? |
| 00:30:08 | evan | they should be the same speed. |
| 00:30:15 | binary42 | Continuations are slow in 1.9 like they are in 1.8. |
| 00:30:19 | binary42 | Not at all. |
| 00:30:22 | evan | unless i'm missing something. |
| 00:30:37 | binary42 | Delimited continuations require preservation of the original stack. |
| 00:30:57 | slava | why do oyu call them delimited continuations? |
| 00:31:07 | slava | delimited continuations are something elsea nd ruby doesn't have this feature |
| 00:31:19 | binary42 | slava: callcc is delimited in 1.8 and 1.9 AFACT. |
| 00:31:23 | binary42 | AFAICT* |
| 00:31:47 | binary42 | i.e. the stack frames are kept separate. Heap data will remain mutated of course. |
| 00:31:56 | binary42 | Multiple calls work the same etc.. |
| 00:32:02 | binary42 | Don't see how they aren't delimited. |
| 00:32:17 | slava | a delimited continuation is, essentially, a slice of the call stack |
| 00:32:44 | slava | half way between a function call and a full continuation |
| 00:32:48 | slava | you can 'return' from one, for instance |
| 00:33:07 | binary42 | slava: Maybe I have my terms wrong then but you can return multiple times from Ruby callcc. |
| 00:33:19 | slava | multi-shot continuation |
| 00:33:36 | binary42 | Okay. So it's a multi-shot then. :-) |
| 00:34:05 | binary42 | slava: So delimited means the stack under the continuation is mobile? |
| 00:34:21 | slava | yes |
| 00:34:41 | binary42 | I always thought it was the multi-return but this makes sense. Anyhow... the multi-return of callcc is the problem vs. fibers. |
| 00:34:44 | evan | hm |
| 00:34:50 | evan | i'll have to go through the 1.9 code |
| 00:35:04 | evan | because it appears that fibers call all the same stack copying code that continuations do |
| 00:35:24 | matthewd | Should ENOMEM cause a SIGSEGV, or be reported? Just worked out my ulimit was the cause of the SIGSEGV I was hitting running full.mspec. |
| 00:35:32 | binary42 | evan: It might be swapped out somehow but you might be right. I just remember 1.8 doing 1m thread copies per second. |
| 00:35:40 | evan | in fact, fiber_switch() even calls cont_restore_0(cont) |
| 00:35:44 | binary42 | evan: It might be the stack size is minimized. |
| 00:35:47 | evan | because a Fiber contains a continuation |
| 00:36:02 | binary42 | Since it knows only certain parts/sections need copied. |
| 00:36:06 | binary42 | Rather than the whole stack. |
| 00:36:12 | evan | matthewd: thats a tough one |
| 00:36:20 | evan | because running out of stack usually causes a SIGSEGV |
| 00:36:32 | evan | ENOMEM is for when there is no more heap |
| 00:36:44 | binary42 | And there is a fast switcher in progress on two fronts that I know of but people don't want to merge because of the portability constraints. |
| 00:37:01 | evan | or, er, do you have a ulimit on the heap size? |
| 00:37:05 | evan | matthewd: ^^ |
| 00:37:10 | matthewd | Ah, okay. I'll admit I hadn't investigated... just assumed the SIGSEGV was the result of an unchecked malloc + use |
| 00:37:10 | binary42 | evan: Yeah. You have to mark the last page with mmap'ed stacks IIRC. |
| 00:37:17 | matthewd | ulimit -v 512000 |
| 00:37:31 | binary42 | Otherwise it's hard to detect overflows. |
| 00:37:38 | evan | not much I can do about that |
| 00:37:40 | evan | honestly. |
| 00:37:55 | binary42 | And when it does, stack growth is hard... |
| 00:37:57 | evan | there is almost no good recovery from ENOMEM |
| 00:37:59 | binary42 | Since you can't move. |
| 00:38:06 | binary42 | You can chain but that's in the hot path. |
| 00:38:26 | binary42 | evan: Mostly. I like how Erlang manages it. |
| 00:40:10 | evan | how do they? |
| 00:40:24 | evan | i wish that the Fiber/Continuation code in 1.9 wasn't so tangled |
| 00:40:27 | matthewd | evan: Fair enough... just thought I'd mention it, because it took me a bit to recognise the cause; normally JVM is the only thing that barfs on me for having it. |
| 00:40:28 | evan | so I could get to the bottom of this. |
| 00:40:43 | evan | matthewd: what were you running? |
| 00:40:54 | evan | i've been hunting memory leakes as of late |
| 00:42:06 | evan | maybe there is another. |
| 00:42:06 | evan | that i haven't exercised in valgrind |
| 00:43:02 | binary42 | evan: Literally process killing but the supervisors can respawn. It has more to do with isolation. |
| 00:43:59 | evan | i'm... not even sure what that means in the context of stacks |
| 00:45:08 | matthewd | evan: It was a clean checkout, ./configure, rake... specifically, dying during bin/mspec ci -B full, maybe about 40% through, judging by dots. But that doesn't sound like useful information... it's entirely reproducible... can I extract more interesting facts? |
| 00:45:22 | binary42 | evan: Each process basically is a coroutine. |
| 00:45:37 | evan | matthewd: hm, |
| 00:45:38 | evan | yeah |
| 00:46:01 | binary42 | http://www.atdot.net/~ko1/activities/rubyconf2009_ko1_pub.pdf |
| 00:46:14 | evan | matthewd: if you could, do 'rake vm:clean; rake build DEV=1; bin/mspec ci -B full --gdb' |
| 00:46:42 | evan | you should be able some kind of backtrace |
| 00:46:45 | evan | which should help. |
| 00:47:01 | evan | also, identify that it did use all 512M of heap |
| 00:47:07 | evan | so we're sure thats the case |
| 00:47:59 | rue | $ rake build:debug |
| 00:48:38 | binary42 | evan: The 1.9.2 speed up was impressive as shown. Only the cost of 3 proc invocations now. Rubinius could do better with LLVM generating the context switch code. |
| 00:48:52 | binary42 | (i.e. no signal proc mask setting) |
| 00:49:38 | evan | what is the cost of 3 proc invocations |
| 00:49:39 | evan | ? |
| 00:49:46 | binary42 | It's in the slides I linked. |
| 00:50:11 | matthewd | Okay, I'll do that. The slight backtrace I got before sounded like the GC mark phase... ImmixGC saw_object, and running with --gdb, it died in melbourne. |
| 00:50:16 | binary42 | Past halfway if you want to skip scrolling. |
| 00:50:54 | binary42 | Page 38. |
| 00:51:13 | binary42 | (page 37 has the code run) |
| 00:51:28 | binary42 | Micro bench of course but it's relevant to switch cost. |
| 00:52:35 | evan | hm |
| 00:52:40 | evan | i guess that code hasn't landed in trunk yet. |
| 00:52:41 | evan | i'm assuming. |
| 00:54:01 | binary42 | evan: I've seen a boost in 1.9 trunk but it might just be copy region limitations since a fiber only needs to copy it's own stack since it can't return. |
| 00:54:19 | evan | where do you see that in cont.c? |
| 00:54:21 | binary42 | Which is a big boost as long as the stack size starts small. |
| 00:54:28 | binary42 | evan: I am guessing. I don't see it. |
| 00:54:36 | binary42 | I just know from benchmarks. |
| 00:54:39 | evan | so it could be something completely different? |
| 00:54:45 | binary42 | Possible. |
| 00:55:09 | binary42 | I've bugged him multiple times about fibers and they've improved. |
| 00:56:07 | matthewd | evan: Running under gdb with DEV=1, I get "LLVM ERROR: Allocation failed when allocating new memory in the JIT" (and it exits) :P |
| 00:56:20 | evan | thats fun. |
| 00:56:23 | matthewd | Checking that's consistent... |
| 00:56:24 | evan | never seen that before. |
| 00:56:36 | binary42 | evan: If you want Fiber emulation on 1.8 for comparison check out this: http://gist.github.com/4631 |
| 00:56:47 | binary42 | Of course the fast patch is here: http://timetobleed.com/fibers-implemented-for-ruby-1867/ |
| 00:57:15 | evan | geez |
| 00:57:19 | evan | that line 16 is a killer. |
| 00:57:21 | matthewd | I guess in theory, I should be able to affect where we run out of memory by tweaking the limit, if it helps |
| 00:57:47 | evan | binary42: right, i've seen that patch |
| 00:57:50 | evan | that uses heap stacks. |
| 00:57:51 | binary42 | =D tmm1 will acknowledge it is slow but I'm not sure there is an easy way around it. |
| 00:58:13 | binary42 | evan: Yeah. I've been talking to them a very long time about those patches. |
| 00:58:13 | evan | by killer I mean silly. |
| 00:58:20 | evan | [ *anything ] |
| 00:58:22 | evan | is pretty dumb. |
| 00:58:32 | evan | anyway |
| 00:58:33 | ezmobius | evan i dare you to implement fibers |
| 00:58:43 | ezmobius | double dog dare |
| 00:58:45 | evan | well lets see |
| 00:58:52 | binary42 | evan: Not so much actually. there are simple edge cases handled by that. |
| 00:58:56 | evan | i'll bet I could do a quick impl that was platform guarded. |
| 00:59:05 | evan | binary42: did he mean |
| 00:59:07 | matthewd | evan: Not consistent. This time I got "[BUG] Uncaught C++ internal exception". |
| 00:59:16 | evan | Array(yield(...)) |
| 00:59:16 | evan | ? |
| 00:59:16 | binary42 | evan: I'd be happy with a non-portable method for starters. |
| 00:59:37 | evan | matthewd: weird. |
| 00:59:43 | evan | can you remove the ulimit and see if it works? |
| 00:59:48 | binary42 | evan: Yeah. I guess in 1.8 it's similar. |
| 00:59:50 | evan | i'd like to be sure we're seeing the effects of the ulimit. |
| 01:00:04 | binary42 | But in 1.9 you collapse nil and such which is a good thing. |
| 01:00:04 | evan | people have just the strangest style imho. |
| 01:00:28 | binary42 | Array() is pretty ugly you have to admit. ;-) |
| 01:00:31 | evan | it's pretty hard to read that line 16 and know what it does |
| 01:00:43 | evan | it's about 10x less ugly than [*anything] |
| 01:00:47 | matthewd | evan: Yeah, I did that... that's how I decided that was the cause. ulimit -v unlimited, and it runs through happily. |
| 01:00:55 | evan | matthewd: hm. ok. |
| 01:01:07 | evan | well, file a ticket with some details |
| 01:01:10 | evan | so we don't forget about it |
| 01:01:12 | binary42 | Actually I don't find it confusing but maybe i'm just too used to it. |
| 01:01:20 | evan | binary42: sounds like it. |
| 01:01:22 | evan | :) |
| 01:01:51 | evan | people need to stop being afraid of an extra conditional |
| 01:01:57 | evan | it can make code 10x easier to understand. |
| 01:02:02 | evan | anyway |
| 01:02:06 | evan | style debates never end. |
| 01:02:12 | evan | back to real work. |
| 01:03:50 | evan | on the fibers talk |
| 01:04:05 | binary42 | evan: Just checked... [* ... ] is quite a bit faster than Array() |
| 01:04:06 | evan | i wonder if makecontext works on 10.6 |
| 01:04:15 | binary42 | I think it's the avoidance of dispatch in this case. |
| 01:04:18 | evan | sorry |
| 01:04:27 | binary42 | In 1.9 at least. |
| 01:04:33 | evan | but thats a ridicilous argument. |
| 01:04:39 | binary42 | evan: How so? |
| 01:04:41 | evan | for this. |
| 01:04:59 | evan | i have a hard time betting that that line is a bottleneck. |
| 01:04:59 | binary42 | Context switch speed requiring an extra dispatch? |
| 01:05:12 | evan | anyway, i'm not going to debate this. |
| 01:05:15 | binary42 | :-) |
| 01:05:18 | evan | it will only ruin my friday |
| 01:05:49 | binary42 | Cool... anyway... ping me if you want me to run or talk about Fibers. =D |
| 01:06:15 | evan | we can discuss fibers |
| 01:06:38 | evan | i was just pulling myself out of a silly style debate that I put myself in. |
| 01:06:42 | binary42 | evan: Do you imagine a better workflow for me that won't use fibers? |
| 01:06:53 | binary42 | Or coroutine-ish stuff. |
| 01:07:01 | binary42 | I'm open to suggestions. |
| 01:07:16 | evan | why is your thing "sync"? |
| 01:07:24 | evan | why not break it up into 2 distinct phases |
| 01:07:35 | evan | that are methods on an object that can be called at different times. |
| 01:07:36 | binary42 | Because rack and sinatra and 90% of the rest of the web is sync (aka HTTP). |
| 01:08:02 | evan | thats beside the ponit |
| 01:08:07 | evan | because you want your thing to be NOT sync |
| 01:08:07 | binary42 | I have a request come into Ruby and a response go out. Now I could dump Rack and stop using sinatra and write everything from scratch. |
| 01:08:27 | evan | i still don't see when your sync thing is unpaused. |
| 01:08:32 | evan | perhaps thats the thing i'm missing. |
| 01:08:45 | binary42 | Right. Being sync is lame when I am basically a web interface to a complex async rendering engine. |
| 01:10:04 | binary42 | So I get the request. It posts a job. the job is pushed to a queue which is worked on by a pool of workers. They push it back asynchronously because I need to maximize concurrency here (lots of IO blocks during rendering). Now how to I connect that response to the result of the orig. request? |
| 01:10:35 | binary42 | If I block (Fiber.yield) on the async push, then I can Fiber#resume when something comes back. |
| 01:10:44 | evan | so you "pause" the rack request |
| 01:10:56 | binary42 | During that time the server can take more connections and keep work flowing w/o hanging everything behind one request. |
| 01:10:58 | evan | and it's "unpaused" in the other thread |
| 01:11:00 | evan | when the data is ready? |
| 01:11:04 | binary42 | Yeah. |
| 01:11:37 | evan | does rack/sinatra spin up a thread per request? |
| 01:11:42 | evan | or does it do everything in the one thread |
| 01:11:51 | evan | i don't know them well enough to know |
| 01:11:57 | binary42 | Of course this is wrapped up so it looks like regular IO code and will run fine in regular ruby but to make it scale nicer I put fibers under it. |
| 01:12:12 | binary42 | The app server spins up a fiber, yes. |
| 01:12:47 | binary42 | There are no threads though. |
| 01:12:54 | binary42 | Well, just the main thread. |
| 01:12:57 | evan | sinatra uses fibers internally?! |
| 01:13:01 | binary42 | evan: Nope. |
| 01:13:08 | yakischloba | evan: hes using his own modified thing |
| 01:13:08 | evan | thats what i mean |
| 01:13:09 | binary42 | That's why this works. |
| 01:13:15 | binary42 | It doesn't need to know about it. |
| 01:13:18 | evan | so you've got your own version of sinatra? |
| 01:13:20 | binary42 | It's why fibers are nice. |
| 01:13:36 | binary42 | Nope. I pause the entire fiber which is the rack exec stack wrapped up. |
| 01:13:48 | evan | ok, so yakischloba is wrong. |
| 01:13:48 | evan | ok |
| 01:13:53 | binary42 | It's a coroutine so code in it doesn't really need to know because it's like any other stack. |
| 01:13:56 | binary42 | Yeah. |
| 01:14:03 | evan | the fiber usage is entirely in code that is yours |
| 01:14:08 | evan | that sinatra calls |
| 01:14:21 | binary42 | yakischloba: I had a rack extension at first but got frustrated by that so I use fibers now. |
| 01:14:33 | evan | so |
| 01:14:38 | yakischloba | right. and your fibers are resumed by what? EM? |
| 01:14:39 | binary42 | evan: Nah. Fiber calls sinatra but close. |
| 01:14:43 | evan | it seems to me that this wouldn't be concurrent at all |
| 01:14:56 | evan | because there is still just one fiber for the current rack request |
| 01:15:02 | evan | you can't get anything request into the system |
| 01:15:05 | binary42 | App server has a scheduler that knows about blocking IO. Not EM but it could be later. |
| 01:15:13 | evan | because you don't give control back to rack to go back and ask for another request |
| 01:15:23 | evan | wait |
| 01:15:26 | evan | now i'm so confused. |
| 01:15:41 | evan | so you have your own webserver |
| 01:15:41 | binary42 | evan: Yeah. It won't take anything new till it blocks or finishes. |
| 01:15:42 | evan | that uses fibers. |
| 01:15:53 | evan | that calls through rack to sinatra |
| 01:15:59 | binary42 | Which means the internals are very async to keep progress smooth. |
| 01:16:05 | evan | so if it's not concurrent |
| 01:16:12 | evan | why not use condition variable |
| 01:16:18 | binary42 | It's basic event design. i.e. you don't spin in a loop in javascript so I don't do that here either. |
| 01:16:21 | evan | to get data from the backtrace thread back to the webserver thread |
| 01:16:59 | binary42 | evan: first of all threads perform much worse here. |
| 01:17:08 | evan | you're already using a thread though |
| 01:17:09 | binary42 | Esp when I have more than 100 connections. |
| 01:17:11 | evan | you just said |
| 01:17:14 | binary42 | Fibers do fine here. |
| 01:17:17 | yakischloba | stays out of it |
| 01:17:21 | evan | i don't mean a thread per request |
| 01:17:25 | evan | i still don't get the architecture |
| 01:17:30 | evan | i don't see what fibers are affording you |
| 01:17:41 | evan | because it feels like every request is still sync |
| 01:17:47 | binary42 | Second of all, a condition var doesn't help since I'd have to modify the app server which gives me fibers. I did not write it. |
| 01:17:55 | evan | and one must complete fully before the next one can come in |
| 01:18:02 | binary42 | So it basically turns the system into spaghetti. |
| 01:18:20 | binary42 | Here I have no dependence between each layer. Just consistent APIs. |
| 01:18:25 | evan | so the app server is some internal web server you have? |
| 01:18:33 | binary42 | Nope. It's rainbows. |
| 01:18:45 | evan | hm, never heard of it. |
| 01:19:03 | binary42 | http://rainbows.rubyforge.org/ |
| 01:19:09 | binary42 | Based on unicorn. |
| 01:19:27 | binary42 | But it handles long polling/slow connections while unicorn can't really do it. |
| 01:19:44 | evan | you're using fiberpool or fiberspawn? |
| 01:20:01 | binary42 | fiberspawn right now. |
| 01:20:24 | binary42 | fiber spin up time is not my bottleneck so fiberspawn is more flexible. |
| 01:20:45 | binary42 | (i.e. I can set a high connection limit w/o incurring memory overhead before I actually need it) |
| 01:22:36 | binary42 | btw, I think rubinius fails to build with 1.9 set as ruby. I think it's just the fact that they removed '.' in $LOAD_PATH. |
| 01:22:45 | binary42 | no such file to load -- rakelib/git |
| 01:23:18 | binary42 | Running with RUBYOPT="-I." fixes it. |
| 01:23:51 | matthewd | evan: Anything else I should add while I have scrollback etc? http://github.com/evanphx/rubinius/issues/issue/178 |
| 01:24:08 | evan | binary42: you need to use 1.8 to build rubinius |
| 01:24:20 | evan | we don't support building with 1.9 |
| 01:24:26 | evan | no one has submitted patches to fix it. |
| 01:24:52 | evan | matthewd: hm, no, i think thats fine. |
| 01:24:54 | evan | ok |
| 01:24:58 | binary42 | evan: Ah. Well, it's building fine for me with the workaround I mentioned. Not done but I'll let you know if it finishes. |
| 01:25:03 | evan | well, i don't have time to figure out how rainbows works |
| 01:25:03 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:03 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:03 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:04 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:06 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:07 | evan | so i'm going to have to just leave it for now. |
| 01:25:08 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:10 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:12 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:14 | lywlw | VERSION irc.gnaa.fr #gnaa GNAA > j00 |
| 01:25:44 | binary42 | evan: np. I'll write something up later. I'm not in a rush since I'm on 1.9 these days. I'll submit a 1.9 build patch if you want though. |
| 01:25:55 | evan | sure |
| 01:26:27 | brixen | afaik, dwaite has built with 1.9 |
| 01:26:48 | brixen | RUBYLIB=. is the typical way to handle 1.9's braindead #require |
| 01:26:48 | evan | i haven't yet heard of anyone doing it |
| 01:26:53 | binary42 | It seems to be just a load path issue. Right. |
| 01:26:53 | evan | so i still consider it not supported. |
| 01:27:06 | binary42 | brixen: I actually prefer w/o . |
| 01:27:07 | brixen | we can add explicit paths to the Rakefile requires |
| 01:27:17 | brixen | binary42: -I. is the same |
| 01:27:18 | binary42 | Minimizing unneeded filesystem stats is good. |
| 01:27:20 | evan | or have Rakefile put it back |
| 01:27:35 | brixen | binary42: oh, I misunderstood |
| 01:27:39 | binary42 | brixen: Yeah. I tend to use RUBYOPT because I'll pass other options in from time to time like -w |
| 01:28:31 | brixen | I think checking one more dir (ie .) is not a huge filesystem stat load |
| 01:28:34 | binary42 | Should be easy to add in the Rakefile. One line check for . or possibly just inserting File.dirname(__FILE__) regardless. |
| 01:28:50 | brixen | yeah, wasn't sure which approach to use |
| 01:29:27 | binary42 | brixen: Possibly. I haven't measured but I plan on minimizing $: as often as possible. |
| 01:29:34 | evan | lets be sure to throw [ *[*thing, a], b] in there |
| 01:29:45 | evan | so we can make it really new. |
| 01:29:52 | binary42 | Well, considering pwd can change... I'd use File.dirname(__FILE__). |
| 01:30:14 | binary42 | evan: Supporting 1.9 splats? |
| 01:30:14 | rue | dbussink was working on 1.9 build |
| 01:30:48 | binary42 | Well, I won't duplicate any work but this is one line if you guys want to add it. |
| 01:31:06 | binary42 | no such file to load -- ext/digest/sha1/sha1 |
| 01:31:19 | binary42 | Looks like a few other things fail still but it got relatively far. |
| 01:32:00 | binary42 | Hmm. I'll check back later. |
| 01:32:09 | binary42 | I need to get some dinner here soon. |
| 01:33:21 | brixen | there is this issue http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/27522 |
| 01:35:07 | maharg | 1.9 doesn't have . in LOAD_PATH? Wtf |
| 01:35:51 | matthewd | So, I tried building Johnson with rbx.. complaints about missing ruby_errinfo lead me to recent IRC logs where, in reference to rice, evan said "eh gads. it reads ruby_errinfo directly? i hope it doesn't write it directly." |
| 01:36:00 | evan | wow |
| 01:36:02 | evan | you're brave. |
| 01:36:11 | matthewd | And, um... well... :P |
| 01:37:03 | evan | yeah, we need to add ruby_errinfo to the capi |
| 01:37:40 | matthewd | Yeah... Johnson writes it. |
| 01:37:54 | evan | wow. |
| 01:37:58 | evan | we.. |
| 01:38:00 | evan | can't support that. |
| 01:38:13 | matthewd | But looking back at the code, I'm not sure it actually achieves anything. |
| 01:38:33 | maharg | speaking of web servers, btw, I put in a bug report about mongrel under rbx locking rubinius up completely once it passes about 4200 requests (no matter how complex those requests are). It looks like a semaphore deadlock in Channel stuff |
| 01:39:19 | evan | maharg: yeah, i've been looking into it. |
| 01:39:26 | matthewd | We read ruby_errinfo before a call to rb_protect, then (if status indicates a jump) grab the resultant errinfo, and put the original one back. |
| 01:39:29 | evan | Socket is kind of a mess. |
| 01:39:35 | evan | it uses FFI for accept and bunch of things |
| 01:39:37 | evan | which block hard |
| 01:39:41 | evan | so i'm fixing that. |
| 01:40:02 | evan | it's not a mess, thats the wrong word. but it can't use FFI for blocking IO calls. |
| 01:42:14 | evan | matthewd: i've got no way to form some C code that will intercept "ruby_errinfo =" |
| 01:42:19 | evan | so i just don't tihnk I can support it. |
| 01:43:08 | brixen | maharg: yeah http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/24155?help-en |
| 01:43:42 | matthewd | evan: Yeah.. I'll investigate, but I now suspect setting it isn't actually achieving anything anyway. |
| 01:45:54 | brixen | maharg: but it's apparently only a security risk for #require but not #load |
| 01:45:57 | brixen | maharg: http://gist.github.com/290334 |
| 01:46:05 | brixen | I need to file a ticket on that |
| 01:46:20 | brixen | I discovered it rewriting the #require/#load specs |
| 01:56:36 | evan | zoinks |
| 01:56:40 | evan | /usr/include/ucontext.h:42:2: error: #error ucontext routines are deprecated, and require _XOPEN_SOURCE to be defined |
| 02:05:41 | maharg | evan: cool, thanks |
| 02:06:51 | maharg | brixen: seriously, wtf. 1.9 gets more dumb every time I hear about one of its breaking changes. |
| 03:27:57 | rue | binary42: As I recall, the issue is that 1.9 first searches all $: for .rb files in sequence, and only then .<so ext> |
| 03:28:22 | rue | Unlike 1.8, which searches .rb, then .so for all |
| 03:28:23 | binary42 | Ah didn't know that. |
| 03:28:51 | binary42 | 1.9 has relative require mechanisms so it's less of a problem. |
| 03:30:01 | binary42 | (aka. see Kernel#require_relative) |
| 03:30:10 | binary42 | Which is much better for than using -I. |
| 03:30:28 | binary42 | Because then those files are always fast because there is no $: scanning. |
| 03:30:37 | rue | True |
| 03:30:38 | binary42 | Relying on $: in the first place kind of sucks. |
| 03:30:56 | binary42 | Of course they didn't really make the transition clean. |
| 03:31:05 | binary42 | They could have done a little better. |
| 03:31:40 | rue | Slightly |
| 03:32:02 | rue | On the whole, I would have been satisfied with just not doing 1.8.8 |
| 03:32:20 | binary42 | I have mixed feelings on that still. |
| 03:32:40 | binary42 | First of all 1.9 is a bit faster so it made sense to use it. It's not the most mind blowing improvement but it's there. |
| 03:32:52 | binary42 | i.e. the first step doesn't have to be the last. |
| 03:33:32 | binary42 | The other part is that some things needed cleaner semantics. It feels odd coming from 1.8 but I like 1.9 after using it awhile. |
| 03:33:51 | binary42 | Even little things like new syntax has helped keep my code easier to read. |
| 03:34:00 | binary42 | Encoding support is also huge. |
| 03:34:11 | binary42 | It's been sooo much easier to deal with complex text now. |
| 03:34:22 | binary42 | oniguruma as the default regexp is also super nice. |
| 03:34:24 | maharg | man I really haven't been paying attention. There's another "part way to 1.9" 1.8 release? Guh |
| 03:34:29 | binary42 | etc... it's tons of small things. |
| 03:34:44 | binary42 | And regarless of what the jruby guys say, I find generators useful. |
| 03:35:04 | binary42 | maharg: 1.8.8 is the final "bridge" release. |
| 03:35:16 | maharg | they really don't have any respect for the sanity of version numbers in MRI land, do they? |
| 03:35:22 | binary42 | Though I gave up on it when they broken to_ary in the 1_8 branch. |
| 03:35:37 | binary42 | 1_8 is defunct IMO. |
| 03:35:42 | rue | Which is just stupid since it is not fully backwards-compatible with 1.8.7 anyway |
| 03:35:58 | maharg | breaking changes in a third level version number is just so fundamentally wrong |
| 03:36:01 | binary42 | 1.8.7 was a mess we can all avoid talking about. |
| 03:36:25 | binary42 | Though if you are on 1.8 I'd use 1.8.7+REE patches. |
| 03:36:25 | maharg | complete language redesign in a second level version number is also insane |
| 03:36:45 | binary42 | 1.8.7 includes some nice things to make slightly more mordern Ruby a bit faster. |
| 03:38:12 | binary42 | Either way, I've seen plenty of benefit in 1.9 and core is going that way. Kicking and screaming is just delaying things not changing it. |
| 03:38:40 | binary42 | I'd almost suggest that 1.8 supporters should fork the language if they feel so strongly about avoiding 1.9 now. |
| 03:38:58 | Zoxc | doesn't see any reason to use 1.8, except for heroku |
| 03:39:04 | binary42 | 1.9 was moving way to much pre 1.9.2 + rubyspec work but I don't see that anymore. |
| 03:39:12 | maharg | to be perfectly blunt, part of my interest in other implementations comes from a complete and utter lack of trust in the MRI team to keep things sane |
| 03:39:18 | binary42 | Zoxc: Yeah. They are working on 1.9 support IIRC. Same with EY. |
| 03:40:10 | binary42 | maharg: I kind of thought the same thing 3 years ago with Rubinius. Not being done is understandable but it obviously isn't as easy as it looks. |
| 03:40:50 | maharg | whether I have to deal with the messes they've made now, I'd like a future without those messes being repeated and there's no sense of contrition about the fragmentation that's resulted from their boneheaded decisions. |
| 03:41:51 | binary42 | maharg: Yeah. Well, I'm just saying everyone I know has made a bonehead decision with implementation. |
| 03:42:00 | binary42 | They are all working on fixing it or recovering. |
| 03:43:12 | binary42 | I can point things out but it's not the past I care about anymore. It's today and tomorrow. |
| 03:44:19 | dxzhpvmm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 03:44:19 | dxzhpvmm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 03:44:19 | dxzhpvmm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 03:44:20 | dxzhpvmm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 03:44:22 | dxzhpvmm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 03:44:34 | binary42 | Ever implementation also has strengths and weaknesses. It's pretty awesome to have the opportunity to chose like this. |
| 03:44:43 | rue | I would agree to some degree that "they" do not really look like they have learned from the past, though. |
| 03:45:02 | binary42 | But it'd be nice if it were based on the emerging version of ruby rather than something historical. |
| 03:45:16 | binary42 | rue: Have you talked to them? |
| 03:45:21 | binary42 | Like Yugui? |
| 03:46:16 | binary42 | ruby-core isn't a fishbowl. Language barrier blah-blah-blah. If there is a problem still, point it out or help fix it. |
| 03:47:22 | binary42 | Anyway... I'm done for the day on this. I would continue talking but we all know this conversation so I'll save our time and just tell people to do what they think works. |
| 04:33:54 | repelcbn | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 04:33:55 | repelcbn | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 04:33:55 | repelcbn | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 04:33:56 | repelcbn | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 04:33:58 | repelcbn | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:39 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:39 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:39 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:40 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:40 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:40 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:40 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:41 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:42 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:43 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:44 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:45 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:46 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:47 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:48 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:49 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:50 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:51 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:52 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:53 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:54 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:55 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:56 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:57 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:58 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:15:59 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:00 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:01 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:02 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:03 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:04 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:05 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:06 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:07 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:08 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:09 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:10 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:11 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:12 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:13 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:14 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:15 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:16 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:17 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:18 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:19 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:20 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:21 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:22 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:23 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:24 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:25 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:26 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:27 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:28 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:29 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:30 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:31 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:32 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:33 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:34 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:35 | pugea | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:16:36 | mrvckuyurt | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:23:07 | kxcxd | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:23:07 | kxcxd | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:23:07 | kxcxd | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:23:08 | kxcxd | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:32 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:32 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:32 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:33 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:35 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:37 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:37 | cwx | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:37 | cwx | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:37 | cwx | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:38 | cwx | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:39 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:40 | cwx | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:41 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:42 | cwx | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:43 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:44 | cwx | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:45 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:47 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:49 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:51 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:53 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:55 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:56:57 | qivrm | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 05:57:12 | yakischloba | ok, this is getting really fucking annoying |
| 05:57:21 | yakischloba | is there some way I can ignore these? |
| 06:03:49 | rue | Disable CTCP or wait until the upgrade |
| 06:04:21 | yakischloba | Is there any disadvantage to disabling CTCP? |
| 06:04:30 | yakischloba | i don't really know anything about IRC |
| 06:10:35 | rue | Not in particular |
| 06:30:47 | evan | some lively debate earlier tonight. |
| 07:05:46 | ridlc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:05:46 | ridlc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:05:46 | ridlc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:05:47 | ridlc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:05:49 | ridlc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:15:27 | matthewd | I'll precede this by saying that I intend to remove the references to ruby_errinfo from Johnson; we seem to just be doing what rb_rescue would do for us anyway. But in the interests of considering all means of maximizing compatibility... |
| 07:15:51 | matthewd | It occurs to me that there is actually a way to have code run upon an assignment, in C. |
| 07:17:05 | matthewd | (I'll also throw in an I-don't-really-know-what-I'm-doing warning here -- this might actually just be stupid, instead of merely ill-considered) |
| 07:18:40 | matthewd | #define ruby_errinfo (*ruby_errinfo_p) |
| 07:19:07 | matthewd | VALUE *ruby_errinfo_p = 0x100; |
| 07:24:50 | qoybeuawgtcq | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:24:50 | qoybeuawgtcq | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:24:50 | qoybeuawgtcq | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 07:44:38 | evan | matthewd: well, thats not really running a function |
| 07:44:43 | evan | which is what I need to do |
| 07:44:52 | evan | were this C++, i could do some operator overloading tricks |
| 07:48:02 | matthewd | evan: Isn't a signal handler a reasonable approximate of a function? |
| 07:48:24 | evan | ew. |
| 07:48:27 | evan | no, not really. |
| 07:48:31 | matthewd | I won't claim to know whether you could actually extract enough info |
| 07:48:38 | matthewd | I didn't say it was pretty ;) |
| 07:49:00 | evan | better is to say that we can't support setting it directly and introduce a set_ruby_errinfo() to compat.h |
| 07:49:14 | evan | in MRI, that will just do ruby_errinfo = val |
| 07:49:21 | evan | and in rbx, we can do whatever we want then. |
| 07:49:37 | matthewd | Yep, fair enough |
| 08:08:42 | rontiucyg | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:08:42 | rontiucyg | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:08:42 | rontiucyg | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:08:43 | rontiucyg | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:08:46 | rontiucyg | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:08:47 | rontiucyg | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:08:49 | rontiucyg | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:48 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:48 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:49 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:49 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:51 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:53 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:56 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:17:57 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:00 | upwiifmqye | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:47 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:47 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:47 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:48 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:50 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:52 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:54 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:56 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 08:18:58 | wfruhrc | VERSION http://www.theregister.co.uk/2010/01/30/firefox_interprotocol_attack/ LOL FREENODE DISSED |
| 19:46:04 | kemet | anyone have advice on getting the hpricot gem to install on rubinus |
| 19:51:16 | khaase | kemet: you could use nokogiri |
| 19:51:47 | kemet | khaase: thx |
| 19:52:16 | khaase | kemet: (that is an alternative to hpricot which has about the same api) |
| 19:53:15 | kemet | khaase: yeah i know - just have some code that already uses hpricot and wanted to test out with rubinius |
| 19:53:35 | kemet | also tried running script/console but that seems to fail miserably |
| 19:54:21 | khaase | http://nokogiri.rubyforge.org/nokogiri/Nokogiri/Hpricot.html |
| 19:54:41 | kemet | http://gist.github.com/evanphx/rubinius/issuesearch?state=open&q=execvp#issue/134 |
| 19:55:52 | kemet | does this work for anyone here? |
| 20:09:28 | dbussink | kemet: just tested here with a new rails app, and it can load the console |
| 20:09:44 | dbussink | kemet: if you can add a reliable reproduction to the ticket that would be very useful |
| 20:10:04 | kemet | dbussink: thx - i guess i should try a new app - was testing with an existing one |
| 20:11:11 | kemet | still failing with new app |
| 20:11:19 | kemet | FWIW I did add a note to the ticket |
| 20:11:36 | kemet | will add a few additional details |
| 20:11:53 | dbussink | kemet: could you try this with master? |
| 20:12:02 | dbussink | we're already quite a few commits further than rc2 |
| 20:12:23 | kemet | will do - hopefully can install this via rvm |
| 20:12:35 | dbussink | kemet: dunno if that's supported |
| 20:13:04 | dbussink | kemet: but using a git clone isn't that hard either |
| 20:13:29 | kemet | dbussink: noted, thx |
| 20:14:27 | kemet | dbussink: at the moment, rvm appears to be doing exactly that |
| 20:27:05 | kemet | dbussink: can't even create a rails app with head |
| 20:27:29 | dbussink | kemet: yeah, i saw that too, but rails hasn't had a lot of attention lately |
| 20:27:44 | dbussink | kemet: could you create a ticket with details steps how you reproduced it? |
| 20:27:56 | dbussink | and if it's a different error, preferably in a new ticket |
| 20:28:00 | kemet | and unfortunately script/console still fails |
| 20:28:21 | kemet | dbussink: yeah i'll update the script/console ticket and create a new one for the rails issue |
| 20:42:42 | kemet | dbussink: http://gist.github.com/evanphx/rubinius/issuesearch?state=open&q=2.3.5#issue/179 |
| 21:02:47 | dbussink | kemet: you don't see the issue with the rc2 release? |
| 21:06:05 | kemet | dbussink: not the rails app creation issue |
| 21:18:00 | dbussink | evan: adding frozen support did expose some new tricky issues :) |
| 21:20:06 | dbussink | kemet: just got a rails app running again on webrick with a new app (i did create the new app with mri) |
| 21:24:45 | kemet | dbussink: script/console works for you right? |
| 21:27:10 | dbussink | kemet: it works for my test app here yeah |
| 21:35:36 | kemet | dbussink: for me, script/console fails both in head and rc2. script/server on the other hand does work on rc2, but not head |
| 21:37:12 | kemet | An exception occurred running script/server |
| 21:37:12 | kemet | unable to modify frozen object (TypeError) |
| 21:37:12 | kemet | Backtrace: |
| 21:37:12 | kemet | String#modify! at kernel/common/string.rb:2257 |
| 21:37:26 | dbussink | kemet: yeah, i've got a fix for that here locally |
| 21:37:31 | kemet | ah |
| 21:39:53 | kemet | dbussink: are u on mac os? wondering if the script/console issue might be platform specific |
| 21:40:06 | dbussink | kemet: yeah |
| 21:40:22 | kemet | dbussink: version? |
| 21:40:30 | dbussink | kemet: 10.6 |
| 21:41:14 | boyscout | Add spec to verify File.join doesn't mutate the first argument when to_str is used - af22448 - Dirkjan Bussink |
| 21:41:14 | boyscout | Be sure we have a fresh copy and don't mutate the argument directly - 9fb3828 - Dirkjan Bussink |
| 21:41:45 | kemet | dbussink: ok, FWIW i'm on 10.5.8 |
| 21:42:27 | dbussink | kemet: that should fix the frozen issue |
| 21:42:48 | kemet | dbussink: excellent thx |
| 21:45:29 | boyscout | CI: rubinius: 9fb3828 successful: 3024 files, 11900 examples, 36302 expectations, 0 failures, 0 errors |
| 23:47:52 | Zoxc | does ruby have a reentrant mutex in it's standard library? |