Index

Show enters and exits. Hide enters and exits.

00:03:18benstiglitz leaves the room.
00:09:11agile leaves the room.
00:14:24Arjen_ leaves the room.
00:21:25wmoxam leaves the room.
00:22:20therealadam leaves the room.
00:34:51ruetarcieri: Net::HTTP
00:35:37obvio enters the room.
00:39:11wycatshey drbrain
00:39:19drbrainsup
00:39:25wycatswhy isn't there a simple way in autotest to set up a mapping
00:39:30wycatslike a .autotest with a YAML
00:39:44wycatsor something equally trivial
00:40:08wycatsthat
00:40:20ezmobius leaves the room.
00:40:35ezmobius enters the room.
00:40:36drbrainwhat is hard about the .autotest?
00:40:51mapar leaves the room.
00:40:51drbrainit's only four lines right now, and is super flexible
00:41:18bitbang enters the room.
00:42:17bitbang leaves the room.
00:44:58wycatsI mean for individual apps
00:45:04wycatsnot the system-wide one
00:45:11wycatsbasically to simplify the way you have to specify maps
00:47:24drbrainyou can put a .autotest in the project directory
00:48:30drbrainfor example, there's a .autotest in rubinius
00:48:31wycatsand use it to specify maps?
00:48:41wycatsit looks like it requires a whole procedure
00:48:51wycatsat least I had to go through a procedure to get it working on merb
00:49:02wycatswhat I really want is a simple way to say: here's the map
00:49:43drbrainAutotest.add_hook :initialize do |at| at.add_mapping /.../ do |_, m| Dir["..."] end
00:51:23drbrainyou can also throw in exception directories and whatnot to say "don't bother looking at this"
00:51:44wycatsseems like I have to do some crazy shit with discovery
00:51:58drbrainno, just add_mapping
00:52:14wycatsin Merb, we did it inside of class Autotest::MerbsourceRspec < Autotest
00:52:16wycatswas that wrong?
00:53:08dctanner leaves the room.
00:53:15drbrainis this for merb apps, or is this a merb autotest runner?
00:53:32drbrainI may be confused
00:53:36wycatsmerb autotest runner
00:53:52drbrainok
00:54:03wycatswe ended up having to duplicate all the Rspec logic in our the class
00:54:05drbrainhave you looked at autotest/rails.rb ?
00:54:08wycatsyeah
00:54:12wycatsthey had to do that too
00:54:27wycatsthere didn't seem to be an Rspec superclass we could inherit from
00:55:26drbrainhrm, let me see what they did
00:55:45wycatsalso, add_mapping takes a lambda
00:55:47wycatswhich seems silly
00:55:49wycatsfor simple cases
00:55:56wycatslike I have this: at.add_mapping(%r{^bin/thor}) {|_,_| at.files_matching %r{spec/thor_runner_spec}}
00:56:21wycatsit would be great if I could do add_mapping "bin/thor", "spec/thor_runner_spec.rb"
00:57:44drbrainyeah
00:58:05drbrainin that case, dropping files_matching would make sense
00:58:10wycatsor even a regex on both sides
00:58:27wycatsand assume that a regex means {|_,_| at.files_matching regex }{
00:58:34drbrainin rspec 1.1.3, the autotest/rspec.rb is 74 lines
00:59:03drbrain%r{} is // where you don't have to escape "/"
00:59:05blakewatters enters the room.
00:59:29wycatsdrbrain: duh :P
00:59:36wycatsbut I can't provide a regex
00:59:41wycatsI have to provide a lambda
01:00:07wycatsactually... a glob would probably be better than a regex
01:00:13drbrainadd_mapping ... do "hard_coded_path" end :/
01:00:17drbrainnot the best
01:00:35drbrainbut, I don't see where rspec is doing extra magic here
01:00:59drbrainmore commonly I've paramaterized the regex, and used the match object to paramaterize a glob
01:01:02wycatsglob => glob is probably a more common case
01:01:08wycatsyeah
01:01:39wycatsI don't mean to be nitpicky but it just seems like the API could be cleaner
01:01:42wycatsfor simpler cases
01:01:58wycatsthere's a bit of a learning curve for setting up autotest maps that imho does not need to exist
01:02:09wycatsmaybe the glob could take gsub params
01:02:17wycats'spec/\1_spec.rb'
01:02:52drbrainthey've got three standard rspec mappings and a bit of code to teach autotest about rspec
01:03:48drbrainlooking at Autotest#test_files_for, that might complicate things a bit
01:04:22blakewatters leaves the room.
01:05:01drbrain16:55 wycats: like I have this: at.add_mapping(%r{^bin/thor}) {|_,_| at.files_matching %r{spec/thor_runner_spec}}
01:05:13drbrain16:56 wycats: it would be great if I could do add_mapping "bin/thor", "spec/thor_runner_spec.rb"
01:05:16drbrainbasically
01:05:27blakewatters enters the room.
01:05:33wycatsyeah
01:05:54wycatsbut then I modified it to say that the second param might support gsub params.... like 'spec/\1_spec'
01:06:05anteaya leaves the room.
01:06:07wycatsthe basic idea is that I wish it was easier to set up simple mappings
01:06:13drbrainwycats: the autotest/discover.rb lets autotest say "if I see X, load up autotest/merb.rb" which has merb-specific mappings
01:06:21wycatsright
01:06:24wycatsand we use that
01:06:33wycatsbut (1) we have to reinvent the rspec stuff
01:06:36wycatsas far as I can tell
01:06:42wycatsand (2) most of our maps could be simplified
01:07:04zenspidereasier? just because they're regexps?
01:07:12wycatszenspider: no problem with regex
01:07:15wycatsproblems with lambdas
01:07:19wycatswhere not necessary
01:07:29wycatsat.add_mapping(%r{^lib/merb-core/controller/([^/]*)\.rb$}) { |_, m| at.files_matching %r{^spec/(public|private)/abstract_controller/.*_spec\.rb} }
01:07:32wycatsfor instance
01:07:36zenspiderah
01:07:40anteaya enters the room.
01:07:53zenspideryeah... those 2 extra braces are a bitch. :P
01:08:02evanhe's paid pre-brace
01:08:06evani worked it out with Ezra
01:08:11zenspiderI could see us extending it to take two strings tho
01:08:11evanper-brace.
01:08:12evanrather.
01:08:15zenspiderper. :P
01:08:21zenspideryou're fired
01:08:26wycatszenspider: it's not the two braces :P
01:08:27zenspidersorry... you didn't understand that
01:08:33zenspideryour fired
01:08:36zenspider:P
01:08:36evan:)
01:08:36wycats:P
01:08:38wycatsur
01:08:43wycatsit's the extra mental overhead you get when you get started with mappings
01:09:07wycatsit's nice that the power is there, but it's also nice to not have to go through a bunch of rigamarole when you want to do something simple :)
01:09:10drbrainwycats: is the standard way to test a merb app to use rspec?
01:09:17wycatsyes
01:09:23wycatsthis is for the merb source
01:09:24wycatsnot a merb app
01:09:34drbrainoh, merb source
01:09:46wycatsI'm more concerned about having to dump in all this rspec stuff that's the same as every other rspec project
01:09:49wycatslemme pastie
01:09:54drbrainin that case, just drop in a .autotest in the top of the merb tree
01:09:59zenspiderwhat's the reinvent part?
01:10:15drbrainand so long as you have a spec/ dir the rspec autotest will be there
01:10:22drbrainthen you can extend rspec's mappings
01:10:26wycatshttp://pastie.caboo.se/private/bnldtydcxanw2uvns7ydpa
01:10:34wycatswhat's the superclass?
01:10:41zenspiderI might be intermittant on the paying attention part. digging into String#unpack and horrified.
01:10:50wycatsis there another one other than Autotest we should be using
01:10:59wycatszenspider: I saw you fixed up my admittedly horrific Array#pack :P
01:11:08zenspiderwtf?
01:11:14wycats?
01:11:22wycatsI saw a bunch of activity on it
01:11:36drbrainwycats: delete everything except Autotest.add_hook :initialize block, I think
01:11:38wycatsI wrote the very first pass of that, which I am admitting was horrific
01:11:40zenspiderwait... I don't get why there is so much code in here... how old did you pull from rspec?
01:11:54wycatswe copied from Rails
01:11:54zenspiderwycats: you wrote pack? I thought jeremy roach did
01:12:04wycatszenspider: maybe he rewrote it?
01:12:13wycats#pack was the first thing I did on rbx
01:12:16zenspiderfrom my rails plugin for autotest?
01:12:20wycatsright
01:12:23stepheneb enters the room.
01:13:32zenspiderwycats: you should dump everything you have and start over... you either pulled a looong time ago, or someone crufted a lot up
01:13:40zenspiderthe only def I have in rails.rb is path_to_classname
01:13:50zenspiderand that's just because they tardedly put Test on the end
01:14:30zenspiderI doubt you need a whole subclass and all... I bet you can get by just fine now with a simple .autotest and some basic hooks
01:14:41zenspiderprolly 25% of the code you have now
01:15:13zenspiderin fact, just your init hook...
01:16:01zenspiderthe rest you can probably get from the rspec plugin
01:16:17zenspiderlooks like you need the one tweak at the bottom because you use your own runner?
01:16:20zenspider(why?)
01:16:23drbrainand automatically, since you have a spec/ dir
01:17:30wycatszenspider: we have our own runner because we run test files in separate processes
01:17:39wycatshit me up next time we're in the same place and we can argue about it
01:18:11drbrainRailsConf, likely
01:18:26zenspideryeah. so dump everything. start with an empty .autotest file, pull in your :initalize hook, and see where you stand
01:18:32jeremydurham enters the room.
01:18:39zenspiderthe rest you can probably do with really minor overrides to rspec's plugin
01:19:19benny leaves the room.
01:19:19drbrainprobably just subclass and add the one override for your special runner
01:20:48zenspiderno, don't subclass...
01:21:00zenspiderthen you have to go the autotest/discover.rb route
01:21:05zenspideroverkill
01:22:01wycatsso if I just use .autotest it'll use rspec automatically
01:22:05wycatsand add my additional hooks
01:22:15drbrainyeah
01:22:28wycatshow do I get my spec_commands in?
01:25:53mernen enters the room.
01:27:32zenspiderwycats: for that go ahead and open their runner class in your .autotest
01:27:57zenspideryou'll only want the one or two methods at the bottom... it should be fine
01:28:04zenspideralias them aside and monkeypatch
01:28:33wycatsby their runner class, you mean the Rspec one?
01:29:45zenspideryeah
01:30:00zenspiderit'll be RspecAutotest or something like that
01:30:35pauldix leaves the room.
01:35:42wycatscoo
01:35:45Yurik leaves the room.
01:36:34evansweet, type-safe accessors to slots are working.
01:38:41GMFlash leaves the room.
01:39:55wycats:-D
01:47:50lstoll leaves the room.
01:57:58trythil enters the room.
01:59:48jtoy enters the room.
02:01:33ezmobius leaves the room.
02:01:46ezmobius enters the room.
02:05:27evana veritable shitton of code pushed to cpp
02:08:12rueYou really should switch to the metric system
02:08:32evanwho said it wasn't a metric shitton?
02:08:37wmoxam enters the room.
02:09:27ezmobiussweet
02:09:35ezmobiusdoes it run code yet? or still being wired up?
02:09:38trythil leaves the room.
02:09:43evangetting very close to running code
02:09:43drbrainevan: they spell it "tonne"
02:09:50evandrbrain: touche
02:10:19evanthe decision to remove ivar_as_index meant that I had to add a bit more infrastructure on the VM side
02:10:24evanbut thats all wired up now
02:12:32cremes_ leaves the room.
02:12:33drbrainyay! no more ivar_as_index!
02:12:42ezmobiusso now all ivars are just real ivars?
02:12:50cremes_ enters the room.
02:13:06drbrainI was never fond of it
02:13:13evanme neither
02:13:16evanit was super brittle
02:13:29evanezmobius: no, they just look that way
02:13:36evanthe VM takes care of mapping them to slots as needed now
02:13:41ezmobiusahh cool
02:13:47evanthe compiler isn't even aware
02:14:04evanthe VM performs transforms on the bytecode before executing the CM
02:14:09evan(the first time only)
02:14:22evanone of the is type specialization
02:14:34evanit's very simple now
02:14:45evanbut the infrastructure is in place for lots more optimizations now
02:14:54rueHm, are there any issues with using them as regular ivars?
02:15:17evanrue: there is a bootstrapping issue
02:15:20evanand a performance issue
02:15:32flori leaves the room.
02:15:32dlee leaves the room.
02:16:03shame enters the room.
02:16:12dlee enters the room.
02:16:12flori enters the room.
02:17:36eventualbuddha leaves the room.
02:18:46yugui enters the room.
02:31:40VVSiz_ enters the room.
02:35:45ShayArnett enters the room.
02:39:30jeremydurham leaves the room.
02:40:01jeremydurham enters the room.
02:41:26wmoxam leaves the room.
02:44:42ShayArnett leaves the room.
02:46:25ShayArnett enters the room.
02:47:34obiejuan enters the room.
02:48:10ezmobius leaves the room.
02:49:53VVSiz leaves the room.
02:53:35lstoll enters the room.
02:59:46jeremydurham leaves the room.
03:02:36anteaya leaves the room.
03:09:22lopex leaves the room.
03:10:15Fullmoon enters the room.
03:18:23jeremydurham enters the room.
03:19:40trythil enters the room.
03:20:07agardiner enters the room.
03:20:37agardinerhowdy
03:23:09wmoxam enters the room.
03:23:27benburkert leaves the room.
03:34:22rueMorning, agardiner
03:35:00agardinerhi rue. how's the back healing up?
03:40:48benburkert enters the room.
03:43:53blakewatters leaves the room.
03:48:22m7d enters the room.
03:49:36obvio171 enters the room.
03:50:39obvio leaves the room.
04:00:53wmoxam leaves the room.
04:04:13m7d_ leaves the room.
04:08:39m7d_ enters the room.
04:09:55GMFlash enters the room.
04:13:57ezmobius_ enters the room.
04:15:06mernen leaves the room.
04:15:56wmoxam enters the room.
04:20:46ShayArnett leaves the room.
04:24:42m7d leaves the room.
04:25:24rueagardiner: Alright
04:26:11rueStill kind of fuzzy, but I should be off the anti-inflammatories Saturday
04:26:31srbaker leaves the room.
04:27:59rueNice. Kent Beck will be at RC
04:28:12rue(First time I am looking at the schedule o.O)
04:33:50srbaker enters the room.
04:34:19agardinerargh... sounds painful, but good to hear you're on the mend
04:36:23evanagardiner: hows the packing going?
04:36:34agardinerhey evan
04:36:36agardinernot too bad
04:36:48agardinernot so much packing as just running around tying up loose ends
04:36:58agardinerthe movers are doing most of the packing, which is great
04:37:16evannice
04:37:32agardineryeah, it makes things a whole lot less hassle
04:37:46agardinersaw you're last cpp check-in
04:37:58evanthoughts?
04:37:59agardinerseems like you are getting close
04:38:03evanother than it's too damn big.
04:38:19agardinerthe check-in, or the VM?
04:38:24evanthe check-in
04:38:42evanthe VM is crystalizing
04:38:44agardineryeah, it was a biggy - but i guess that's a weeks work
04:38:50evanyeah
04:38:56agardinerthe VM is looking really good
04:39:11agardinerthe organisation is *much* better, and easier to follow
04:39:15evanyay!
04:39:43evani love how the method lookup logic came together
04:39:52agardineri was just going to comment on that
04:39:54evanas a series of delegated classes
04:39:59agardinerits amazing how few lines it is now
04:40:03evanexactly
04:40:18rueThe new stuff is quite nicely condensed, certainly
04:40:34evanright now, i'm going to wire better method executon in
04:40:43agardineri'm curious to know your thoughts/plans for vmmethod...
04:40:46evanhave you noticed that there is a new superclass of CompiledMethod?
04:40:49evanExecutable
04:40:56agardineryeah, i saw that
04:40:59agardinerwhat's it for?
04:41:32evanthe idea is that anything thats a subclass of Executable is something the VM itself can execute
04:41:37evanin terms of it can be in a MethodTable
04:41:43agardinerooh, nice
04:42:09evanattr_* is going to generate Attr* instances which are Executable subclasses
04:42:26evana ruby executable class is paired with a VM class of similar name
04:42:40evanthere is a field in Executable called compiled
04:43:03evanmight change the name, but basically it's a pointer to the VM object that handles the execution of the method
04:43:24evanso that method 'execution' becomes
04:43:26agardinerok, so the thing that understands the compiledmethod or whatever it has to execute?
04:43:55evan((VMExecutable*)method->compiled->pointer)->execute(state, method)
04:44:04evanexecute is a C++ virtual function
04:44:23agardinervery nice - a ready-made hook for jit-ing
04:44:28evanyep.
04:44:39evanand FFI
04:44:55agardinerand primitives
04:44:58evanyep
04:45:00agardiner?
04:45:22evanVMMmethod will have a subclass called VMMPrimitiveMethod
04:45:35evanthat tries the primitive first and if it fails, delegates to it's superclass
04:45:45agardineroh, very nice
04:45:51agardinerOO ftw
04:45:53evanit's still stackless, so execution of a VMMethod means repointing things and returning
04:46:28evanalso, those things that need arguments get them from a Message object
04:46:31evanrather than looking on the stack
04:46:43evanthus things are abstracted away from the execution model a bit
04:46:50evanletting us grow more
04:47:03agardineryeah, i also saw the new logic there to pull in the args when creating a context
04:47:08agardinervery neat
04:47:11evanyep
04:47:17evanarguments are pulled in inside the VM now
04:47:38agardineri think that's a far better spot for it, personally
04:47:43evanme too
04:47:51evanevery VM out there handles arguments inside the VM
04:47:52agardinerit was the part i always had difficulty following before
04:47:55evanfor a number of good reasons
04:48:13agardineryeah
04:48:29evaneven parrot has a set of specialized arg bytecodes
04:48:45agardinerso, are you going with direct threading initially? or just a big switch to start with?
04:49:05evangetting stuff running with big switch
04:49:09evanthen add direct threading back in
04:49:39evani wont have time beore railsconf, but i'm pretty sure i've come up with a scheme that will let us use LLVM
04:49:59agardinerwill that be a different VMExecutable subclass for each?
04:50:14agardineroh wow... that's pretty awesome
04:50:37evanthe LLVM still has overhead and such
04:50:41evanit will still be stackless
04:50:49wycats_ leaves the room.
04:50:50evanbut it will basically give us another speed boost
04:51:02wycats_ enters the room.
04:51:11evanand it will be a lot like the call threaded paper that people were talking about a while ago
04:51:35agardineryeah, i'm still interested in that idea...
04:51:55evani have this other totally crazy idea about using clang (a new C frontend to LLVM) to let rubinius execute .c files directly
04:52:12evanno external compilation
04:52:28agardinerthat's... interesting
04:52:48evanby hooking in, we could do source transformations on C code too
04:52:53evanto make it more GC friendly
04:53:09evanmaking subtend easier
04:53:41evanbut thats a ways out still
04:53:43agardinerahh... now the benefits become clearer! :-)
04:53:51evanthat was my lunch reading today
04:54:02agardinerhehe
04:54:08evanthats got some awesome properties though
04:54:18rueI need to figure out something for the schedule. The possibility of me waking up at 8am is pretty remote
04:54:20evanlike running .c files on windows
04:54:26evanwithout precompiling and with visual studio
04:54:33evanand without VS
04:54:35agardineryeah, that'd be a plus
04:54:52evanrue: is the RC schedule out?
04:56:42evanoh good
04:56:48evanmy thing isn't til 2:50
05:02:13agardinerso, thinking about the current debugging arch and translating it to the new VM...
05:02:35evank
05:02:40agardinerdoes a task still have a cache of what would now be the VMMethod of the CM it is executing?
05:03:24agardinerin other words, do we still have the ability to customise the CM on a per-task basis?
05:03:52agardiner(so that we can step)
05:04:02evanshould be a lot easier
05:04:05evannot such a hack like before
05:04:15agardinergeez, that would be nice
05:04:42agardinerit took a fair bit of effort to get that working
05:04:59evanbasically, we'll just wire a method into MethodContext called, say, #adjust
05:05:03evanthat takes a CompiledMethod object
05:05:03GMFlash leaves the room.
05:05:13GMFlash enters the room.
05:05:13evanand specializes it into a VMMethod object
05:05:23evanand installs the VMMethod object into the MethodContext
05:05:28evanso when it's restored, it uses the new one
05:05:33evankeeping the original stuff clear
05:05:40agardinera CM, or just the iseq?
05:06:14evancould be either.
05:06:20agardinerk
05:06:30evandoesn't really matter
05:06:43evana VMMethod is mainly a specialization of an ISeq
05:06:59agardineryeah, i guess its not done so frequently for the overhead of dup-ing a CM to matter
05:07:07evanit's where the a C array of the opcodes for that ISeq live
05:07:58agardinerincidentally, i had another thought about the assertions in yield_debugger
05:08:12evanoh?
05:08:14agardinerseems like they should be exceptions rather than assertions (no biggy)
05:08:32agardinerand that the check to see if there is a reader should go away
05:08:45agardinersince it won't work in multi-threaded code
05:09:10agardineri.e. we could be handling a yield_debugger already when another thread executes yield_debugger
05:09:23evanyeah, we wont have any more C assertions
05:09:29agardinerso the second one should wait rather than cause an exception/assertion
05:09:33evanwe'll have C++ exceptions that get translated back into Ruby exceptinos
05:09:51agardineryeah, figured - another nice bonus
05:10:09agardineralso, the first check where we look for a debug channel...
05:10:18agardinerat present it just returns if it doesn't find one
05:10:26evanyeah
05:10:27agardinerwhich won't work, as discussed before
05:10:29evanyou mentioned that
05:10:33evanit will raise an exception
05:11:50agardineri wonder if it would be better/possible to have a way to just proceed as though you didn't hit a yield_debugger...
05:12:17agardinerbeen thinking about the fact that we've got 32-bits for the opcode, but only a hundred or so opcodes...
05:12:37evanwhere would it get the original opcode from?
05:12:50agardinermaybe the yield_debugger opcode could stash the original opcode in the high bits
05:12:55evanor do you want to use the debug opcode as a catch all
05:12:56evanyeah
05:13:01agardinerwould need a mask when checking for a yield_debugger
05:13:13evanthat opcode could be in a slow path
05:13:26evanwhere it's taken apart
05:13:28agardineryeah, if nothing else matched
05:13:37agardinerthat's what i was thinking
05:13:55agardinerbe nice to be able to just carry on if there was no debug channel
05:13:55evansure, thats easy enough to do
05:13:58AndrewO leaves the room.
05:14:02evanplus, it means less work
05:14:18evanwe could even have the VM retain that fact itself
05:14:23agardineryeah, not having to switch out the yield_debugger to resume would be huge!
05:14:26evanuse a bit as a flag
05:14:34agardinerthats another major pita at the moment
05:14:37evanthat indicates 'one shot' or 'persist'
05:14:48evanoh, bigtime.
05:15:17agardinerman, i can see breakpoint.rb getting a good gutting! :-D
05:15:22evan:)
05:15:41evanthat could work pretty easily
05:15:44agardinerit would be so much more robust
05:15:53evanbeacuse Task has a secondary function to execute opcodes
05:15:56evanexecute_stream
05:15:58agardinernot to have to rely on breakpoint.rb to fix things up so the task can be resumed
05:16:00evanthat I use for testing
05:16:14evanbut could use it for out-of-band opcode execution
05:16:29evanie, this slow path could see that it's a debugging instruction
05:16:58evanand when it's restored, execute the original opcode without changing the main stream
05:18:00agardinerso yield_debugger would do what it does, then call execute_stream after it receives on the control channel?
05:18:21evanyeah
05:18:56evanto make that work though, i need to wire it up so that a Task can register some code to run when it's restored
05:19:01agardineryou know what, rather than having a bit set to say whether the yield_debugger should persist or be one-shot, it should be the message on the control channel that determines it
05:19:03evansome VM code
05:19:31evanagardiner: oh, sure.
05:19:32evanthat works.
05:19:37agardinercause that way, a breakpoint can be deleted and we don't have to do anything except change the msg
05:19:56evanthat could be wired up
05:20:09agardineri like this... it sounds much cleaner
05:20:41agardinerbut also more robust
05:20:50evanyeah.
05:21:20evanthe new scheme (which is really the old old scheme) of using one dedicated stack per MethodContext is also going to make things more robust
05:21:34agardineryeah, much
05:21:54agardinereasier and more self-contained
05:22:26evanyeah
05:22:37evanit should eliminate the problems with Continuations
05:23:20agardineri've gotta say, the rewrite not only has all the benefits i blogged about before, it also is knocking off a lot of rough corners in the architecture!
05:23:25agardiner:-)
05:23:35evanthat was the hope
05:24:11evanand is the reason it's taken longer than I originally thought
05:24:16evanplus I suck at time estimates.
05:24:52agardinerwell, i wouldn't worry *too* much about that... it'll be a time saver in the medium to long term
05:24:57evanyeah
05:25:33agardinerbut people also want rails to run now! :-D
05:25:43evan:)
05:25:43agardinertough to please everyone
05:25:48evanyeah
05:25:53evanbut i can take the heat.
05:26:20agardiner:-)
05:26:42agardinerwell, i think its time for some lunch
05:33:28brixenevan: http://pastie.org/193456
05:33:41brixenevan: does that look reasonable
05:33:42brixen?
05:33:59brixenthe Kernel#__add_method__ 2nd spec fails before your fix
05:34:48evanyeah, thats ok
05:34:51brixenok
05:34:52evanit's a bit strange to test
05:34:55brixenyeah
05:35:02brixenI was really scratching my head for a minute
05:35:11brixenthanks
05:44:24boyscout1 commit by Brian Ford
05:44:25boyscout * Some specs for Kernel#__add_method__ and Module.__add_method__.; 4e702d1
05:52:53rubuildius_amd64Brian Ford: 4e702d10b; 2105 files, 6851 examples, 24674 expectations, 0 failures, 0 errors; http://rafb.net/p/cFSWJS53.html
05:57:41blakewatters enters the room.
05:59:30rubuildius_ppcBrian Ford: 4e702d10b; 2105 files, 6853 examples, 24700 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/193462
06:04:58blakewatters leaves the room.
06:08:17srbaker leaves the room.
06:11:29agardiner leaves the room.
06:20:54yugui leaves the room.
06:21:50yugui enters the room.
06:23:31wycats_ leaves the room.
06:24:27stepheneb leaves the room.
06:31:42ttmrichter enters the room.
06:41:31wycats_ enters the room.
06:42:13murphee enters the room.
06:43:15murphee leaves the room.
06:53:08trythil leaves the room.
06:58:50srbaker enters the room.
07:06:37lstoll_ enters the room.
07:06:44wmoxam leaves the room.
07:10:13benny enters the room.
07:16:50lstoll leaves the room.
07:26:48dysinger leaves the room.
07:33:29benburkert leaves the room.
07:35:03imajes enters the room.
07:38:31wycats_ leaves the room.
07:40:48obvio leaves the room.
07:41:07dlee_ enters the room.
07:46:17imajes leaves the room.
07:47:24mkrauskopf enters the room.
07:55:16qwert666 enters the room.
07:57:54yugui leaves the room.
08:01:18boyscout2 commits by Brian Ford
08:01:20boyscout * Fixed constant type clash for ModuleSpecs modules.; 11dd3ae
08:01:20boyscout * Rake tasks for MSpec as a git submodule (not yet functional).; 9abde1b
08:12:51rubuildius_amd64Brian Ford: 11dd3ae2c; 2105 files, 6854 examples, 24680 expectations, 0 failures, 0 errors; http://rafb.net/p/OkmZ1E36.html
08:16:33m7d_ leaves the room.
08:16:36gnufied enters the room.
08:17:15rubuildius_ppcBrian Ford: 11dd3ae2c; 2105 files, 6856 examples, 24706 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/193497
08:18:30thehcdreamer enters the room.
08:19:51Skip enters the room.
08:19:56srbaker leaves the room.
08:28:58dlee_ leaves the room.
08:41:03ezmobius leaves the room.
08:45:21lstoll enters the room.
08:46:41yaroslav enters the room.
08:50:37lstoll leaves the room.
08:51:41octopod enters the room.
08:52:07lstoll_ leaves the room.
08:54:54mutle enters the room.
08:57:09obvio enters the room.
09:11:06Arjen_ enters the room.
09:12:26GMFlash leaves the room.
09:24:30obvio leaves the room.
09:25:25obvio enters the room.
09:29:23ding enters the room.
09:31:13eule enters the room.
09:40:46Yurik enters the room.
09:40:47imajes enters the room.
09:43:24benny leaves the room.
09:48:24eule leaves the room.
09:54:02sudoer enters the room.
09:57:44jtoy leaves the room.
10:01:30Blinchikis away: I don't need a weapon. I have a personality.
10:11:31obvio leaves the room.
10:12:18boyscout1 commit by Evan Phoenix
10:12:19boyscout * Add late night hack of an Iconv, but works.; 0a9466c
10:12:27evanthat was a good late night mental exercise
10:13:42obvio enters the room.
10:13:48naeu enters the room.
10:14:31obvio leaves the room.
10:22:50rubuildius_amd64Evan Phoenix: 0a9466c47; 2105 files, 6854 examples, 24680 expectations, 0 failures, 0 errors; http://rafb.net/p/XlROVF24.html
10:27:33rubuildius_ppcEvan Phoenix: 0a9466c47; 2105 files, 6856 examples, 24706 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/193528
10:35:49obvio enters the room.
10:46:22obvio leaves the room.
10:49:54obvio enters the room.
10:55:50obvio171 enters the room.
10:56:23obvio leaves the room.
11:02:09obvio171 leaves the room.
11:03:06obvio enters the room.
11:03:44obvio leaves the room.
11:04:08Blinchikis back (gone 01:02:37)
11:04:39obvio enters the room.
11:12:09sudoer leaves the room.
11:19:39qwert666 leaves the room.
11:34:45yugui enters the room.
11:37:48obvio leaves the room.
11:41:21obvio enters the room.
11:46:20obvio leaves the room.
11:47:06obvio enters the room.
11:48:42obvio leaves the room.
11:49:48obvio enters the room.
11:50:39obvio leaves the room.
12:16:32benny enters the room.
12:28:58atmos leaves the room.
12:57:59yugui leaves the room.
12:58:16yugui enters the room.
12:59:46xhanjian_ enters the room.
13:00:23obvio enters the room.
13:00:51w1rele55 enters the room.
13:06:36wireless_ enters the room.
13:07:03riffraff enters the room.
13:07:12ding leaves the room.
13:13:41xhanjian leaves the room.
13:16:17rff enters the room.
13:23:54w1rele55 leaves the room.
13:24:37riffraff leaves the room.
13:31:06blakewatters enters the room.
13:39:23blakewatters_ enters the room.
13:39:39blakewatters leaves the room.
13:40:08blakewatters_ leaves the room.
13:44:07webmat enters the room.
13:55:04_mutle enters the room.
13:57:47mutle leaves the room.
14:03:02benny leaves the room.
14:09:15Arjen_ leaves the room.
14:09:21Arjen_ enters the room.
14:09:36AndrewO enters the room.
14:10:40qwert666 enters the room.
14:11:46fbuilesv enters the room.
14:14:00blakewatters enters the room.
14:18:19mutle leaves the room.
14:19:10mutle enters the room.
14:41:40moofbong enters the room.
14:42:11qwert666 leaves the room.
14:42:36rff leaves the room.
14:50:08obiejuan leaves the room.
14:55:17wmoxam enters the room.
15:02:56obiejuan enters the room.
15:08:27chris2 enters the room.
15:12:30hosiawak enters the room.
15:12:30riffraff enters the room.
15:20:01EugZol enters the room.
15:28:25danlucraft enters the room.
15:30:06pth enters the room.
15:31:20NoKarma enters the room.
15:41:15yugui leaves the room.
15:46:08trythil enters the room.
15:49:18gnufied leaves the room.
15:49:30trythil leaves the room.
15:49:42gnufied enters the room.
15:50:14ttmrichter leaves the room.
15:53:21benburkert enters the room.
15:54:26GMFlash enters the room.
16:05:17jtoy enters the room.
16:05:24shame leaves the room.
16:08:01joachimm enters the room.
16:09:55gnufied leaves the room.
16:10:41gnufied enters the room.
16:15:13macournoyer enters the room.
16:16:23benstiglitz enters the room.
16:20:07jpease enters the room.
16:20:19Blinchik leaves the room.
16:21:15Blinchik enters the room.
16:25:01benburkert leaves the room.
16:29:21gnufied leaves the room.
16:30:10gnufied enters the room.
16:30:18obiejuan leaves the room.
16:30:32qwert666 enters the room.
16:32:52naeu leaves the room.
16:34:39naeu enters the room.
16:36:31jtoy leaves the room.
16:40:51therealadam enters the room.
16:42:15gnufied leaves the room.
16:45:24joachimm leaves the room.
16:49:52imajes leaves the room.
16:50:09pth leaves the room.
16:52:00dgtizedevan: cpp branch is missing rubinius::ISeq, so it can't compile/test
17:07:18shame enters the room.
17:08:29stepheneb enters the room.
17:09:07benburkert enters the room.
17:16:24lopex enters the room.
17:16:42naeu leaves the room.
17:17:25evanmorning.
17:17:30evandgtized: hm..
17:17:39evanit's been moved to InstructionSequence
17:17:45evanwhere do you see it called as ISeq
17:17:46evan?
17:24:51evanDefiler: you around?
17:28:12ShayArnett enters the room.
17:30:11benburkert enters the room.
17:31:47mutle leaves the room.
17:32:36riffraff enters the room.
17:38:26fbuilesv leaves the room.
17:38:55yaroslav leaves the room.
17:40:15hosiawak leaves the room.
17:43:09ShayArnett_ enters the room.
17:43:10ShayArnett leaves the room.
17:44:55ShayArnett leaves the room.
17:45:56ShayArnett enters the room.
17:53:13dbussinkevan: you didn't write specs for iconv ;)
17:53:25dbussinkbut cool that is works with not that much of an effort
17:53:28dbussinkor was it painful?
17:54:12ShayArnett leaves the room.
17:56:47evannah, it was easy.
17:57:02evani just had to aff the set_ffi_lib method to Module
17:57:16evanso that attach_function can pull in functions from dynamic libraries
17:57:26evans/aff/add/
17:59:01trythil enters the room.
17:59:07dbussinkhow does it handle library search paths etc?
17:59:25evanthe OS does whatever it normally does
17:59:32evanin terms of finding it
17:59:39Defilerevan: Oops, sorry. I was scrolled up and didn't notice
17:59:43dbussinkld_library_path stuff then
17:59:44Defilerevan: Still need me?
17:59:52rff enters the room.
17:59:59evanDefiler: wanted to give ya the heads up on lib/iconv.rb
18:00:02evanhacked it up last night.
18:00:06evanseems to work
18:00:10dbussinkwondering whether it would easily integrate with libraries installed using for example macports
18:00:22evanit's also a good example of using FFI to bind to a dynamic library
18:00:31evandbussink: should
18:00:41Defilerevan: Yeah, I saw it. Definitely what I needed as an example
18:00:46evancool
18:00:53evanhopefully that gets you past the dep on it too
18:01:16evanit supports like 60% of the API in MRI's iconv.c
18:01:58DefilerYeah, it looks like enough for JSON
18:02:50joachimm enters the room.
18:02:53rff leaves the room.
18:03:45evansweet
18:03:50evanthat was my late night mental exercise
18:04:16dbussinkhmm, now i'm wondering about whether mysql would work in my case
18:04:28dbussinkinstalled using the mysql installer from mysql.com
18:04:29evanwhich case is that?
18:04:37dbussinki suspect it will need some extra setting up
18:04:45evando you have a mysqlclient.so?
18:04:58evanor .dylib, .bundle, or .dll
18:05:07dbussinkyeah, but it floats around somewhere in /usr/local/mysql/lib or something like that
18:05:10dbussinknot a standard path
18:05:22evanyou have to tell your dynamic linker about that path
18:05:27evanon linux, in ld.so.conf
18:05:39evanon darwin, you use an env var
18:05:47evanbut you can also give the full path to a library
18:05:55dbussinkyeah, but i wonder whether requiring that is the proper way to it
18:05:59evanand FFI will pick it up
18:06:06evanwell, it's ruby
18:06:11evanso you can probe dynamically
18:06:24dbussinkmaybe a one time configuration that could put something in platform.conf
18:06:36evansure
18:06:37riffraff leaves the room.
18:06:54dbussinkor a message like "aiee, couldn't find dynamic library x, please add to platform.conf:
18:06:55dbussink"
18:06:58DefilerDon't we essentially need an 'extconf.rb' kind of procedure?
18:07:09DefilerSince each library could need a different path
18:07:14dbussinkyeah
18:07:16evanthat looks for a library?
18:07:18evansure
18:08:01DefilerIf you install macports after rubinius, and then want to install some gem that depends on a native library, right now we would be screwed
18:08:15Defiler(native library that you installed with macports, I mean)
18:08:35evanwhy?
18:08:45evanif you let the OS know about the macports lib directory
18:08:47evaneverything is fine.
18:09:18thoughtfiz leaves the room.
18:09:22DefilerRight, yeah. I just mean that we should think about how to make setting that env variable / whatever easy for people
18:09:58joachimm leaves the room.
18:10:12evanlike dbussink said, easy enough to let them set a config value
18:10:33evanbtw, I think i'm slightly wrong
18:10:47evanon darwin, I'm pretty sure that a binary has the full path to the dynamic lib linked in
18:11:41evanbecause otool -L `which irssi` outputs macports paths
18:11:54evanbut i have no /opt/local/lib in any var I can find
18:13:07DefilerSame here, it seems
18:13:20dbussinkyeah ok, but we don't want to link rubinius to everything
18:13:33dbussinkthose locations are determined compile time, not runtime
18:14:43evanright
18:14:45evanno big deal at all
18:15:01evaneither have logic to probe for a library using a set of paths
18:15:05thoughtfiz enters the room.
18:15:14evanor have a config variable for where a library is located
18:19:09thehcdreamer leaves the room.
18:19:33octopod leaves the room.
18:24:35Defilerevan: OK, so in this iconv code.. "libiconv" is not linked into rubinius. What is allowing the FFI system to figure out where libiconv is?
18:24:45DefilerI don't appear to have any env variables that point to where it is
18:24:58evanyou don't need them
18:25:11evandlopen() searches the library path
18:25:12evanman dlopen
18:25:23DefilerOK, and some components of that are just baked in, e.g. /usr/lib
18:25:26evanand you have libiconv in /usr/lib
18:25:48DefilerThe default value of DYLD_FALL- BACK_LIBRARY_PATH is $HOME/lib;/usr/local/lib;/usr/lib
18:25:52Defilerkeen
18:27:10ShayArnett enters the room.
18:27:38benny enters the room.
18:27:47imajes enters the room.
18:28:55evanyep
18:29:40dbussinkbut that means it won't work with macports defaults out of the box
18:29:57dbussinksince they use /opt/local/lib
18:30:26Defilermakes me wonder why they don't set LD_LIBRARY_PATH on install
18:33:28therealadam leaves the room.
18:33:54Arjen_ leaves the room.
18:33:57evandbussink: easy enough to work with macports
18:34:03DefilerWhat is the linux equivalent of dlopen?
18:34:16evanprobe if there is an /opt/local/lib at startup time and add it to the proper env ar
18:34:19evanvar
18:34:22evanDefiler: dlopen
18:34:34DefilerOh, right.. dynamic not darwin
18:35:31DefilerLinux's version of it doesn't appear to include /usr/local/lib in the default search path
18:36:03evani always add it
18:36:04Defilerpresumably distros are handling it in ld.so.conf though
18:36:07evanyep
18:36:15evani always add it to ld.so.conf
18:37:22Defilervirtual memory is a damn cool idea
18:37:51thoughtfiz leaves the room.
18:40:35Defiler When first launched, it struggled under the overhead of the software and operating system, which consumed almost 60 MB on disk, a vast sum at the time[1], leading some wags to suggest that the pre-announce code name for the series, PACIFIC, was actually an acronym meaning "performance ain't critical if function is complete".
18:40:41DefilerThat sounds like us
18:41:01evanhehe
18:44:13thoughtfiz enters the room.
18:49:02ShayArnett leaves the room.
18:49:08ShayArnett enters the room.
18:52:00pth enters the room.
18:57:36TheVoice enters the room.
19:11:18ShayArnett leaves the room.
19:19:13ShayArnett enters the room.
19:20:33benny leaves the room.
19:22:48m7d enters the room.
19:23:37Maledictus enters the room.
19:30:36dysinger enters the room.
19:31:52wycats_ enters the room.
19:43:40benny enters the room.
19:45:46atmos enters the room.
19:53:25GMFlash leaves the room.
19:58:14febeling enters the room.
20:05:00m7d_ enters the room.
20:10:26m7d__ enters the room.
20:11:10enebo enters the room.
20:14:01rueevan: Did we not just talk about #attach_foreign like two days ago? :)
20:14:17evanit was discussed yes
20:14:21evandid i forget what was talked about?
20:14:31rue:from => "libwhatever"
20:14:34evanwhat specificaly are you talking about
20:14:36evanah
20:14:36evanyeah
20:14:43evanwe removed the lib arg a while back
20:14:50evanbecause we were using nil everytime
20:14:59rueThat is why I wrote #attach_foreign :P
20:15:05evanthere is attach_foreign?
20:15:18evanoh, i thought you said attach_method
20:15:22rueNuh
20:15:23evanwhere is attach_foreign?
20:15:49rueIn module.rb. I did not want to mix the two until they converge
20:15:58evanthats a bad place for it
20:16:03evanbecause attach_function is in ffi
20:16:06evanthats why I missed it.
20:17:08evani like the simplicity of my change
20:18:15evanug.
20:18:24evanplus you changed the order of the args and stuff in attach_foreign
20:18:31evanand have keyword options
20:19:07rueRight, that is why it is in module
20:19:15evanwhy does it exist?
20:19:20rueIt also handles .dylib and .bundle
20:19:34evanthats handled in the VM
20:20:04evanwhen did you add attach_foreign?
20:20:14rueI dunno, months ago
20:20:19evanlets remove it.
20:20:27evani don't want to cloud the water
20:20:27rueWhen I changed the VM to handle both extensions
20:20:42rueBut you still need to strip the ext before the dlopen call
20:20:53evanpeople shouldn't be specifying the extension
20:21:03evani think i coded the VM to not append an extension if there already is one too
20:21:05m7d leaves the room.
20:21:37evanthe different order of things is a problem too
20:21:38evanimho.
20:21:41rueOnly for certain extensions.
20:21:43evanof the arguments
20:22:34rueYeah. This reads like the function declaration. I figured it is easier to see which parameter is which. Plus it allows having the optionals conveniently at the end
20:22:59evanwe can't have 2 methods that have identifical functionality with different argument orders
20:23:03evanjust can't.
20:23:07evanone has to go.
20:26:06m7d_ leaves the room.
20:26:17evansince attach_foreign isn't in use, it seems like it's the one to go
20:27:30evanguesses the conversation is over.
20:30:38evanlunch!
20:30:51drbrain... since you're the only one speaking for the past five minutes
20:30:54drbrainsame
20:33:18ezmobius enters the room.
20:37:15rubuildius_ppc leaves the room.
20:37:19rubuildius_ppc enters the room.
20:48:37joachimm enters the room.
20:49:50enebo leaves the room.
20:52:36m7d enters the room.
20:53:57rubuildius_ppcEvan Phoenix: 0a9466c47; 2105 files, 6856 examples, 24706 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/193860
20:57:37DefilerI wonder why MRI doesn't use autoload for the whole stdlib
20:58:02Defilerreferring to StringIO (for example) should just trigger the autoload
20:59:06m7d leaves the room.
21:00:42evan*shrug*
21:00:44evana good question
21:00:53evantoo magic i think
21:01:13evanthey'd have to maintain a mapping in the MRI kernel too
21:01:18evanwhich could be out of date, etc.
21:08:18m7d__ leaves the room.
21:11:38kw enters the room.
21:13:22ezmobius leaves the room.
21:22:26headius enters the room.
21:24:12ShayArnett leaves the room.
21:26:18ezmobius enters the room.
21:27:10evanit's been quiet in here lately
21:27:56dbussinkyeah, but more than 100 people in
21:28:33jazendoes it run doom?
21:28:35evanmaybe that will get more people talking
21:28:38dbussinkhehe, trying to trigger people?
21:28:39jazen:>
21:28:40evanjazen: nope
21:28:49evanbut a doom port would be awesome.
21:28:58evanwhat would we use for graphics?
21:29:03jazengl
21:29:12evansounds fun
21:29:24dbussinkwe can now use ffi for it ;)
21:29:27evanesp if I can hit ~
21:29:35evanand monkey patch enemies to fight themselves
21:30:00evan>> world.pause
21:30:15evan>> enemies = world.current_room.enemies
21:30:33evan>> enemies.each { |e| e.attack! enemies.rand }
21:30:40jazenevan, i vote for nice threads and customizable gc
21:30:53evanwhat form to you see customizable gc?
21:30:59evanknobs to tune it?
21:31:04headiusnice threads?
21:31:08headiusas opposed to mean ones?
21:31:10headiushi all, btw
21:31:12jazenchoose a strategy
21:31:22jazenor write your own
21:31:23evanheadius: hows the comfy chair?
21:31:26jazenwhatever fits the app
21:31:32evanjazen: so, knobs
21:31:43evanwriting a GC is not a casual task
21:31:52jazenwell, yeah, thought you mean knobs as in "knobs to customize one strategy"
21:32:05headiusevan: comfy
21:32:28evanjazen: I do mainly
21:32:31jazenevan, true, but the possibility to use another strategy would put these "omg the ruby gc kills my app" discussions/flames
21:32:39benny leaves the room.
21:32:43evanyou'd like different GC strategy's to choose from?
21:32:58evanwhat do you consider a strategy?
21:33:03jazenat least an option to switch to another one
21:33:29jazenwell
21:33:35jazenthere are several algorithms
21:33:40jazenmark-and-sweep, etc
21:33:41wmoxamum, that's kinda crazy
21:33:42headiusjazen: like JVM's concurrent vs large memory vs etc
21:33:45headius?
21:33:57evanso, selecting whole different GCs
21:33:59jazeni have no in-depth-knowledge, so i don't know how big the effort would be
21:34:07jazenyeah
21:34:10evannot just a different strategy for an existing strategy
21:34:14evaner.
21:34:16evanfor an existing GC
21:34:33jazenyep
21:34:47evanthats doable in the long term
21:35:00jazensame would be nice for memory-allocation i guess
21:35:01evanthe VM is wired to the ObjectMemory system using a standard interface
21:35:18qwert666_ enters the room.
21:35:22evani doubt we'll have time in the near term unless someone steps up and writes another GC
21:35:45jazensure, i wouldn't call it a v1.0 must-have too ;)
21:35:56evanbut knobs to customize the GCs we do have would be easy
21:36:00headiusthere aren't many VMs with swappable GCs
21:36:01evani've been planning on that for a while
21:36:14evanletting you indicate sizes and ratios
21:36:25jazensounds good
21:36:26evanheadius: yeah
21:36:32jazenevan, what about symbol-gc?
21:36:41benny enters the room.
21:36:43jazenare there plans to fix this issue?
21:36:48evanyeah
21:36:55evanagain, not sure if we'll get to it for 1.0
21:37:00evanbut it's fairly straight forward
21:37:01headiusJVMs all have swappable GCs, but JVMs are also 13+ years old
21:37:07headiuskinda have to evolve over that time
21:37:29evanyeah
21:37:38jazenok
21:37:42jazenhm, what else
21:37:53brainopia enters the room.
21:38:14jazenhow's the "threads-issue" handled at the moment?
21:38:26jazenyou know, ruby isn't famous for it ;)
21:38:34headiusas in green threading?
21:38:42jazenyep
21:39:22jazeneveryone praises erlang's - is it's way portable to rubinius?
21:40:36thoughtfiz leaves the room.
21:42:38headius leaves the room.
21:45:11enebo enters the room.
21:47:03thoughtfiz enters the room.
21:49:17brainopia leaves the room.
21:52:56qwert666 leaves the room.
22:01:44febeling leaves the room.
22:07:33dbussinkthat was a short burst of activity :P
22:08:56evan:)
22:09:01evani'm on the phone now
22:09:02headius enters the room.
22:11:59stepheneb leaves the room.
22:17:32Blinchik leaves the room.
22:18:15wmoxam leaves the room.
22:19:19Blinchik enters the room.
22:20:00jnicklas enters the room.
22:23:35chris2 leaves the room.
22:25:42AndrewO leaves the room.
22:27:33macournoyer leaves the room.
22:35:36ruejazen: Not exactly, but we could theoretically get close in parallelism
22:36:14Maledictus leaves the room.
22:45:28kw leaves the room.
22:48:11blakewatters leaves the room.
22:49:26webmat leaves the room.
23:09:52moofbong leaves the room.
23:15:13shame leaves the room.
23:21:37mkrauskopf leaves the room.
23:21:54mkrauskopf enters the room.
23:25:44nicksieger enters the room.
23:34:57Arjen_ enters the room.
23:37:30thudson_ enters the room.
23:38:00jnicklas leaves the room.
23:41:35wmoxam enters the room.
23:47:10imajes leaves the room.
23:47:16qwert666_ leaves the room.
23:49:45Arjen_ leaves the room.
23:55:34nicksieger leaves the room.
23:59:05benny leaves the room.
23:59:41benny enters the room.