Show enters and exits. Hide enters and exits.
| 00:00:26 | wycats_ leaves the room. | |
| 00:02:57 | obvio171 enters the room. | |
| 00:03:43 | obvio leaves the room. | |
| 00:05:06 | lstoll leaves the room. | |
| 00:08:57 | womble enters the room. | |
| 00:14:25 | macournoyer enters the room. | |
| 00:25:07 | headius leaves the room. | |
| 00:27:21 | miamoto_musashi enters the room. | |
| 00:38:39 | pauldix enters the room. | |
| 00:43:45 | crossblaim leaves the room. | |
| 00:52:07 | macournoyer leaves the room. | |
| 00:53:10 | Arjen_ enters the room. | |
| 00:57:24 | Arjen_ leaves the room. | |
| 00:59:36 | jayWHY leaves the room. | |
| 01:05:12 | jayWHY enters the room. | |
| 01:09:16 | pauldix leaves the room. | |
| 01:11:06 | jayWHY leaves the room. | |
| 01:11:23 | srbaker leaves the room. | |
| 01:12:06 | seydar enters the room. | |
| 01:13:26 | nicksieger leaves the room. | |
| 01:14:33 | srbaker enters the room. | |
| 01:16:20 | GMFlash enters the room. | |
| 01:16:39 | boyscout | 1 commit by Adam Gardiner |
| 01:16:40 | boyscout | * Fix decompiler bug with handling floats; dde5e62 |
| 01:17:34 | miamoto_musashi leaves the room. | |
| 01:19:10 | srbaker leaves the room. | |
| 01:19:46 | kamal_fariz | who runs betterruby? |
| 01:19:50 | kamal_fariz | oh |
| 01:19:59 | kamal_fariz | didn't see the author .. nvm! |
| 01:19:59 | agardiner | that'd be me... |
| 01:20:21 | kamal_fariz | excellent stuff |
| 01:20:29 | agardiner | thanks! :-) |
| 01:20:47 | kamal_fariz | i should really weed out my Reader list |
| 01:20:56 | kamal_fariz | it's getting hard to get to Inbox 0 on it |
| 01:24:14 | srbaker enters the room. | |
| 01:24:18 | jrun enters the room. | |
| 01:29:43 | rubuildius_ppc | Adam Gardiner: dde5e6229; 1756 files, 6119 examples, 20411 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/168146 |
| 01:41:38 | chris2 leaves the room. | |
| 01:44:29 | mark___ leaves the room. | |
| 01:44:46 | skaar enters the room. | |
| 01:48:19 | drfreeze leaves the room. | |
| 01:48:31 | drfreeze enters the room. | |
| 01:51:40 | rubuildius_amd64 enters the room. | |
| 01:57:15 | radarek leaves the room. | |
| 01:58:26 | boyscout | 1 commit by Adam Gardiner |
| 01:58:27 | boyscout | * Hide display of @lre in debugger locals output; 0c0c866 |
| 01:58:28 | bitbang_ enters the room. | |
| 01:58:41 | srbaker leaves the room. | |
| 01:59:23 | jayWHY enters the room. | |
| 02:04:25 | wycats leaves the room. | |
| 02:05:14 | rubuildius_amd64 | Adam Gardiner: 0c0c8665a; 1756 files, 6116 examples, 20382 expectations, 0 failures, 0 errors; http://rafb.net/p/bBEOJ674.html |
| 02:05:15 | rubuildius_amd64 | Adam Gardiner: dde5e6229; 1756 files, 6116 examples, 20382 expectations, 0 failures, 0 errors; http://rafb.net/p/F3e4W684.html |
| 02:05:54 | bitbang leaves the room. | |
| 02:08:14 | mark___ enters the room. | |
| 02:09:34 | rubuildius_ppc | Adam Gardiner: 0c0c8665a; 1756 files, 6119 examples, 20411 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/168155 |
| 02:09:43 | jayWHY leaves the room. | |
| 02:09:49 | VVSiz_ enters the room. | |
| 02:11:18 | miamoto_musashi enters the room. | |
| 02:11:30 | Fishy5 enters the room. | |
| 02:12:22 | bitbang_ leaves the room. | |
| 02:12:33 | obiejuan leaves the room. | |
| 02:19:02 | pd enters the room. | |
| 02:20:45 | obvio171 enters the room. | |
| 02:21:50 | jayWHY enters the room. | |
| 02:21:59 | jayWHY leaves the room. | |
| 02:23:17 | srbaker enters the room. | |
| 02:26:36 | obiejuan enters the room. | |
| 02:27:50 | VVSiz leaves the room. | |
| 02:28:12 | UncleD leaves the room. | |
| 02:28:28 | i7XjF9cA enters the room. | |
| 02:29:25 | antares | agardiner, your post served as source for some cpu.h documentation ;) |
| 02:29:42 | agardiner | hehe! good stuff! |
| 02:31:13 | RyanTM enters the room. | |
| 02:32:30 | pd | agardiner: your rss is borked atm if you haven't heard yet |
| 02:33:26 | agardiner | pd: hmmm... lemme look |
| 02:33:59 | pd | uhh actually |
| 02:34:01 | pd | it might be ff3 |
| 02:34:08 | pd | google reader just subscribed fine when i did it manually |
| 02:35:36 | jrun leaves the room. | |
| 02:36:16 | srbaker leaves the room. | |
| 02:36:42 | obvio leaves the room. | |
| 02:36:45 | agardiner | yeah, it seems ok to me |
| 02:37:27 | agardiner | also works on ff3 for me too...? |
| 02:38:29 | pd | the toolbar button, the atom link, and the rss link all do nothing but refresh the front page for me |
| 02:38:42 | pd | but it's clearly my problem then, ignore me =) |
| 02:39:33 | ezmobius | rue: http://www.modrails.com/ |
| 02:40:28 | mark____ enters the room. | |
| 02:42:40 | srbaker enters the room. | |
| 02:43:07 | pd leaves the room. | |
| 02:43:15 | mark_____ enters the room. | |
| 02:44:42 | wifelette enters the room. | |
| 02:45:02 | wifelette leaves the room. | |
| 02:47:05 | mark_____ leaves the room. | |
| 02:57:53 | mark___ leaves the room. | |
| 02:58:12 | antares | rue, what's the state of mod_rubinius btw? |
| 02:58:43 | mark____ leaves the room. | |
| 03:00:21 | ezmobius leaves the room. | |
| 03:08:26 | webmat leaves the room. | |
| 03:18:21 | antares | rue, here is another attempt with shotgun docs, looks a bit better now but I might forget to cleanup something, let me know: http://pastie.org/168172 |
| 03:18:40 | antares | brixen, please have a look when you have time, too |
| 03:22:14 | wifelette enters the room. | |
| 03:25:37 | wycats enters the room. | |
| 03:32:54 | binary42 leaves the room. | |
| 03:35:40 | chop3 leaves the room. | |
| 03:38:05 | foysavas leaves the room. | |
| 03:38:47 | foysavas enters the room. | |
| 03:41:36 | MenTaLguY enters the room. | |
| 03:45:57 | obiejuan leaves the room. | |
| 03:46:17 | tarcieri | okay, I'm confused |
| 03:46:23 | mkescher enters the room. | |
| 03:47:05 | MenTaLguY | howdy |
| 03:47:50 | tarcieri | def uhh(x); p x; x; end |
| 03:48:09 | tarcieri | uhh(1) + uhh(2) + uhh(3) |
| 03:48:12 | tarcieri | 3 2 1? |
| 03:48:26 | tarcieri | what's going on there? |
| 03:49:32 | RyanTM leaves the room. | |
| 03:51:54 | tarcieri | okay, I think I get it |
| 03:52:03 | tarcieri | it's evaluating the message before sending it? |
| 03:53:09 | mkescher leaves the room. | |
| 03:53:43 | tarcieri | wonders what Erlang does in that regard... |
| 03:55:28 | tarcieri | it evaluates the receiver before the message |
| 03:55:36 | mediogre enters the room. | |
| 03:56:28 | obvio171_ enters the room. | |
| 03:57:26 | rue | Evening |
| 03:58:57 | rue | tarcieri: evan is working on eval order. I think we are switching to conformancy |
| 03:59:05 | rue | Although depending on the order is bad bad bad |
| 03:59:14 | tarcieri | aah |
| 03:59:22 | tarcieri | I'm just confused why that's happening |
| 04:02:14 | Fishy5 | Why is depending on order so bad? |
| 04:02:43 | rue | tarcieri: The components in the expression are right-to-left, I think there is no greater mystery to it |
| 04:03:00 | rue | Fishy5: You should use source lines to establish sequence |
| 04:03:20 | rue | do_this_first; then_this |
| 04:03:21 | tarcieri | like dispatch(obj, meth, dispatch(obj, meth, obj)) ? |
| 04:03:43 | rue | Essentially, yeah |
| 04:04:00 | tarcieri | umm, obj1, obj2, obj3 there, but yeah |
| 04:04:09 | tarcieri | ok |
| 04:04:23 | MenTaLguY | hm, I'd thought addition was left-associative in Ruby |
| 04:04:38 | tarcieri | yeah, uhh, same here |
| 04:04:50 | tarcieri | it certainly is by MRI |
| 04:06:28 | MenTaLguY | be interesting to decompile the .rbc and see what it's getting compiled to |
| 04:07:32 | tarcieri | or #to_sexp? |
| 04:07:33 | tarcieri | heh |
| 04:07:49 | MenTaLguY | no, I really do mean bytecode |
| 04:11:12 | obvio171 leaves the room. | |
| 04:12:17 | brixen | you can put it in a script and run: shotgun/rubinius describe script.rb to see the opcodes |
| 04:13:51 | tarcieri | [:call, [:call, [:lit, 1], :+, [:array, [:lit, 2]]], :+, [:array, [:lit, 3]]] |
| 04:14:52 | MenTaLguY | yeah, you'll need to have a look at the generated bytecode to see what's actually going to happen during evaluation |
| 04:14:55 | MenTaLguY | the sexps tell you little |
| 04:16:24 | AndrewO leaves the room. | |
| 04:16:51 | benburkert enters the room. | |
| 04:17:21 | brixen | I see this: http://pastie.org/168202 |
| 04:19:27 | benburkert leaves the room. | |
| 04:19:31 | brixen | or, earlier code example: http://pastie.org/168203 |
| 04:20:57 | benburkert enters the room. | |
| 04:24:41 | wmoxam leaves the room. | |
| 04:37:01 | obvio leaves the room. | |
| 04:37:20 | Fishy5_ enters the room. | |
| 04:38:15 | lachie leaves the room. | |
| 04:48:56 | wycats leaves the room. | |
| 04:54:10 | Fishy5 leaves the room. | |
| 04:56:38 | rue | evan: You did not find it feasible to just use a C++ testing library on C source? (Or a sensible C version for that matter?) |
| 04:57:02 | MenTaLguY | it isn't a good idea |
| 04:57:12 | MenTaLguY | particularly if the C does magical things |
| 04:57:22 | MenTaLguY | you can easily subvert some of C++'s expectations |
| 04:58:17 | MenTaLguY | a C library, maybe |
| 04:58:32 | MenTaLguY | but then C is not the nicest language to write test frameworks in |
| 04:58:36 | MenTaLguY | (having done it) |
| 04:58:47 | MenTaLguY | well, or use them for that matter |
| 05:02:25 | rue | I was going to give ATF a try, they have a C-only version now |
| 05:16:06 | TheVoic1 enters the room. | |
| 05:17:49 | Fishy5_ leaves the room. | |
| 05:21:33 | ezmobius enters the room. | |
| 05:26:07 | skaar leaves the room. | |
| 05:26:07 | TheVoice leaves the room. | |
| 05:26:07 | ctennis leaves the room. | |
| 05:26:07 | imajes__ leaves the room. | |
| 05:26:07 | therealadam leaves the room. | |
| 05:26:07 | jammi leaves the room. | |
| 05:26:18 | TheVoic1 leaves the room. | |
| 05:28:12 | perplexes leaves the room. | |
| 05:28:12 | joachimm leaves the room. | |
| 05:28:12 | rue leaves the room. | |
| 05:28:12 | JimMc leaves the room. | |
| 05:28:12 | jacen_ leaves the room. | |
| 05:28:12 | tmm1 leaves the room. | |
| 05:28:12 | halorgium leaves the room. | |
| 05:29:02 | jammi enters the room. | |
| 05:29:04 | skaar enters the room. | |
| 05:29:04 | TheVoice enters the room. | |
| 05:29:04 | ctennis enters the room. | |
| 05:29:04 | imajes__ enters the room. | |
| 05:29:04 | therealadam enters the room. | |
| 05:30:40 | perplexes enters the room. | |
| 05:30:40 | joachimm enters the room. | |
| 05:30:40 | rue enters the room. | |
| 05:30:40 | JimMc enters the room. | |
| 05:30:40 | jacen_ enters the room. | |
| 05:30:40 | tmm1 enters the room. | |
| 05:30:40 | halorgium enters the room. | |
| 05:30:41 | rue leaves the room. | |
| 05:30:41 | halorgium leaves the room. | |
| 05:30:42 | halorgium enters the room. | |
| 05:31:06 | rue enters the room. | |
| 05:33:01 | TheVoice leaves the room. | |
| 05:34:41 | jptix_ enters the room. | |
| 05:34:41 | jptix leaves the room. | |
| 05:45:26 | headius enters the room. | |
| 05:46:11 | jacen_ leaves the room. | |
| 05:49:07 | _martinS_ leaves the room. | |
| 05:56:08 | therealadam leaves the room. | |
| 05:56:38 | d2dchat leaves the room. | |
| 05:58:58 | headius leaves the room. | |
| 06:02:04 | ko1_away leaves the room. | |
| 06:02:09 | agardiner leaves the room. | |
| 06:07:58 | ko1_away enters the room. | |
| 06:27:23 | jartz enters the room. | |
| 06:27:55 | jinjing enters the room. | |
| 06:31:31 | Skip enters the room. | |
| 06:40:28 | jartz_ enters the room. | |
| 06:40:40 | jartz leaves the room. | |
| 06:40:56 | jptix_ leaves the room. | |
| 06:41:24 | jptix enters the room. | |
| 06:41:55 | headius enters the room. | |
| 06:41:55 | jartz_ leaves the room. | |
| 06:42:07 | jartz enters the room. | |
| 06:46:07 | rue | Hm, actually Cgreen. |
| 06:59:36 | jptix_ enters the room. | |
| 07:02:28 | jptix__ enters the room. | |
| 07:03:12 | jptix_ leaves the room. | |
| 07:03:12 | pauldix enters the room. | |
| 07:03:47 | pauldix leaves the room. | |
| 07:08:00 | jptix__ leaves the room. | |
| 07:08:14 | jptix_ enters the room. | |
| 07:08:26 | jptix_ leaves the room. | |
| 07:10:06 | jptix_ enters the room. | |
| 07:10:27 | jptix leaves the room. | |
| 07:39:12 | headius leaves the room. | |
| 07:52:50 | qwert666 enters the room. | |
| 07:55:03 | ezmobius leaves the room. | |
| 08:09:48 | thehcdreamer enters the room. | |
| 08:28:15 | zenspider leaves the room. | |
| 08:43:59 | radarek enters the room. | |
| 08:46:17 | rue | Nitedy nite |
| 08:52:54 | octopod enters the room. | |
| 09:06:48 | cris_kiev enters the room. | |
| 09:10:42 | jptix_ leaves the room. | |
| 09:10:50 | jptix enters the room. | |
| 09:10:52 | hassox enters the room. | |
| 09:29:47 | imajes_ enters the room. | |
| 09:41:25 | Arjen_ enters the room. | |
| 09:46:02 | imajes__ leaves the room. | |
| 09:48:41 | chris2 enters the room. | |
| 09:57:47 | brainopia enters the room. | |
| 10:18:59 | BlackEdder enters the room. | |
| 10:24:58 | brainopia leaves the room. | |
| 10:34:27 | antares_ enters the room. | |
| 10:42:54 | skaar leaves the room. | |
| 10:55:47 | k6__ enters the room. | |
| 11:06:45 | olabini enters the room. | |
| 11:18:53 | jartz leaves the room. | |
| 11:38:59 | webmat enters the room. | |
| 11:42:48 | qwert666 leaves the room. | |
| 11:51:29 | wdperson enters the room. | |
| 11:53:48 | jartz enters the room. | |
| 11:58:21 | GMFlash leaves the room. | |
| 12:15:36 | wifelette enters the room. | |
| 12:18:32 | RyanTM enters the room. | |
| 12:20:58 | wycats enters the room. | |
| 12:29:00 | ctennis enters the room. | |
| 12:41:07 | FoobarWidget enters the room. | |
| 12:51:50 | ctennis_ enters the room. | |
| 12:52:07 | ctennis leaves the room. | |
| 12:53:28 | antares_ leaves the room. | |
| 12:54:43 | Fullmoon enters the room. | |
| 13:06:46 | olabini | so how much changes have you actually made to RbYAML? |
| 13:06:58 | olabini | the JvYAML in JRuby has diverged substantially from what was in RbYAML |
| 13:07:07 | olabini | lots and loads and loads of fixes, really. |
| 13:09:39 | dodecaphonic enters the room. | |
| 13:14:36 | ctennis_ leaves the room. | |
| 13:33:19 | jptix leaves the room. | |
| 13:34:01 | wycats leaves the room. | |
| 13:35:49 | wmoxam enters the room. | |
| 13:42:52 | BlackEdder enters the room. | |
| 13:43:21 | AndrewO enters the room. | |
| 13:49:59 | crossblaim enters the room. | |
| 13:53:55 | obiejuan enters the room. | |
| 13:54:42 | qwert666 enters the room. | |
| 13:54:52 | ctennis enters the room. | |
| 13:54:54 | d2dchat enters the room. | |
| 13:56:12 | AndrewO leaves the room. | |
| 14:02:54 | ctennis leaves the room. | |
| 14:03:06 | ctennis enters the room. | |
| 14:05:34 | AndrewO enters the room. | |
| 14:09:10 | moofbong enters the room. | |
| 14:22:55 | anonuser enters the room. | |
| 14:26:01 | ctennis leaves the room. | |
| 14:30:40 | Fullmoon leaves the room. | |
| 14:33:55 | jptix enters the room. | |
| 14:35:16 | ctennis enters the room. | |
| 14:42:11 | jartz leaves the room. | |
| 14:45:28 | agile leaves the room. | |
| 14:50:11 | antares enters the room. | |
| 14:53:48 | therealadam enters the room. | |
| 14:53:49 | ctennis leaves the room. | |
| 14:59:37 | KirinDav_ enters the room. | |
| 15:04:44 | jartz enters the room. | |
| 15:05:18 | pietia enters the room. | |
| 15:06:38 | dewd enters the room. | |
| 15:08:21 | RyanTM leaves the room. | |
| 15:09:21 | RyanTM enters the room. | |
| 15:16:45 | jlindley enters the room. | |
| 15:22:53 | mediogre leaves the room. | |
| 15:25:56 | GMFlash enters the room. | |
| 15:29:20 | binary42 enters the room. | |
| 15:30:10 | jartz leaves the room. | |
| 15:41:35 | agile enters the room. | |
| 15:53:47 | pietia leaves the room. | |
| 15:54:27 | enebo enters the room. | |
| 15:56:03 | jartz enters the room. | |
| 16:01:05 | anonuser leaves the room. | |
| 16:06:48 | obiejuan leaves the room. | |
| 16:13:51 | therealadam_ enters the room. | |
| 16:17:03 | anonuser enters the room. | |
| 16:17:35 | KirinDav_ leaves the room. | |
| 16:20:18 | macournoyer enters the room. | |
| 16:20:37 | nemerle leaves the room. | |
| 16:22:42 | radarek leaves the room. | |
| 16:23:25 | Arjen_ leaves the room. | |
| 16:26:27 | ctennis enters the room. | |
| 16:28:44 | mutle leaves the room. | |
| 16:29:34 | mutle enters the room. | |
| 16:29:49 | skaar enters the room. | |
| 16:30:43 | octopod leaves the room. | |
| 16:31:53 | crossblaim_ enters the room. | |
| 16:35:47 | therealadam leaves the room. | |
| 16:37:18 | octopod enters the room. | |
| 16:37:57 | cyndis leaves the room. | |
| 16:41:00 | cyndis enters the room. | |
| 16:42:26 | jartz leaves the room. | |
| 16:43:26 | headius enters the room. | |
| 16:44:52 | jartz enters the room. | |
| 16:50:11 | crossblaim leaves the room. | |
| 16:50:12 | KirinDav_ enters the room. | |
| 16:54:29 | lopex enters the room. | |
| 17:05:29 | mutle leaves the room. | |
| 17:05:30 | antares leaves the room. | |
| 17:17:43 | jptix leaves the room. | |
| 17:27:25 | jartz_ enters the room. | |
| 17:27:33 | jartz leaves the room. | |
| 17:28:16 | headius | g'day |
| 17:28:41 | ctennis enters the room. | |
| 17:28:46 | djwhitt | 'ello |
| 17:29:15 | thehcdreamer leaves the room. | |
| 17:29:24 | w1rele55 leaves the room. | |
| 17:30:10 | wmoxam leaves the room. | |
| 17:31:20 | w1rele55 enters the room. | |
| 17:36:20 | k6c leaves the room. | |
| 17:37:12 | dewd leaves the room. | |
| 17:37:48 | dewd enters the room. | |
| 17:38:51 | radarek enters the room. | |
| 17:38:58 | headius leaves the room. | |
| 17:39:11 | olabini leaves the room. | |
| 17:39:17 | headius enters the room. | |
| 17:49:57 | jptix enters the room. | |
| 17:57:44 | crossblaim enters the room. | |
| 17:58:17 | binary42 leaves the room. | |
| 18:03:32 | skaar leaves the room. | |
| 18:07:05 | cremes | are we sure there are 6 full-timers on this project? |
| 18:07:09 | cremes | :P |
| 18:07:28 | evan | heh |
| 18:07:31 | evan | yeah |
| 18:07:55 | anonuser | You guys want one more? |
| 18:08:39 | evan | we're all full up atm. |
| 18:08:43 | anonuser | :( |
| 18:08:56 | anonuser | I just got downsized at a start up. So I'm looking for more work. |
| 18:09:45 | evan | sorry to hear that |
| 18:09:46 | anonuser | Oh well, I can still contribute through the magic of opensource |
| 18:09:50 | evan | my old company just went under too |
| 18:10:01 | anonuser | It's cool. I have quite a few offers, just not in the area I want. |
| 18:10:03 | anonuser | C++ jobs |
| 18:10:37 | anonuser | Which isn't what I'm looking for but if you've got C++ on the resume the recruiters seem to call in droves about it. |
| 18:10:51 | evan | heh |
| 18:10:56 | djwhitt | it's a trap! |
| 18:11:23 | anonuser | It is :( |
| 18:11:31 | anonuser | I'm thinking for removing it. |
| 18:12:14 | anonuser | Though the salary offers aren't bad 90k to start, just I don't want to work on those complicated systems anymore :-\ |
| 18:12:58 | djwhitt | thankfully I haven't had a C++ job yet, but I was TA for a couple classes in college that used it |
| 18:13:03 | djwhitt | C++ is a horrible language to teach in |
| 18:13:12 | anonuser | C++ in college isn't C++ at all. |
| 18:13:20 | djwhitt | it's bad enough |
| 18:13:22 | anonuser | It teaches you to hate languages which is a very bad trait. |
| 18:13:25 | djwhitt | we had them doing crap with templates |
| 18:14:20 | anonuser | I rarely actually used templates in products unless I was building a container, the STL and BOOST provided pretty much everything someone would want. |
| 18:14:48 | anonuser | C++ is nice if you can avoid trying to use every thing in the language, it's powerful and complex. |
| 18:15:22 | evan | there is a C-- |
| 18:15:29 | dbussink | i can work with mainly ruby atm :) |
| 18:15:38 | djwhitt | dbussink: nice, me too :) |
| 18:15:38 | evan | it's this funky lowlevel language all written in Ocaml |
| 18:15:42 | anonuser | At a bookstore there was actually a sign for C/C+/C++ |
| 18:15:43 | crossblaim_ leaves the room. | |
| 18:15:43 | dbussink | just started a small test project using merb |
| 18:16:06 | dbussink | works pretty well |
| 18:16:07 | anonuser | I got them to give me the sign after they figure out C+ isn't real. |
| 18:17:11 | anonuser | I'm setting up a VM to work on rubinius, I take it read the guides and start rummaging through tickets? |
| 18:17:36 | dbussink | anonuser: or look at the specs to see what needs to be done |
| 18:17:40 | evan | anonuser: yeah, or just start playing with it |
| 18:17:44 | evan | report what you find |
| 18:17:51 | dbussink | try real world applications on it |
| 18:17:59 | dbussink | spec out bugs you find |
| 18:18:01 | anonuser | Simple merb app? |
| 18:18:20 | dbussink | dunno about merb status and ezmobius isn't in atm |
| 18:18:25 | dbussink | he has been working on that |
| 18:18:32 | dbussink | but go ahead and try :) |
| 18:18:36 | anonuser | Will do :) |
| 18:18:58 | anonuser | Port the stdlib as I get to it? |
| 18:19:09 | anonuser | Write the specs and all that jazz as I go |
| 18:19:23 | dbussink | anonuser: we move stuff over when it's fully tested and preferably specced too |
| 18:19:35 | anonuser | I gotcha |
| 18:19:45 | anonuser | That's the the lighthouse pages say |
| 18:20:15 | anonuser | Anyone here use emacs? |
| 18:20:22 | djwhitt | zenspider does |
| 18:20:39 | anonuser | Not in :( wanted to know if anyone has any handly el files for me |
| 18:24:17 | dbussink | sees and serious drop in the number of messages since he started working fulltime :p |
| 18:24:23 | anonuser | And I finally get to use on a project that's not my own, tried to get the office to use it but they wouldn't bite :( |
| 18:24:59 | brixen | dbussink: a lot less idle chatter :P |
| 18:25:23 | anonuser | Just curious but does anyone know of any remote ruby jobs? |
| 18:25:38 | dbussink | brixen: no one that pressures you people to work hard ;) |
| 18:25:42 | evan | less idle chatter means that I'm getting more work done == good! |
| 18:26:03 | dbussink | i'm waiting for your massive commit :) |
| 18:26:05 | brixen | dbussink: it's impossible for me not to work hard, I love my job! |
| 18:26:18 | brixen | dbussink: won't be massive, but it will be a big improvement :) |
| 18:26:49 | obiejuan enters the room. | |
| 18:27:00 | dkubb enters the room. | |
| 18:27:32 | dbussink | brixen: i love mine too, getting better almost every day |
| 18:27:39 | brixen | sweet! |
| 18:27:44 | brixen | makes a big difference |
| 18:27:52 | dbussink | probably gonna hire an extra person too |
| 18:28:01 | brixen | nice |
| 18:28:06 | dbussink | nice to be able to do that after a few days :P |
| 18:28:21 | dbussink | we really need to get up to speed and i'm the only one who can develop something |
| 18:28:30 | dbussink | in our 2 man team that is :P |
| 18:28:49 | brixen | heh |
| 18:33:27 | dbussink | but we aim for world domination of course, high goals are needed to be successful :P |
| 18:34:19 | anonuser | What is that you work on? |
| 18:36:31 | dbussink | it's gonna be a time registration system for employment service companies |
| 18:36:46 | dbussink | but it's still in it's infancy |
| 18:36:58 | anonuser | Ah, neat-o |
| 18:37:08 | anonuser | What's powering it? |
| 18:37:32 | brixen | ruby is so fun: "ab-\\".count "a-\\b" => 1 |
| 18:37:39 | brixen | guess which char is counted |
| 18:38:06 | evan | um. |
| 18:38:08 | evan | no clue |
| 18:38:09 | dbussink | there is a hacked java system now, but it's a hack of a system that was used for registering something completely different |
| 18:38:11 | brixen | b |
| 18:38:18 | evan | why? |
| 18:38:29 | dbussink | anonuser: so we need to rebuild it basically, probably gonna use some ruby solution |
| 18:38:36 | brixen | well, I can tell you why, but why why is the big question |
| 18:38:38 | anonuser | dbussink, cool. |
| 18:38:43 | dbussink | anonuser: perhaps rails, merb or whatever suits us best |
| 18:38:53 | anonuser | dbussink, sounds like a plan :) |
| 18:39:11 | dbussink | anonuser: well, it's basically my call :) |
| 18:39:21 | anonuser | I'm trying to do a torrent management system in merb, porting it from my original base in django. |
| 18:39:38 | brixen | evan: the \\ after - essentially discards the attempt to match a sequence, but doesn't match 'a' |
| 18:39:50 | brixen | evan: \\ is ignored unless it's the last char in the count string |
| 18:39:57 | brixen | so freaking ad hoc |
| 18:39:59 | enebo leaves the room. | |
| 18:40:04 | evan | wtf |
| 18:40:11 | brixen | yeah |
| 18:40:11 | evan | what functionality is that even |
| 18:40:18 | enebo enters the room. | |
| 18:40:35 | brixen | it's in String#count and the stuff that uses it, like #delete |
| 18:40:40 | FoobarWidget | hi all |
| 18:40:45 | brixen | hey FoobarWidget |
| 18:41:35 | FoobarWidget | did the MRI FFI cause any problems w.r.t. implementing write barriers in rubinius? |
| 18:42:04 | evan | huh? |
| 18:42:04 | FoobarWidget | that is, I'm assuming you use write barriers and not read barriers |
| 18:42:08 | evan | MRI doesn't have FFI |
| 18:42:16 | evan | and MRI doesn't have write barriers |
| 18:42:32 | FoobarWidget | well I mean the C API that MRI exposes to its extensions |
| 18:42:37 | anonuser | FFI is a rubinius thing as far as I know. Subtend is the MRI thing |
| 18:42:37 | FoobarWidget | and I know it doesn't have write barriers |
| 18:42:39 | wycats enters the room. | |
| 18:43:01 | FoobarWidget | okay maybe it was the wrong term. some guys on ruby-core used that term so I thought that's what its C API is called |
| 18:43:12 | evan | FoobarWidget: our MRI C API compatibility layer (subtend) exposes all objects as handles |
| 18:43:36 | evan | so that an extension never has a different reference to an object in memory. |
| 18:44:01 | evan | s/different/direct/ |
| 18:44:05 | FoobarWidget | so you were able to implement write barriers without breaking compatibility with MRI's C API? |
| 18:44:10 | evan | yea |
| 18:44:25 | FoobarWidget | ok. I'm trying to think of ways to implement generational gc in MRI |
| 18:44:34 | evan | ah |
| 18:44:36 | FoobarWidget | so I'm trying to figure out whether there's a way to do it without breaking API compatibility |
| 18:44:37 | evan | it's really not possible |
| 18:45:02 | dbussink | FoobarWidget: ah, you're one of the guys from the discussion on ruby-core? |
| 18:45:06 | FoobarWidget | why not? as I've figured so far, I need to catch the correct assignment instructed to implement write barriers, right? |
| 18:45:07 | evan | well, the entire system uses the same API |
| 18:45:12 | FoobarWidget | dbussink: yes |
| 18:45:26 | dbussink | FoobarWidget: i've read about that yeah |
| 18:45:33 | evan | the MRI extension API is the same API that the internals of MRI use |
| 18:45:44 | FoobarWidget | yes I'm aware of that |
| 18:45:55 | evan | how would you implement a write barrier for |
| 18:46:06 | evan | RARRAY(ary)->ptr[3] = calculate_some_object(); |
| 18:46:07 | evan | ? |
| 18:46:25 | skaar enters the room. | |
| 18:46:57 | FoobarWidget | not possible. it has to be replaced with something like RARRAY_SET(ary, 3, calculate()) |
| 18:47:06 | FoobarWidget | but as far as I know, ruby 1.9 is already moving that way |
| 18:47:22 | FoobarWidget | I saw a lot of extensions failing to compile in 1.9 because they did things like RSTRING(foo)->ptr |
| 18:47:58 | evan | well, if you rewrite the API, it might be easier |
| 18:48:12 | evan | what are the generations going to be? |
| 18:48:16 | FoobarWidget | but I guess this isn't possible in 1.8 without substantial changes :/ |
| 18:48:23 | evan | because being conservative, you still can't move any objects |
| 18:48:44 | headius | MRI uses memory locations for various things |
| 18:48:45 | FoobarWidget | yes. but generational can be combined with conservative, right? the gc will not be a moving/compacting one |
| 18:48:52 | evan | depends |
| 18:48:54 | headius | you can't make it generational without finding all those areas |
| 18:48:58 | FoobarWidget | I'll just use a seperate index to store generation information |
| 18:49:00 | evan | what happeens when you promote an object? |
| 18:49:03 | evan | does it have to move? |
| 18:49:07 | evan | typically, it does |
| 18:49:10 | FoobarWidget | no, only the position in the index moves |
| 18:49:16 | FoobarWidget | I mean, the handle in the index |
| 18:49:48 | evan | so, you're idea is to not expose direct references to objects and use handles for everything? |
| 18:49:58 | brixen | how big will the handle table be? |
| 18:50:07 | evan | huge |
| 18:50:10 | brixen | yeah |
| 18:50:19 | FoobarWidget | an extra pointer for each object |
| 18:50:26 | FoobarWidget | since a VALUE is 20 bytes, |
| 18:50:30 | brixen | megabytes |
| 18:50:35 | FoobarWidget | it'll mean 20% overhead |
| 18:50:52 | FoobarWidget | not sure whether the memory hit is worth the potential speed increase |
| 18:50:52 | brixen | 20 megabytes on the 100 mb rails apps I see |
| 18:51:02 | evan | the problem with object tables (which is what you're talking about) is that they really penalize you for speed |
| 18:51:17 | evan | because you have to lookup and deref to do anything |
| 18:51:18 | FoobarWidget | brixen: well that problem *can* be partially solved with copy-on-write semantics |
| 18:51:32 | evan | thats why most smalltalks moved away from the object table |
| 18:51:32 | FoobarWidget | yes I realize that |
| 18:51:54 | brixen | FoobarWidget: we have a nice generational gc, come join us :) |
| 18:52:13 | FoobarWidget | I'd like to, but it doesn't run rails yet :( |
| 18:52:17 | evan | FoobarWidget: for what it's worth, i've had these same thoughts |
| 18:52:26 | evan | i had them while I was working on sydney |
| 18:52:40 | FoobarWidget | hm, "been there done that" huh? :/ |
| 18:52:42 | evan | and decided that basically, it would be whole scale rearchitecting of the system |
| 18:52:46 | evan | thus... rubinius! |
| 18:52:58 | FoobarWidget | I think rubinius is definitely the future |
| 18:52:59 | FoobarWidget | however, |
| 18:53:05 | FoobarWidget | it will be some time before it's ready |
| 18:53:07 | evan | if you have to redo everything, might as well fix the architecture |
| 18:53:08 | FoobarWidget | and that's the main problem |
| 18:53:17 | FoobarWidget | I'm trying to figure out whether I can make any stop-gap solutions |
| 18:53:28 | dbussink | FoobarWidget: what do you see as some time? |
| 18:53:29 | evan | FoobarWidget: you could try jruby |
| 18:53:30 | antares enters the room. | |
| 18:53:31 | brixen | FoobarWidget: but it's probably closer than a significant improvement in MRI |
| 18:53:54 | FoobarWidget | dbussink: well, for one, I checked out rubinius's git repo a few days ago |
| 18:54:15 | FoobarWidget | rubinius irb took 2-3 seconds to start up (as oppose to 0.1 second on normal ruby) |
| 18:54:37 | FoobarWidget | a simple garbage collection speed test script that I wrote is about 300% slower in rubinius |
| 18:54:51 | brixen | FoobarWidget: gc or ruby? |
| 18:54:58 | brixen | FoobarWidget: what was your bench? |
| 18:55:01 | anonuser | FoobarWidget, that's the nature of using in development software |
| 18:55:08 | dbussink | well, we have some vm benchmarks where we already beat ruby by a large margin |
| 18:55:42 | FoobarWidget | so how long do you think rubinius is ready to run rails with adequate performance? |
| 18:56:05 | brixen | hard to say precisely |
| 18:56:23 | FoobarWidget | can I say, end of this year with 90% chance? |
| 18:56:34 | brixen | probably reasonable |
| 18:56:56 | anonuser | FoobarWidget, can you define adequate performance? |
| 18:57:01 | FoobarWidget | for now I've developed and polished a copy-on-write patch for MRI to reduce memory usage in rails |
| 18:57:17 | FoobarWidget | but MRI's quite hard to navigate and to modify :/ |
| 18:57:33 | anonuser | Help get rubinius up to par :) |
| 18:57:49 | obiejuan leaves the room. | |
| 18:57:51 | headius | FoobarWidget: what's your goal with this work? |
| 18:59:45 | FoobarWidget | headius: the copy-on-write patch? |
| 18:59:51 | FoobarWidget | to reduce memory usage |
| 18:59:53 | headius | well in general |
| 18:59:57 | headius | just to reduce MRI memory usage? |
| 19:00:21 | headius | to what end? you have some use case you're driving? |
| 19:00:38 | FoobarWidget | yes. ruby on rails |
| 19:00:59 | FoobarWidget | in the typical RoR setup, multiple application servers are run |
| 19:01:04 | FoobarWidget | each which handles 1 request concurrently |
| 19:01:14 | FoobarWidget | this wastes a lot of memory, they don't share AST nodes with each other |
| 19:01:34 | FoobarWidget | so if you can preload the rails framework and the app code, |
| 19:01:38 | FoobarWidget | then fork() a few times, |
| 19:01:45 | FoobarWidget | then you can save a lot of memory |
| 19:02:46 | headius | wouldn't it be a more productive project to eliminate the need to have one process per request? |
| 19:02:59 | headius | that's really the cause of excess memory use |
| 19:03:17 | FoobarWidget | no |
| 19:03:21 | FoobarWidget | this is easier, believe me :) |
| 19:03:23 | FoobarWidget | -and- |
| 19:03:32 | dbussink | headius: well, that's basically because rails' thread unsafety |
| 19:03:37 | FoobarWidget | even if rails is thread-safe, you still can't load multiple framework versions in the same process |
| 19:03:38 | headius | well, in JRuby for example all rails instances already run in the same process |
| 19:03:50 | FoobarWidget | or multiple apps in the same process |
| 19:03:51 | headius | but we still have to spin off multiple JRuby instances because of Rails' deficiencies |
| 19:04:04 | FoobarWidget | so by using copy-on-write semantics we really save more memory than with threads |
| 19:04:36 | FoobarWidget | and processes have the added benefit that they can't crash each other |
| 19:04:46 | FoobarWidget | they can be independently killed by the sysadmin |
| 19:05:03 | headius | on a single cpu box running one app, you would gain little having multiple ruby processes, so it's entirely an ugly workaround |
| 19:05:21 | FoobarWidget | and it's a bit futile to say that it isn't a productive project, because it's already finished :) |
| 19:05:21 | headius | the requirement to have several processes is an ugly wart to begin with |
| 19:05:47 | FoobarWidget | why is it ugly? |
| 19:05:54 | headius | because it shouldn't be necessary |
| 19:05:59 | FoobarWidget | processes share memory this way, so this can't be a complaint |
| 19:06:10 | headius | even without concurrent threads, having to spin up more than one process on even a single-cpu box is absurd |
| 19:06:44 | FoobarWidget | why is it absurd? no really, why? |
| 19:06:50 | FoobarWidget | what is the difference other than the name? |
| 19:06:53 | FoobarWidget | and the seperate address space? |
| 19:07:12 | FoobarWidget | overhead is no longer an issue, all modern OS implement copy-on-write |
| 19:07:16 | headius | the gross waste of resources |
| 19:07:23 | FoobarWidget | threads and processes use the same CPU scheduler |
| 19:07:34 | headius | multiple in-memory caches, multiple copies of everything, multiple DB connections |
| 19:08:08 | FoobarWidget | caches - ok, maybe. but in case of rails, the caches either live on disk or in memcached (or something similar) |
| 19:08:22 | headius | reducing the memory cost of rails isn't going to help when you're already forced to spin up five to ten processes |
| 19:08:35 | FoobarWidget | multiple db connections - how is this a problem? as far as I know db connection handles can't be used concurrently |
| 19:08:43 | tarcieri | what Rails (or any long-running process in Ruby) really needs is a compacting garbage collector :( |
| 19:08:43 | headius | fixing rails would cut that cost by 5-10x immediately |
| 19:08:43 | FoobarWidget | so you end up connecting once in every thread anyway |
| 19:08:46 | anonuser | FoobarWidget, that's a bit odd, threads and processes don't always use the same CPU scheduler. It depends on the threading library and the threading model. At least in my experience it does. |
| 19:09:04 | FoobarWidget | anonuser: ok, strictly speaking you're right |
| 19:09:05 | headius | FoobarWidget: every process holds a connection open, whether it's using it or not |
| 19:09:23 | headius leaves the room. | |
| 19:09:28 | FoobarWidget | anonuser: but I don't know many OSses that don't. at least linux has moved to this model many years ago |
| 19:09:33 | FoobarWidget | and many many servers run linux |
| 19:09:37 | headius enters the room. | |
| 19:10:25 | FoobarWidget | just a sec |
| 19:10:31 | FoobarWidget | I'll get back to you later |
| 19:10:34 | headius | evan: what was that new irc proxy I heard mentioned in here the other day |
| 19:10:36 | headius | I'm just about fed up with my flaky connection |
| 19:10:38 | evan | ctrlproxy |
| 19:10:44 | headius | tx |
| 19:10:44 | evan | i'm using it now |
| 19:10:47 | evan | seems decent |
| 19:10:56 | dbussink | evan: advantages over dircproxy |
| 19:10:56 | dbussink | ? |
| 19:11:04 | evan | hopefully doesn't crash on me |
| 19:11:06 | evan | :P |
| 19:11:11 | evan | which dircproxy did |
| 19:11:21 | dbussink | ah, well, dircproxy hasn't done that yet for me :) |
| 19:12:10 | TheVoice enters the room. | |
| 19:21:05 | FoobarWidget | back |
| 19:21:28 | benburkert leaves the room. | |
| 19:21:28 | FoobarWidget | headius: I dispute your "cut cost by 5-10x" claim |
| 19:21:51 | headius | good for you |
| 19:21:55 | FoobarWidget | people are all like "omg threads are better!!!1" but so far I've yet to see some real proof that it's significantly better than multi-process copy-on-write |
| 19:22:38 | FoobarWidget | you talk like you don't care. but did you forget that without doubt there is no science? |
| 19:22:45 | headius | if your interest is reducing memory, reducing the number of processes is the most bang for your buck |
| 19:22:53 | headius | without a doubt |
| 19:23:05 | anonuser | FoobarWidget, you're exactly right, but most people treat threads as a catch all. The best situation is a thread pool, with AIO |
| 19:23:06 | headius leaves the room. | |
| 19:23:10 | headius enters the room. | |
| 19:23:11 | FoobarWidget | like I said, copy-on-write. so far you've yet to give me a single reason why copy-on-write semantics aren't enough |
| 19:23:28 | FoobarWidget | other than "threads are better because I say so" |
| 19:23:51 | FoobarWidget | if you can show me numbers which prove the difference in memory usage - fine :) |
| 19:24:07 | headius | because in a typical rails app, eventually everything is created new |
| 19:24:09 | headius | when are you going to fork? after rails sources are parsed? |
| 19:24:11 | headius | because the majority of rails code is generated when the first few requests come in |
| 19:24:13 | headius | that will end up getting duplicated in each process |
| 19:24:32 | headius | unless you plan to run a few requests through before forking, you're not going to share any of that |
| 19:24:39 | anonuser | FoobarWidget, look at apache :) |
| 19:24:54 | FoobarWidget | no headius. the entire rails framework is loaded before the first request. I know, because I've already researched it *and* written the entire solution :) |
| 19:24:57 | FoobarWidget | www.modrails.com |
| 19:25:02 | FoobarWidget | it uses copy-on-write semantics |
| 19:25:26 | FoobarWidget | and we also load all application code |
| 19:25:29 | FoobarWidget | and plugin code |
| 19:25:31 | headius | finders, for example |
| 19:25:34 | olabini enters the room. | |
| 19:25:35 | headius | are not generated |
| 19:25:40 | FoobarWidget | correct |
| 19:25:52 | FoobarWidget | but they consist of relatively little memory compared to the rest of the framework |
| 19:26:01 | FoobarWidget | how many find_by_x methods do people usually use? |
| 19:26:14 | headius | and what of activerecord internals? |
| 19:26:16 | FoobarWidget | not rediculously many |
| 19:26:26 | FoobarWidget | I'm not saying I load absolutely everything |
| 19:26:28 | anonuser | Is this not a bit off topic for rubinius development? |
| 19:26:29 | FoobarWidget | I cannot |
| 19:26:30 | brixen | FoobarWidget: what explains the mem usage patterns I see where it starts with 25mb and after a while is at 70-80mb? |
| 19:27:07 | brixen | FoobarWidget: how does COW help this? assuming you have found the cause |
| 19:27:21 | FoobarWidget | brixen: I can't really tell without some analysis. but I'm going to release a ruby version with gc statistics support, so you can find the problem yourself :) |
| 19:27:24 | obiejuan enters the room. | |
| 19:27:31 | brixen | that's cool |
| 19:27:40 | FoobarWidget | right now it's hard to tell wtf ruby's gc is doing |
| 19:27:44 | brixen | yeah |
| 19:27:50 | anonuser | Not a whole lot of making sense :) |
| 19:27:54 | brixen | this is a consistent pattern I see with a variety of rails apps |
| 19:28:06 | FoobarWidget | do you use imagemagick? |
| 19:28:10 | brixen | nope |
| 19:28:15 | octopod leaves the room. | |
| 19:28:40 | brixen | typically imagescience if I need that |
| 19:29:02 | FoobarWidget | well, in case of imagemagick, don't forget to call image.destroy! afterwards |
| 19:29:14 | FoobarWidget | ruby counts the number of heap slots to determine whether it must gc |
| 19:29:22 | FoobarWidget | not the total amount of memory associated with them |
| 19:29:25 | brixen | FoobarWidget: point is, analysis is good, and attempts at solutions are fine, but the baby is spoiled, so toss it out with the bathwater :) |
| 19:29:38 | FoobarWidget | so you can have 20 objects, each 20 MB. ruby wouldn't gc that |
| 19:29:53 | FoobarWidget | until you reach the ruby heap limit |
| 19:30:07 | GMFlash leaves the room. | |
| 19:31:52 | FoobarWidget | headius: and who's to say that threads and copy-on-write multiprocesses cannot be combined? :) that'll save even more memory. everybody wins |
| 19:32:06 | FoobarWidget | I really don't get all the hostility every time processes are mentioned |
| 19:32:20 | FoobarWidget | like it's the work of satan or something |
| 19:32:24 | headius | no hostility here |
| 19:33:03 | anonuser | FoobarWidget, I believe the hositlity comes from your personal attachment to your work. I don't believe anyone, including you means for hostile feelings. |
| 19:33:31 | headius | the gains would just be a lot more substantial if rails didn't have thread safety issues requiring you to isolate everything in separate processes |
| 19:34:01 | evan | FoobarWidget: oh btw, for your marking table, are you calculating the position in the table based on the objcets address? |
| 19:34:01 | headius | both jruby and rubinius are steps toward that goal |
| 19:34:45 | FoobarWidget | evan: yes. though to do that it must first find the heap the object is on, and that's a linear search |
| 19:34:50 | evan | headius: if you have multiple Ruby objects in jruby, do they share anything? |
| 19:35:03 | FoobarWidget | evan: there is a way to make it a constant time operation, but I'll need to change the heap layout for that |
| 19:35:17 | evan | FoobarWidget: ah, ok. what i'm doing is just putting a negative offset header on each object |
| 19:35:18 | headius | as far as Ruby goes, they share JRuby runtime code and any jitted methods |
| 19:35:26 | evan | that points back to it's mark table entry |
| 19:35:33 | FoobarWidget | evan: doesn't that make each object larger? |
| 19:35:39 | evan | sure |
| 19:35:49 | FoobarWidget | and there are a lot of objects |
| 19:36:00 | headius | but they also generally share a session store, use a connection pool, and can share much more if you call out to app-server utilities |
| 19:36:22 | FoobarWidget | I'm thinking about storing "sentinel" slots at well-defined addresses |
| 19:36:29 | evan | FoobarWidget: for the time being, i've opt to spend a little more memory to make it cheap and easy |
| 19:36:30 | FoobarWidget | those sentinal slots would just point to the beginning of the heap, |
| 19:36:33 | headius | they could share AST as well, but we haven't wired that in |
| 19:36:35 | FoobarWidget | where the mark table can be found |
| 19:36:44 | evan | after all, programming is really just a balancing act |
| 19:36:51 | FoobarWidget | the sentinel slot is obtained by setting the last few bits to 0 |
| 19:36:58 | FoobarWidget | (of the object address) |
| 19:37:11 | evan | eeks |
| 19:37:15 | FoobarWidget | so it'll involve a few pointer dereferences, but it's constant time |
| 19:37:48 | FoobarWidget | headius: I read on the jruby blog that they suffer from excessive memory usage |
| 19:37:55 | FoobarWidget | each ruby method is compiled to a class |
| 19:38:03 | FoobarWidget | each class has a few kilobytes overhead |
| 19:38:17 | headius | that has some impact on memory, but now that it's shared between instances it's not much of a problem anymore |
| 19:38:35 | headius | you can also throttle the number of methods jitted to whatever level you like |
| 19:38:44 | headius | only hot methods get jitted |
| 19:39:11 | FoobarWidget | anonuser: maybe, maybe not. but last time I replied to someone who said rails is shit because it doesn't support threads. |
| 19:39:17 | FoobarWidget | anonuser: I stayed polite and mentioned that memory usage could be reduced with copy-on-write semantics, |
| 19:39:21 | FoobarWidget | anonuser: and that an upcoming deployment product will do just that. |
| 19:39:32 | FoobarWidget | anonuser: he said I'm an idiot and that I don't admit that rails is shit |
| 19:39:41 | FoobarWidget | if that's not hostility towards processes then I don't know what it is |
| 19:39:47 | anonuser | FoobarWidget, he sounds too emotional and should think about a career change. |
| 19:40:10 | anonuser | OR |
| 19:40:16 | anonuser | Just don't think about it. |
| 19:40:28 | brixen | FoobarWidget: sounds like he's hostile to rails |
| 19:40:39 | anonuser | I wouldn't think about becoming a crusader just because other people have differences of opinions, even when their opinons aren't based on antyhing |
| 19:41:17 | brixen | FoobarWidget: we'd be really pleased to try any mem usage benches you come up with :) |
| 19:41:36 | dbussink | FoobarWidget: and the gc benchmark could be very useful too |
| 19:41:40 | brixen | FoobarWidget: there's lots of places to contribute to rbx, we welcome them all |
| 19:42:00 | brixen | yeah gc/mem usage |
| 19:43:32 | FoobarWidget | I just use my standard system monitor to measure memory usage |
| 19:43:46 | FoobarWidget | with the 'private dirty rss' info |
| 19:43:57 | dbussink | FoobarWidget: ah ok, and the 300% slower benchmark? |
| 19:44:06 | FoobarWidget | let me find the pastie link |
| 19:44:19 | headius | I'm curious as well |
| 19:44:28 | headius | it's possible you're seeing execution performance rather than gc performance |
| 19:44:31 | FoobarWidget | http://pastebin.com/m26839d72 |
| 19:44:34 | headius | possible/likely |
| 19:44:57 | FoobarWidget | well yes but there's no way to benchmark the gc without executing it, right? |
| 19:44:58 | brixen | heh, you're seeing string |
| 19:45:09 | brixen | I bet |
| 19:45:10 | FoobarWidget | according to a profiler, |
| 19:45:20 | FoobarWidget | 32% of the time is spent in the garbage collector of MRI |
| 19:45:25 | brixen | I'm working on it now, but "x" * 10, did you bm that separately? |
| 19:45:34 | FoobarWidget | but wall clock time of rubinius is 3 times higher |
| 19:45:45 | brixen | FoobarWidget: are you on os x? |
| 19:45:49 | FoobarWidget | no, linux |
| 19:45:52 | brixen | ah ok |
| 19:45:52 | headius | hmm, takes about 22s in jruby |
| 19:45:53 | dbussink | brixen: agree, most likely string indeed |
| 19:45:54 | FoobarWidget | I measured total wall clock time of the script |
| 19:45:58 | headius | but you can't disable gc in jruby |
| 19:46:12 | brixen | FoobarWidget: I'll look at it in shark too |
| 19:46:24 | brixen | but I'm gonna grab some lunch first :) |
| 19:46:26 | FoobarWidget | shark? |
| 19:46:32 | brixen | it a profiler for os x |
| 19:46:35 | brixen | or xcode |
| 19:46:49 | brixen | our gc is typically ~7% of execution time |
| 19:47:27 | skaar leaves the room. | |
| 19:47:27 | FoobarWidget | I profiled a rails app |
| 19:47:38 | FoobarWidget | MRI's GC is 10-12% of the execution time |
| 19:47:59 | brixen | I've profiled a full spec run, that's where I've seen the ~7% |
| 19:48:18 | brixen | but I've seen it go a lot higher with a *ton* of objects created |
| 19:48:21 | brixen | so depends |
| 19:49:22 | dbussink | FoobarWidget: the rubinius performance problems are pretty localized now |
| 19:49:34 | dbussink | FoobarWidget: there is string which needs some serious loving |
| 19:49:48 | dbussink | FoobarWidget: and stuff like FFI is a factor slower than on mri |
| 19:49:57 | loincloth_ enters the room. | |
| 19:50:13 | dbussink | brixen: would we gain a lot from a File.stat primitive? because of the check for .rbc and mtime checks etc.? |
| 19:50:42 | Defiler | That's the same problem as the FFI performance one, really |
| 19:50:47 | brixen | FoobarWidget: for this: -e '(1..1_000_000).map { |i| i }' we're 2x ruby |
| 19:50:55 | Defiler | Our primitives shouldn't be faster than our FFI invocations, in the end |
| 19:51:06 | brixen | FoobarWidget: for this: -e '(1..1_000_000).map { "x" * 10 }', we're ~10x ruby |
| 19:51:13 | dbussink | Defiler: yeah, they shouldn't, but i think they are now |
| 19:51:22 | Defiler | They are, yeah |
| 19:51:55 | FoobarWidget | brixen: yeah, that latter is the problem |
| 19:52:00 | FoobarWidget | but what about startup time? |
| 19:52:08 | FoobarWidget | I noticed a significant startup time delay when starting irb |
| 19:52:30 | brixen | FoobarWidget: well, depends how much needs to be compiled, since that will be done as needed starting irb |
| 19:52:42 | wycats_ enters the room. | |
| 19:53:02 | brixen | and I think we may be slower starting than ruby because of loading the compiled libs |
| 19:53:14 | brixen | but startup isn't an issue for a long running process, so? |
| 19:53:24 | Defiler | Yeah, our load time is hundreds of times worse than MRI right now, I believe |
| 19:53:55 | headius | pfft, you guys have nothing on us |
| 19:54:01 | headius | we're the king of startup time |
| 19:54:04 | Defiler | 0.008 for MRI, 0.763 for us running -e "p 1" |
| 19:54:05 | brixen | hehe |
| 19:54:11 | headius | I'm working on that right now |
| 19:54:15 | headius | only so much I can do though |
| 19:54:23 | Defiler | As low as 0.360 after the first time, though |
| 19:54:53 | Defiler | So only 60x slower |
| 19:54:56 | brixen | ok, lunch, bbl... |
| 19:54:59 | dbussink | well, startup time was a lot worse some time ago |
| 19:55:12 | dbussink | when my first version of the typesgenerator was put in :P |
| 19:55:15 | FoobarWidget | how easy is it for someone without smalltalk experience to join rubinius hacking? |
| 19:55:31 | anonuser | FoobarWidget, it's opensource |
| 19:55:32 | dbussink | pretty easy |
| 19:55:37 | brixen | *easy* |
| 19:55:40 | dbussink | i don't know a lot about it either |
| 19:55:44 | brixen | ruby + C is what you need |
| 19:55:47 | dbussink | and i can cope somehow :P |
| 19:55:56 | anonuser | You do most of the work in ruby I believe. |
| 19:55:59 | anonuser | Shotgun is done in C |
| 19:56:14 | FoobarWidget | I'm comfortable with C/C++ :) |
| 19:56:20 | dbussink | depends on where you're focus lies, there is still a lot to do in just finishing stuff |
| 19:56:30 | dbussink | completing specs, implementations, etc |
| 19:56:33 | Defiler | Yeah, you don't need to know anything about Smalltalk to hack on Rubinius |
| 19:56:49 | anonuser | Startup time for rbx is an order of magnitude worse than mri |
| 19:57:10 | FoobarWidget | how easy/hard is it to improve startup time? |
| 19:57:45 | dbussink | well, if you profile it, there's probably some low hanging fruit there you can grab |
| 19:57:46 | evan | there are probably a few easy tweaks here and there |
| 19:57:58 | evan | but by and large, the startup is always going to be we worse than MRI |
| 19:58:06 | FoobarWidget | "always"? :/ |
| 19:58:07 | evan | because our startup runs a whole bunch of ruby code |
| 19:58:10 | evan | MRI's doesn't run any. |
| 19:58:30 | FoobarWidget | so rubinius is mainly for servers huh? |
| 19:58:36 | evan | no |
| 19:58:54 | FoobarWidget | it really sucks to have to wait 3 seconds for stuff like 'sake' and 'rake' to start, doesn't it? |
| 19:58:54 | anonuser | FoobarWidget, it seems very general purpose but slow startup time isn't really anything to worry about. |
| 19:59:02 | evan | it's like 0.5 seconds verses 0.1 second |
| 19:59:10 | anonuser | 3 seconds? |
| 19:59:18 | FoobarWidget | it's a random number I came up with :) |
| 19:59:22 | evan | FoobarWidget: thats more about improving the performance of the kernel |
| 19:59:28 | dbussink | FoobarWidget: well, it's more like half a second here :) |
| 19:59:29 | evan | not about startup time |
| 19:59:45 | evan | i take startup time to be 'how long to run shotgun/rubinius -v' |
| 20:00:01 | anonuser | I have a start up time of .2 seconds |
| 20:00:04 | anonuser | In a VM. |
| 20:00:14 | FoobarWidget | can't you cache the core classes bytecode in an easy-to-unserialize form? |
| 20:00:26 | evan | we do |
| 20:00:32 | evan | the .rbc files |
| 20:00:49 | anonuser | The images will probably help a lot? |
| 20:00:55 | evan | images? |
| 20:00:59 | Defiler | We still 'execute' the class bodies and whatnot in those files every time, though |
| 20:01:16 | anonuser | Isn't rubinius going to do something like small talk with the saved state images? |
| 20:01:23 | Defiler | We don't just leave, String and its CM objects in a marshalled memory image |
| 20:01:23 | evan | not for a while |
| 20:01:26 | anonuser | oh :( |
| 20:01:27 | evan | it's not an active goal |
| 20:01:30 | anonuser | that was neat |
| 20:01:34 | FoobarWidget | ah damn :( and that was the coolest part |
| 20:01:57 | evan | if someone wants to tackle it, they're welcome to it |
| 20:02:02 | anonuser | hah |
| 20:02:10 | srbaker leaves the room. | |
| 20:02:18 | jinjing leaves the room. | |
| 20:02:20 | dbussink | FoobarWidget: i see a challenge for you ;) |
| 20:02:43 | FoobarWidget | eh... that is VERY hardcore :p |
| 20:03:01 | dbussink | FoobarWidget: hacking on the mri gc is hardcore imho too :P |
| 20:03:13 | evan | well, lunch time. |
| 20:04:43 | srbaker enters the room. | |
| 20:08:12 | wycats leaves the room. | |
| 20:15:43 | loincloth_ leaves the room. | |
| 20:15:58 | loincloth_ enters the room. | |
| 20:16:37 | radarek leaves the room. | |
| 20:17:04 | loincloth_ leaves the room. | |
| 20:26:23 | nicksieger leaves the room. | |
| 20:29:00 | wycats enters the room. | |
| 20:39:02 | octopod enters the room. | |
| 20:39:31 | headius leaves the room. | |
| 20:40:01 | headius enters the room. | |
| 20:47:05 | wycats_ leaves the room. | |
| 20:52:46 | srbaker leaves the room. | |
| 20:53:30 | ctennis leaves the room. | |
| 20:56:53 | headius leaves the room. | |
| 20:57:16 | headius enters the room. | |
| 20:57:21 | jayWHY enters the room. | |
| 21:05:17 | anonuser | Holy awesome batman, I might get a job that'll let me improve rubinius |
| 21:05:27 | anonuser | It'll pay me to help out rubinius |
| 21:06:49 | evan | yay! |
| 21:07:05 | anonuser | Hopefully, phone interview is about to happen. |
| 21:08:01 | ctennis enters the room. | |
| 21:09:35 | anonuser | P.S. I hate how long it takes gnome to compile |
| 21:10:14 | FoobarWidget | don't use gentoo? ;) |
| 21:11:58 | anonuser | I use FreeBSD. |
| 21:12:04 | djwhitt | even better don't use gnome ;) |
| 21:12:25 | anonuser | Chances are I'll be using somethign that requires the gnome libs. |
| 21:12:28 | anonuser | might as well build it all |
| 21:12:34 | djwhitt | yeah, true |
| 21:12:57 | djwhitt | it annoys me that so many things require gnome |
| 21:12:59 | djwhitt | oh well |
| 21:14:33 | anonuser | My problem with gnome is it's absurd dependency chain. |
| 21:14:37 | anonuser | 300 packages! |
| 21:14:37 | antares | uh how cool that Rubinius is using git — I am cloning 1.1 gb repository using darcs, it hung 3 times already and consumes 20% of CPU |
| 21:15:45 | djwhitt | antares: hg is also way faster than darcs |
| 21:15:48 | brixen | antares: :) that's after you get darcs built, I think I burnt out my mbp fan building darcs (and ghc) a couple times |
| 21:15:54 | evan | antares: the repo is 1.1G? |
| 21:15:54 | djwhitt | antares: in fact just about everything is faster than darcs |
| 21:15:56 | evan | yikes! |
| 21:15:57 | antares | hey I did not meant to start any holy wars! :) |
| 21:16:22 | brixen | <3 git :) |
| 21:16:26 | anonuser | You have a repo full of code that is 1.1GB? |
| 21:16:48 | djwhitt | he's tracking mozilla development using darcs ;) |
| 21:16:55 | evan | fun. |
| 21:17:02 | evan | i remember when i first compiled netscape 6 |
| 21:17:12 | evan | right after they open sourced it |
| 21:17:15 | djwhitt | heh, I was just joking btw I have no idea what he's doing |
| 21:17:16 | evan | took like 3 days |
| 21:17:16 | antares | evan, that's right, repo is 1.1g in size |
| 21:17:46 | dbussink | not only code i hope :) |
| 21:17:47 | evan | fun! |
| 21:18:30 | anonuser | No way you have 1.1GB full fo text. |
| 21:18:30 | antares | djwhitt: ;) |
| 21:18:44 | srbaker enters the room. | |
| 21:18:53 | anonuser | Are you commiting binary objects?! |
| 21:19:18 | djwhitt | I hope not, that would really suck in darcs |
| 21:19:21 | djwhitt | no binary diffs |
| 21:21:07 | anonuser | no one does binary diffing right, except git and hg maybe |
| 21:21:29 | srbaker leaves the room. | |
| 21:21:29 | antares | anonuser, not just of code actually — some assets are present |
| 21:22:12 | srbaker enters the room. | |
| 21:22:31 | dbussink | i have a 3gb svn repo that contains my graduation project, lots of recorded eeg data in there |
| 21:23:48 | anonuser | I've always wanted to play with alien brain for asset management |
| 21:24:14 | jayWHY_ enters the room. | |
| 21:28:14 | antares | dbussink, sure thing. I once cloned the kernel, it was like 400M for the whole repo |
| 21:28:45 | dbussink | anonuser: i don't think any of my subjects could qualify as alien :P |
| 21:34:47 | antares | anonuser, not me, the UI folks — we are going to split this repository |
| 21:34:59 | AndrewO leaves the room. | |
| 21:40:15 | jayWHY leaves the room. | |
| 21:40:16 | chris2 leaves the room. | |
| 21:42:36 | anonuser | dbussink, you've used Alient brain? |
| 21:42:43 | anonuser | antares, gotcha. |
| 21:42:43 | antares | djwhitt, I am about to move to git but need something working to keep history. darcs-to-git I found stuck on this repository :) |
| 21:43:12 | anonuser | http://www.softimage.com/products/alienbrain/ <-- for artist and design folks |
| 21:44:55 | evan | go go go! |
| 21:45:10 | evan | is watching to see how many frames deep an infinite recursion in C got |
| 21:45:14 | evan | 65k so far! |
| 21:45:21 | evan | 80k! |
| 21:45:30 | evan | anyone want to take bets? |
| 21:45:35 | evan | 100k! |
| 21:45:55 | evan | 130k! |
| 21:46:04 | evan | i'll take a line on whether or not gdb will crash before getting to the top |
| 21:46:19 | evan | hurry, it can't be long now! |
| 21:46:30 | drbrain | heh |
| 21:46:38 | evan | 174709 is the final! |
| 21:47:32 | crossblaim leaves the room. | |
| 21:48:22 | obiejuan leaves the room. | |
| 21:48:23 | antares | team pack for just $32K, not bad :) |
| 21:50:30 | seydar enters the room. | |
| 21:51:30 | antares | evan, is it finite? :) |
| 21:51:41 | evan | seems as much! |
| 21:51:44 | anonuser | One dollar bob. |
| 21:51:59 | evan | it's not the loops fault though |
| 21:52:09 | evan | it would have happily continued until the heat death of the universe |
| 21:52:31 | anonuser | memory contraint? |
| 21:53:34 | moofbong leaves the room. | |
| 21:53:56 | evan | not the loops fault. |
| 21:54:03 | dodecaphonic leaves the room. | |
| 21:57:00 | nemerle enters the room. | |
| 22:01:52 | nicksieger enters the room. | |
| 22:04:21 | e |