Index

Show enters and exits. Hide enters and exits.

00:02:13RyanTM leaves the room.
00:06:33tarcierijosb: here now
00:06:47josbtarcieri: thanks for your email
00:07:18tarcieriyeah, np
00:07:36josbtarcieri: I was aware of Rev, it looks great. the issue is the difficulty of porting swiftiply to use it.
00:07:39therealadam leaves the room.
00:08:30tarcieriyeah, I've talked with kirk about it before
00:08:33josbtarcieri: I don't want to say this too loudly but EM, while it fixes a particular problem well enough, doesn't seem to be a good long0-term solution.
00:08:59tarcierias soon as I can multiplex Scheduler.send_on_readable/send_on_writable on the same channel I'll be able to port Rev to Rubinius
00:09:40josbThat will be cool.
00:09:44brixenheh, someone help that man already :)
00:10:09josbRealistically it looks like I'll have to install nginx to solve my immediate problem.
00:10:11brixenwe need to have *everything* cooler than 1.9
00:10:26tarcieriyeah
00:10:44tarcieriexcept a working Reactor :)
00:11:26josbBecause adding the bits Puppet needs looks hard. Heck, I can't even store the extracted subject_name in a member variable. Compiles fine, SEGVs hard.
00:11:43tarcierijosb: there's a pretty minimal EM compatibility API for Rev, although it's not nearly feature complete enough to run Swiftiply
00:12:26josbtarcieri: that's what I thought. The only way to make it work would be to port Swiftiply to Rev, which sounds like a major undertaking.
00:13:01wyhainesIt'd be a fair amount of work.
00:13:04josbI wish I was smarter :(
00:13:05tarcierijosb: The main problem with EM right now is it's over 3 klocs of confusing Ruby and 7 klocs of even more confusing C++... and the maintainer is completely awol, afaict
00:13:28wyhainesem could use a lot of cleanup, for sure.
00:13:29tarcierihe used to be really responsive and quick at fixing bugs, now he hasn't responded to any e-mail for at least a month if not two
00:13:51josbtarcieri: agreed. It's non-trivial to make any kind of change to it.
00:14:10wyhainestarcieri, yeah. I interacted with him about a month ago...he was in the midst of some sort of VC funding thing for his company. Haven't heard from him since.
00:14:18tarcieriaah
00:14:34josbtarcieri: Kirk said he thought Francis is trying to do a startup and get funding.
00:14:49tarcieriyeah, he just said that a few seconds ago too
00:14:49tarcieriheh
00:14:50josbwyhaines: Hi :)
00:15:02josbI don't type very fast...
00:15:28wyhainesNot a startup. His company has been around for a while, but yeah....
00:15:43tarcierijosb: I think doing an EM compatibility layer is a better approach, as it would let you run EM applications on both Rev and "Revinius"
00:15:52wyhainesI do have commit privs on the repository, but I don't have a toolset installed that will build the windows gems for a release.
00:16:00josbwyhaines: okay, misremembered.
00:17:09josbtarcieri: true. How hard is that?
00:17:52tarcierijosb: well, the API's pretty huge...
00:18:09tarcieribut for the most part the wrappers are trivially thin
00:18:10josbCan we just do the part that Swiftiply needs, then? <g>
00:18:37tarcierihttp://pastie.caboo.se/178879
00:18:52tarcieri^^^ there's a wrapper for the core EventMachine functionality
00:19:06josbI can try that and see what's missing...?
00:19:24tarcieriyeah
00:19:55josbOK, I'll install rev in my test setup and give it a spin, see how far I get
00:20:01josbThanks!
00:20:32tarciericool
00:20:54RyanTM enters the room.
00:21:39tarcieriI really need to send a patch to ruby-core with nonblocking SSL support
00:21:45d2dchat leaves the room.
00:21:57tarcieritrying to add it through a 3rd party C extension is ludicrous
00:22:00josbYeah.
00:22:08tarcieriseems to work, I guess :/
00:22:15KirinDave leaves the room.
00:22:22josbAt least you'll get more testers that way...
00:22:38tarcieriI have externs that reference global variables in the openssl extension :/
00:22:48tarcieriick
00:22:58josbOh well :)
00:23:10josbOne step at a time
00:23:24tarcieriyeah
00:29:19evani hate that having global VALUE's is commonplace in MRI extensions
00:32:39tarcieriheh, well it has global VALUEs... but it also has a bunch of other random crap which gets referenced via extern across a bunch of modules
00:32:49tarcierigg common coupling... ugh
00:33:10evani was just complaining in general
00:33:33tarcieriheh
00:33:35josbcan't wait until Rubinius can run Swiftiply
00:33:51evanme too
00:33:55wyhainesI think there will be some cool potential, there.
00:34:01wyhainesWith the multi-VM support.....
00:34:14tarcieriI can't wait until Rubinius can run everything I have on Rev/Revactor/EventMachine
00:35:04tarcieriit will be nice to have massively concurrent I/O be a core feature of the VM, not something added as an afterthought through a hokey C extension
00:36:06josbYou mean fastthread?
00:36:15tarcieriI mean things like EventMachine and Rev
00:36:23josbOh.
00:36:34josbGotcha.
00:36:51tarcieriAll I/O in MRI is based around select()
00:36:51boyscout1 commit by Vladimir Sizikov
00:36:52boyscout * New rubyspecs for BigDecimal#truncate.; 8ff9ae4
00:36:57tarcieriI/O multiplexing, that is
00:37:42josbYeah.
00:39:24tarcieriin MRI things like EventMachine and Rev have to busy wait to allow Ruby to run its green threads
00:39:58josbBecause they are not part of the same big select() loop?
00:40:02tarcieriyep
00:40:27josbThis is what Channels solve in Rubinius?
00:40:28tarcieriI'd like to try using libev's idle watchers to run Ruby threads
00:40:31tarcieriyep
00:40:47josbNeat.
00:41:26d2dchat enters the room.
00:41:29evanMRI's scheduler is entrenched
00:41:41evanlibev is the scheduler in rubinius
00:41:56evanso it's quite extensible
00:42:05josbSo other things can hook into it?
00:42:20josbThrough the Channel sbstraction
00:42:24evanyeah
00:42:34evani'm sure there will be a lot more API we wire up for the Scheduler
00:42:36josbSounds like a good design.
00:42:38evani'm open to it
00:42:47evandepending on what tarcieri and EM and such need
00:46:00tarcieriall I really need for now is controlling what gets sent to the channel when an event occurs
00:46:25rubuildius_amd64Vladimir Sizikov: 8ff9ae455; 1989 files, 6478 examples, 22571 expectations, 0 failures, 0 errors; http://rafb.net/p/YC6ySd56.html
00:50:39KirinDave enters the room.
00:53:05KirinDave leaves the room.
00:53:22rubuildius_ppcVladimir Sizikov: 8ff9ae455; 1989 files, 6481 examples, 22600 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/178904
00:55:41jayWHY leaves the room.
00:58:37benstiglitz leaves the room.
00:58:54radarek leaves the room.
00:59:00twbray enters the room.
00:59:21antares leaves the room.
01:00:58mernen enters the room.
01:01:57RyanTM leaves the room.
01:05:07imajes leaves the room.
01:08:05cored enters the room.
01:08:10cored leaves the room.
01:08:55lopex leaves the room.
01:09:19cored enters the room.
01:11:14smparke1 leaves the room.
01:13:29headius enters the room.
01:13:30rueEventMachine seems a lost cause at this point
01:14:00ruetarcieri: We should try to do a short planning meeting in the next week or two
01:15:04tarcieriI don't think anyone will ever step up to maintain EventMachine besides Francis... that has to be the lest idiomatic Ruby I've seen nest to mkmf, not to mention the gargantuan C++ extension
01:15:09tarcieriand rue: regarding?
01:15:19tarcieris/lest/least/
01:15:33JimRoepckespeaking of Revactor, does anyone know what happened to the Revactor web site? It's been down for quite a while
01:15:39tarcieriit's back up
01:15:42tarcierithe server it was on crashed
01:15:46wyhainesI'd maintain it, but I'd end up rewriting a lot of it.
01:15:58tarcierioh wait
01:15:59tarcieriugh
01:16:10ruetarcieri: Massively concurrent I/O
01:16:18tarcierirue: aah
01:16:23ruewyhaines: You too, I am co-opting you ;)
01:16:37josbwyhaines: please, port swiftiply to Rev instead :)
01:16:57foysavas leaves the room.
01:17:04ruetarcieri, wyhaines: I originally expected to start working on the cluster/server mode in early May
01:17:18tarcieriJimroepcke: okay, *now* it's back up :)
01:17:25wyhainesjosb, may not be an either/or. I think there is a lot of usable structure in EM. It just needs...love.
01:17:48tarcierihappy to just throw away EM's entire implementation and keep its API around
01:17:53tarcierithere's enough stuff built on top of it already
01:18:12tarcieriand it's not like EM will *ever* work with Rubinius
01:18:31wyhainestarcieri: Yeah, that's kind of what I mean.
01:18:35josbwyhaines: that's where the EM compat API in Rev comes in...
01:18:45smparke1 enters the room.
01:18:46tarcieriyeah, if it were fleshed out a little better
01:18:46tarcieriheh
01:19:15josbOnce that's in place we 're good. I'll be getting to testing this with Swiftiply shortly...
01:19:31wyhainesI think, in the long run, EM would end up being completley rewritten with better Ruby, and, at least for Rubinius, a complete reactor replacement.
01:19:50tarcierithe nice thing is that 95% of Rev's existing codebase could be reused on top of Rubinius if I just rewrote Rev::IO to use Channels
01:20:01tarcieribut Scheduler doesn't quite have all the API features I need to do that yet
01:20:22josbIs somebody working on the Scheduler API?
01:20:42chris2 leaves the room.
01:20:46tarcierihas seriously considered trying to modify it, but it doesn't appear to be trivial by any stretch of the imagination :/
01:20:50evantarcieri: well, lets be sure to add whatever you need to Scheduler
01:21:00JimRoepckeThanks tarcieri. I ported my Erlang code (a fairly simple producer/consumer example) over to Rubinius actors yesterday, but I won't have time to try out Revactor in time for my talk on Sunday. I'll check it out later though
01:21:28tarcieriJimRoepcke: yeah, Revactor and Rubinius Actors should hopefully be API compatible
01:21:36tarcieriexcept for the Actor::TCP stuff
01:21:38tarcierievan: cool
01:22:20evanthe Scheduler API should be cleaner inside the VM with the C++ version
01:23:13JimRoepcketarcieri: cool, i should at least mention it. Do you have any idea which performs better? I had trouble getting more than a few hundred simple actors collaborating with Rubinius
01:23:48JimRoepckewith Erlang I had 900,000 actors working on my MacBook Pro :)
01:24:05JimRoepckei would have tried more but i was getting worried about melting points of various components
01:24:13evanhuzzah! newest valgrind on debian unstable has all the proper suppressions now
01:24:18evana fully clean run
01:24:48tarcieriJimRoepcke: Revactor had about twice the messaging throughut of Rubinius Actors last I checked, but that's probably not a valid figure anymore
01:25:01tarcieriJimRoepcke: Erlang was, uhh, two orders of magnitude higher
01:25:24ruetarcieri: How high a level of abstraction do you think we can provide through the VM itself?
01:25:50tarcierirue: abstraction for what?
01:26:03ruetarcieri: Concurrency support
01:26:49tarcierirue: well I already asked evan about separate heaps for each Task and he said that was a no-go... that'd be the main thing that would help, as you could automatically load balance Tasks across CPUs...
01:26:57tarcieriala the Erlang SMP scheduler
01:27:11rueevan: Reconsider ;) ^
01:27:45evanisn't that just multi-VM?
01:28:19tarcierievan: it'd be MVM... with load balancing at the concurrency primitive level
01:28:35kentaur enters the room.
01:28:48tarcierievan: Erlang runs one LWP per CPU and load balances processes between the threads
01:29:21evanso, where are the seperate heaps in there?
01:29:28tarcierieach process has its own heap
01:29:33tarcierii.e. shared-nothing
01:29:45evanand one process per cpu?
01:29:56tarcieriAn Erlang process is a lot closer to a Task
01:29:59evanLWP == native thread
01:30:02tarcieriyeah
01:30:13kentaur leaves the room.
01:30:22evanok, so again, how is that now MVM?
01:30:25evanif they're share nothing
01:30:40rueOur model currently is VM per LWP
01:30:40tarcieriwell, I suppose I should say, an Erlang process is an Actor...
01:30:45tarcieriyeah
01:30:50kentaur enters the room.
01:30:53tarcieriErlang has a "node" abstraction... a node has many processes
01:30:59tarcieriOne node can span multiple LWPs
01:31:02tarcierithat's the distinction
01:31:35tarcieriit's effectively one "VM" per multiple hardware threads
01:31:38evanso, shared operations on a single heap between LWPs is the hard thing
01:31:54tarcieriwell, that's just it
01:31:58rueErlang also migrates the processes between LWPs?
01:31:59tarcierithere isn't a single heap
01:32:02evanbreaking the heaps apart, and not allowing them to share things is a lot easier
01:32:03tarcierirue: yes
01:32:08tarcierievan: exactly
01:32:27evanok, so, in MVM, they're are seperate heaps, one per LWP
01:32:31evanso how is that different?
01:32:40evani keep asking because to me, they sound the same.
01:32:55evanok, perhaps the migration is the point you're trying to make
01:33:03tarcierievan: It'd be like MVM, if you could serialize an Actor and message pass it to another VM
01:33:04evanbut if they're share nothing, how is that possible?
01:33:14tarcierievan: and you had something in the background doing that automatically
01:33:21evaneach process is shared nothing? so it and all it's data is moved?
01:33:24tarcierii.e. this VM is too busy, so offload some Actors onto a different VM
01:33:33tarcierievan: it'd be as if each Task were shared nothing
01:33:43evanok, i think i gotcha
01:34:17evanuntil we can allow for cooperative access to a single heap by multiple LWPs, i'm not sure how we'll get there
01:34:38tarcieriyeah, I think it's fundamentally a much different architecture
01:34:39evanerland was designed with this restriction, ruby was probably designed in exactly the opposite.
01:34:44tarcieriyep
01:34:57evanit's certainly possible, java does it.
01:35:00evanwe'll get there eventually
01:35:39tarcieriI mean, BEAM is designed to where there's no shared heap save for a few select cases
01:35:50tarcierithere's a few experimental shared heaps
01:36:10tarcieribut for the most part everything happens at the "process" level
01:36:15tarcieriincluding the garbage collection
01:36:38evanright
01:36:41headiushmmm
01:36:42tarcieriwhen one "process" sends the other one a message, it's copied from the first one's heap to the second's
01:36:57evanyep
01:36:57tarcieriso the first one can garbage collect it if it wants
01:37:05tarcierithe second one has its own copy
01:37:36tarcieriand when you have that kind of setup, you can copy entire processes between hardware threads, because they're not dependent on anything in the original LWP
01:37:36headiusas far as I know most modern JVMs don't have lightweight processes...but of course actual threads end up being even harder to allow heap sharing across
01:37:52tarcieriheadius: well, LWP == OS thread/hardware thread/whatever
01:38:22evanhe's just using that as a generic term for a native thread
01:38:24headiusI'd argue that actual concurrent threads are a whole different ballgame when it comes to safe access to a shared heap
01:38:27tarcieriI don't want to call an Erlang process a "coroutine"
01:38:33tarcieribecause they are pre-emptable
01:38:47tarcieribut they don't have the normal headaches of threads because they're shared-nothing
01:42:36rue*catching up* OK, so issue for us is the inability to migrate Tasks to other VMs and thereby achieving load balancing?
01:42:55boyscout1 commit by Vladimir Sizikov
01:42:56tarcieriI mean, it's not strictly necessary
01:42:56boyscout * A bit more rubyspecs for BigDecimal#sub and #to_s.; 71a4b0a
01:43:14tarcieriErlang/OTP already wraps up the idea of distributing an application across multiple nodes
01:43:38tarcierijust need something similar for, say, MVM
01:43:43evantarcieri: what if you could migrate a Task between 2 VMs?
01:43:47tarcieriand you can scatter/gather tasks across multiple VMs
01:43:50dgtizedI kind of thing it's going to be painful to get that style of copy without share nothing symatnics
01:43:52tarcierievan: that would be awesome
01:44:02evanthats not too outlandish
01:44:04tarcieridgtized: I do too
01:44:07headiuswhat if you had native threads
01:44:16evanand is an isolated chunk of work
01:44:22dgtizedwhat I think would be awesome though
01:44:32dgtizedis if we could serialize a VM instance
01:44:38dgtizedbecause that is share nothing
01:44:44tarcieridgtized: It doesn't work unless Actors talking in the same VM behave exactly like Actors in two different VMs
01:44:51tarcieriwell, it works, but it's error prone
01:44:54evanand then perhaps reload it at a later time? perhaps with an object editor builtin?
01:44:55ruetarcieri: Addendum, are nodes split over several OS processes?
01:44:57evan:D
01:45:08dgtizedevan: no, reload it on another machine
01:45:17tarcierirue: With Erlang's SMP scheduler a node spans multiple OS threads
01:45:20tarcieriwith a single process
01:45:29evandgtized: the only trouble with that is how to handle references to external resources
01:45:35evanfile descriptors, sockets, etc.
01:45:39ruedgtized: Basically an image?
01:45:53tarcierievan: That was a huge bitch in Erlang according to Joe Armstrong
01:46:01dgtizedevan: but those aren't actually in that VM instance right? they are at a higher level in the event machine?
01:46:01evanwhich was?
01:46:06tarcierireentrant I/O across multiple hardware threads
01:46:28evandgtized: but they're still exposed as such
01:46:36dgtizedevan: I'm not saying you could do it seamlessly for all programs, but I bet there is a subset that could work
01:46:48evancertainly.
01:46:53twbray leaves the room.
01:47:02rueYeah, an implementation with a caveat would probably help lots of folks
01:47:05evanthe semantics of what happens to those things that reference external resources would have to be decided
01:47:16evanthats all i'm saying.
01:47:21tarcieriI think the much simpler abstraction is to be able to scatter what you're doing across VMs
01:47:23evanit's software people, nothing is impossible.
01:47:26rueMaybe try to re-establish and if it fails, give the user a hook to try and then fail
01:47:29tarcieripmap
01:48:04tarcieriErlang's SMP scheduler is awesome, but something like that doesn't really seem feasible in Rubinius
01:48:13dgtizedI'm thinking you would have to make a safe way to talk between VM's that could do with a freeze/reload
01:48:19trythil leaves the room.
01:48:23tarcierithe VM needs to be designed from the ground up with a shared-nothing concurrency primitive
01:48:24JimRoepckewhy not tarcieri?
01:48:45EugZol enters the room.
01:48:48dgtizedthat way you leave all the io stuff in a particular VM instance, and do processing in the other ones
01:48:49JimRoepckecould shared-nothing be an option on a per VM basis?
01:49:01EugZol leaves the room.
01:49:39dgtizedthat way the only external resources for that VM would be the inter-vm communication
01:50:09tarcieridgtized: VMActor lets you scatter/gather across VMs already
01:50:11JimRoepckeErlang is shared-nothing from the programmer's perspective but internally it does share things. Having immutable data and single-assignment variables would make that easier though
01:50:27tarcieriJimRoepcke: there's some shared state, but it's moot
01:50:33dgtizedtarcieri: but this would let you scatter across a VM, then pick up a VM and move it to another machine
01:50:39tarcieriJimRoepcke: Unless you're using the hybrid heap processes share nothing
01:50:41dgtizedtarcieri: and finish the scatter
01:50:42headiusseriously though, what's wrong with just making rubinius support native threads
01:50:48headiuswhy wouldn't that solve this
01:50:55tarcieriheadius: the current model is fine, imo
01:51:05tarcieriin fact, it's optimal
01:51:06headiuswell, except that it doesn't do what you want, yeah?
01:51:20rubuildius_amd64Vladimir Sizikov: 71a4b0a51; 1989 files, 6478 examples, 22571 expectations, 0 failures, 0 errors; http://rafb.net/p/TUCKec44.html
01:51:25dgtizedheadius: I think native threads actually complicate the model, and I don't think they do solve these issues
01:51:28tarcieriit gets as close to what I want as I think Ruby can
01:51:39headiushmm, how do you figure?
01:51:52headiusif you could spin up a few tasks and have them run in parallel in the same VM, why isn't that better?
01:51:57dgtizedheadius: because native threads are a share object space approach
01:52:00tarcieriideally you want to distribute load across one (or two) OS threads per CPU
01:52:10headiusdgtized: only if you actually choose to share the objects
01:52:33headiusyou take the same precautions you would with native threads on any other system and you can have exactly the same level of concurrency
01:52:57rueBut that is no fun :)
01:53:05dgtizedheadius: right but if we set it up right then the restrictions would make it easier to program, while gaining the performance
01:53:24tarcieriyou can use a thread pool, but I think the Erlang approach is much more elegant, and I don't think Rubinius is far off from it now
01:53:35tarcieriyou just treat each VM as an Erlang "node"
01:53:45tarcieriand distribute your application across one node per CPU
01:53:50JimRoepckeheadius: native threads are way too heavy for big actor systems
01:53:53headiusI haven't heard why threads are a problem
01:54:01tarcierinative threads?
01:54:11tarciericontext switching penalty
01:54:11headiuswell rubinius mvms have their own threads anyway
01:54:12JimRoepckeheadius: you can only do a few thousand on most OS before they go kaput
01:54:19tarcieriyou can use a thread pool
01:54:31tarcieribut that will require all sorts of thread synchronization
01:54:34headiusso you're either talking about something completely different or a pretty major rework of out rubinius VMs are pumped
01:54:44tarcieriRubinius MVM is practically shared nothing as is
01:54:58tarcieriwhich virtually eliminates the overhead of all those thread synchronizing syscalls
01:55:11tarcierithe more concurrency you can handle in userspace, the better it's going to work
01:55:29rubuildius_ppcVladimir Sizikov: 71a4b0a51; 1989 files, 6481 examples, 22600 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/178923
01:55:43rueIs there anything we can do with OS processes?
01:55:58rueAside from COW semantics and such
01:56:00tarcieriit sounds like the VM's designed in such a way that HWPs aren't necessary
01:56:44rueYeah, they should not be necessary--but I wonder if they could be exploited for additional fun
01:56:48dgtizedrue: you are saying load up the application code, and then fork to the CPU count?
01:57:05tarcieridgtized: that's what I'd like to do with MVM... one hardware thread per CPU
01:57:27enebobut each Rubinius MVM is a seperate Native thread in practice no?
01:57:33dgtizedtarcieri: right, I know that's actually what we want, but I think rue is suggesting a halfway easier point
01:57:36tarcierispeaking of which, I have some ncpu code I can commit, which is at least portable across Linux/*BSD/Darwin
01:57:50tarcierilike uhh, a call to retrieve the number of CPUs
01:58:07tarcierienebo: yes
01:58:16tarcieridgtized: and Rubinius MVM does that already
01:58:37stepheneb enters the room.
01:58:47tarcieridgtized: each VM is shared nothing and runs in its own hardware thread... one process
01:58:52dgtizedtarcieri: I don't see a problem with supporting both a forking and threading model, I mean we would cost legacy if we didn't
01:59:20tarcierithreading just means any data you want to send between VMs doesn't have to go through the kernel first
01:59:27kentaur leaves the room.
01:59:55evanto the effect that MVM is shared nothing, if we work in the ability to migrate a Task between them, that task could be anywhere on the planet in that case
02:00:06evanbecause the Task has be effectively serialized to a stream in that case
02:00:21evaner. the destination
02:00:33rueWe could buy a small island and fill it with commodity hardware
02:00:34tarcierievan: honestly I don't see the use of migrating Tasks between VMs unless you can have Tasks that are shared nothing in the first place
02:00:53dgtizedso we can migrate continuations?
02:01:00evaneffectively
02:01:02gnufied_ leaves the room.
02:01:26tarcierievan: the problem being that unless a Task is shared nothing it will behave differently before and after it's migrated, which is tremendously confusing
02:01:55boyscout1 commit by Vladimir Sizikov
02:01:57boyscout * Some more test cases for BigDecimas#finite? and #nonzero?.; bfa69d9
02:02:37rueYou are all over that BigDecimal :P
02:02:54evantarcieri: thats true
02:02:59evanoh btw
02:03:02evanmore code in cpp branch
02:03:09evani spent all day in valgrind
02:03:21evan0 bytes in, 0 bytes out now
02:03:27agardinerwoot!
02:03:28tarcierisweet
02:03:38evanthere is one last thing that valgrind reports, where it seems like onig perhaps is holding on to a few bytes
02:03:45evanbut valgrind reports that it's still reachable
02:03:50evani'll look at it later
02:04:35djwhittis the vm actually runable at this point? I mean, how do you use valgrind on it?
02:04:45evanoh, also compiles cleanly on linux now.
02:04:47evandjwhitt: tests.
02:04:50evan183 of them.
02:05:04evanMUCH better way of finding memory errors.
02:05:11rueNicely done
02:05:15evanthan just running it and hoping to find things
02:05:22rueI poked around the nfunc code a bit
02:05:24djwhittcool
02:07:02imajes enters the room.
02:08:28djwhittevan: did you leave that assert in there on purpose in the last commit?
02:08:55evanhm.
02:09:00evanprobably not.
02:10:27headius_ enters the room.
02:11:21rubuildius_amd64Vladimir Sizikov: bfa69d930; 1989 files, 6478 examples, 22571 expectations, 0 failures, 0 errors; http://rafb.net/p/K3aAs897.html
02:11:37headius leaves the room.
02:12:21stepheneb leaves the room.
02:12:32cremes enters the room.
02:13:28rubuildius_ppcVladimir Sizikov: bfa69d930; 1989 files, 6481 examples, 22600 expectations, 0 failures, 0 errors; http://pastie.caboo.se/paste/178929
02:20:53nicksieger leaves the room.
02:23:38ruetarcieri: I was also thinking HWPs in the context of transparent hardware clustering
02:23:55VVSiz_ enters the room.
02:25:06jayWHY enters the room.
02:29:25tarcierirue: yeah, HWPs on different machines makes sense
02:29:45trythil enters the room.
02:30:22VVSiz leaves the room.
02:32:05ezmobius leaves the room.
02:40:53enebo leaves the room.
02:42:04stepheneb enters the room.
02:43:58cored leaves the room.
02:44:05binary42 enters the room.
02:53:07stepheneb_ enters the room.
02:54:31stepheneb leaves the room.
02:57:55wyhaines leaves the room.
02:58:41ttmrichter enters the room.
03:05:15twbray enters the room.
03:21:23headius leaves the room.
03:22:07imajes leaves the room.
03:22:23dysinger leaves the room.
03:25:50mernen leaves the room.
03:29:54jayWHY leaves the room.
03:31:13RyanTM enters the room.
03:34:02twbray leaves the room.
03:34:52agardinerevan: is there some reason why e.g. Selector::create defined name to be an OBJECT instead of a Symbol?
03:38:37jtoy enters the room.
03:41:45loincloth leaves the room.
03:44:05stepheneb_ leaves the room.
03:47:26wyhaines leaves the room.
03:54:42stepheneb enters the room.
04:03:06srbaker enters the room.
04:06:31dysinger enters the room.
04:10:48rueLibtool *strangle*
04:13:12rueWeak symbol handling is fugly
04:14:30JimRoepcke enters the room.
04:14:30trythil leaves the room.
04:14:33trythil enters the room.
04:25:55binary42 leaves the room.
04:38:26srbaker leaves the room.
04:43:10rubuildius_ppc leaves the room.
04:45:39stepheneb_ enters the room.
04:56:20twbray enters the room.
04:56:58MenTaLguY enters the room.
04:57:01MenTaLguYhowdy
04:57:12MenTaLguYOOC, when did I first get commit rights in Rubinius?
04:57:18MenTaLguYI think it was early 2007?
05:00:50DefilerYour first commit is on May 24, 2007
05:02:13Defilersorry, wrong
05:02:23Defiler5db681808a3b047 on Jan 16th
05:02:34Defiler(2007)
05:02:54stepheneb leaves the room.
05:06:17MenTaLguYah, cool
05:06:20MenTaLguYthat's close enough
05:08:41MenTaLguYthanks
05:20:44wyhaines leaves the room.
05:24:55ssmoot enters the room.
05:25:16ssmootevan: ping? got a second to enlighten me on encodings?
05:27:05ssmootpasted http://pastie.textmate.org/private/fcyiym3jdsee2g9l0kek3q
05:27:27ssmootwell, if anyone is curious what I'm talking about ^^^ ;) It's my crusade of the week. :)
05:29:07drbrainssmoot: automatic encoding conversion is the devil
05:29:13drbrainsince it is lossy by definition
05:29:37drbrainand, Unicode is not yet The Answer
05:29:45drbraingive it a decade or two, but it isn't yet
05:30:08ssmootdrbrain: yeah, but integration with services that only accept one encoding or another is a nightmare without it... I mean, still no Ruby library to properly integrate with MSSQL NVARCHAR fields AFAIK.
05:30:41ssmootdrbrain: UTF16 no, but UCS32 and UTF-8 everybody was happy with I thought?
05:30:53drbrainssmoot: I trust matz in doing what's right wrt M17N
05:31:15drbrainssmoot: http://en.wikipedia.org/wiki/Han_unification
05:32:01drbrainalso, I believe Japan has two popular encodings for Japanese documents
05:32:15drbrain(one is 7-bit ASCII compatible, the other is not)
05:33:01drbrainso matz and crew probably have enough experience to do something that's going to work
05:33:05ssmootdrbrain: I know. I worked with EUC-JP and ShiftJIS on a Rails app with MSSQL Server. And because there's no easy conversion, it was a massive failure. That was 2 years ago and nothing's changed. M17N won't help...
05:33:28DefilerThe only safe thing to do with ShiftJIS is not convert it at all
05:33:44ssmootdrbrain: btw, just figuring things out... ;) Didn't come in to stir up a storm. No offense. :)
05:33:49DefilerI don't think M17N is a bad idea, but the default should be UTF8 not US-ASCII
05:34:35DefilerUTF8 is totally fine, today, for everything but these few use cases, and those are easily fixed by having the default encoding be configurable
05:34:53DefilerPreferably along with this selector namespace junk, so you could just set it for the code you were writing
05:35:06drbrainssmoot: none taken
05:35:15ssmootSo ok, maybe I have the wrong impression... but my impression is that M17N is going to contain overhead, and that when you have individual strings normalizing instead of normalizing multiple charsets at IO boundaries, pain is likely.
05:35:28ssmootBut I could be wrong...
05:35:55DefilerMy understanding was that there would be no conversion if you were operating on like-encoded objects
05:36:01drbrainssmoot: I have the impression that 1.9 will work kinda-sorta like 1.8 does
05:36:10Defilere.g. String#<< being passed another shift-jis string won't try to mangle anything up
05:36:26drbrainwhere you say "I'm working in encoding X" and everything will stay in X unless you explicitly need to use Y
05:37:39ssmootBut regardless, internationalized databases are UTF16 or UTF8 exclusively as far as I'm aware, so is Han Unification even an issue? I'm ~90% certain that ShiftJIS is pure Katakana anyways, a 7bit character-set, and there is no loss... at least our Japanese clients never complained when ShiftJIS was normalized to UTF16-LE.
05:38:21DefilerWhat do you mean 'pure Katakana'?
05:38:27DefilerThat phrase doesn't make sense to me
05:39:02DefilerMost Japanese webapps that need to interface with mobile phones (which is most of them) just round-trip the data in shift-jis, to my understanding
05:39:03tarcieriyeah, what? Shift-JIS supports katakana, hiragana, and kanji...
05:39:06ssmootI could be insane. ;) I only picked up enough of the lingo to talk to the clients (in English) and write the code. :D
05:40:03ssmoottarcieri: ah, ok, thanks for the correction then. :) I could be misremembering... or maybe the transaction files we were parsing were just Katakana. I'm not confident now... :o
05:40:18drbrainpostgres, at least, supports all these: http://www.postgresql.org/docs/current/static/multibyte.html
05:40:44DefilerMan, a file that only contained katakana would be hard to read.
05:41:24drbrainand the table implies that it operates on data differently depending on character set
05:41:37ssmootDefiler: well.. numbers too :)
05:41:38DefilerI am definitely worried about what M17N may shackle us with
05:42:04drbrainthere is ongoing work on M17N stuff
05:42:42ssmootdrbrain: hmm... but how many of those are internationalized sets? (Just curious) It's obvious much more robust (in Postgres at least) than I suspected...
05:42:42drbrainas something between 1.9.0-0 and present broke some bits of RubyGems, as files were being read as UTF-8 instead of 8-bit ASCII
05:43:10drbrainso we haven't seen the full design for M17N in ruby 1.9
05:43:22drbrainssmoot: I'm not sure
05:43:29DefilerWhat's an 'internationalized set'?
05:43:29ssmootk, thanks.
05:44:06rueDiplomats and so on
05:44:34ssmootDefiler: my lack of lingo. ;) I'm trying to make a distinction between charsets intended to unify vs any multi-byte charset. Just for curiousity. No followup argument to make. ;)
05:45:07DefilerMost of those on the list, to my knowledge, are easily preserved losslessly in UTF-8
05:45:16ssmootEUC_JP for example is probably English from what I remember, but probably not a lot else.
05:45:22drbrainUnicode and UTF-8 are the combination of a technical problem with a political problem, so everybody whining about it now isn't helping much :(
05:45:38drbrainthe two combined will take at least a decade to sort out :(
05:45:59DefilerYou have to be careful with user data
05:46:17DefilerIf I post a form with Shift-JIS encoding, it is best to store what I sent in Shift-JIS in the database
05:46:48DefilerThis belief that it was safe to convert user data seems relatively new, and pernicious
05:47:02Defiler'was ever', I mean
05:47:22ssmootdrbrain: Windows is UTF-16LE. I just don't see any pragmatic value in Ruby trying to make a leap ahead of everyone else then I suppose. It'll likely cause a decade of integration issues for what? It seems a very un-pragmattic choice.
05:47:34wyhaines enters the room.
05:47:55Defiler'is' glosses over too much, really
05:48:09DefilerWindows definitely still has a local non-Unicode codepage option that must be respected
05:48:09drbrainssmoot: the decade of integration issues is going to occur across the entire software industry
05:48:15drbrainit's not just a ruby problem
05:48:30DefilerFor example, if you set your locale to Japanese, you get yen characters instead of backslashes
05:48:39ssmootDefiler: I was being vague I suppose I meant .NET Strings specifically.
05:48:45drbrain"yen sign problem"
05:49:02Defiler.NET doesn't have a lot to do with Ruby
05:49:29DefilerA bigger concern is what to do when you call, say, CreateFileEx
05:49:36ssmootdrbrain: but compared to .NET, it is "just a Ruby problem"... that's what I don't understand. A massive chunk of the market has laid down the law, and the market is OK with that. So why are we creating problems for ourselves?
05:49:42Defiler..and you pass it a filename that the user read in in shift-jis
05:50:45drbrainssmoot: remember, there's more than one market. Ruby has a very large Japanese user base, and they have a different idea of what is the best way to solve the problem
05:51:01Defiler.NET also lets you specify the encoding of strings
05:51:23Defilerhence the existence of Japanese keitai-compatible sites written in VB.NET
05:51:23ssmootDefiler: not since I used it... ? Unless I'm just high. :)
05:52:05Defiler<globalization> config section in web.config lets you set it for a whole project
05:52:21ssmootDefiler: .NET allows you to specify encodings on IO objects. Strings are assumed to be UTF-16LE, and you have to jump through hoops.
05:52:24Defilerhttp://www.codeproject.com/KB/aspnet/Encoding_in_ASPNET.aspx
05:52:33RyanTM leaves the room.
05:52:38ssmootDefiler: that's just setting the default encoding of IO. Not strings.
05:52:41ssmootI think ;)
05:54:17DefilerI guess I just haven't heard any .NET people complain about its behavior
05:54:20madsimian enters the room.
05:54:25DefilerMaybe ko1 knows some .NET people?
05:54:31ssmootSo yeah, I don't mean to be a pain... thanks for discussing this with me guys. :)
05:54:42drbrainyou're not
05:55:04DefilerYeah, it is an important concern
05:55:25drbrainI remain skeptical that matz & crew are going to do something impossibly heinous to duplicate
05:55:31drbrainskeptical of the belief that
05:55:38ssmootBut I can't help but feel Ruby is trying to tackle problems that don't need to exist? I mean, if .NET does it X way, and nobody's complaining, why are we going with the (presumably) more complex and slower M17N?
05:55:56ssmootAnd I guess that's what my problem is. A presumption that M17N is slower and more complex.
05:55:58drbrainI think the best thing to do would be to jump into 1.9, play around, and give feedback
05:56:04ssmootBut I could be way off base.
05:56:59drbrainssmoot: I think your question is valid, but I think there's also problems that the Japanese have that latin-based alphabet people don't have
05:57:11ssmootdrbrain: I would love to... this is the first time I've made it back to #rubinius in a year tho'... ;) stupid job :p
05:57:43ssmootat least I think it's been about a year... time flies when you're stressed. :D
05:57:51drbrainwith the rest of ruby as reference material, I find it difficult to believe that they're making a mountain out of a mole hill
05:57:57joachimm_ leaves the room.
05:58:23DefilerSo is this stuff implemented in 1.9?
05:58:35drbrainthe M17N stuff? yes
05:58:36DefilerI know some of it is
05:58:43DefilerIs it in a near-final state?
05:58:58ssmootdrbrain: you make a good argument... Hopefully it's fast. Then I guess as long as I can set encoding on IO boundaries for external libs that expect UTF16LE for example, I'll survive. ;)
05:59:15drbrainI believe it is 75%-85% complete
05:59:37drbrainfor example, to open a file in "binary" mode, use "rb:ascii-8bit"
05:59:41drbrainas the mode
06:00:09trythil_ enters the room.
06:00:15drbrainif you want utf-8, "r:UTF-8"
06:00:49trythil leaves the room.
06:01:41ssmootDefiler: btw, so if you were curious about .NET Strings, the Remarks paragraph(s) in this article explain it: http://msdn2.microsoft.com/en-us/library/system.string.aspx Which lines up with how I've always understood it.
06:02:04drbrainhehe "(irb):2: warning: Unsupported encoding UTF-16 ignored"
06:02:40rueEwps
06:02:43ssmootdrbrain: UTF16-LE or BE. There is not "real" UTF16 AFAIK.
06:02:58ssmootthere is no even.
06:03:29twbray leaves the room.
06:04:10ssmootdrbrain: good ol' FEFF or FFFE :) http://unicode.org/faq/utf_bom.html#25
06:04:48drbrainthanks
06:05:43ssmootIt took me a long time to understand encodings, and I'm still getting there I suppose. ;)
06:06:13Defilerssmoot: Well, there is that whole Encoding class in .NET, right?
06:06:32ssmootBut yeah, the Han Unification stuff sounds like a big deal... but in practice, it's not. Because banks and whomever are more concerned about interop than not.
06:07:07ssmootDefiler: Enum I belive. But maybe singletons. But they're just constants basically to translate bytes for IO objects.
06:07:12agardinerrue: what's the syntax to use your compile-time include/exclude macro thingy?
06:07:26DefilerThe Japanese web is very different than the western web
06:07:38Defilerpeople care about precise text display a whole lot
06:07:53Defilersee the shift-jis art on 2chan, etc
06:07:53ssmootDefiler: like you have to read a byte buffer from a StringReader if you don't want the UTF-16 conversion IIRC.
06:08:06Defiler.NET is horrible. Heh
06:08:52drbrainhttp://rafb.net/p/OCCP4X23.html
06:09:02drbrainhaha, something got screwed up in the pasting
06:09:07drbrainit should be "πº"
06:09:08ssmootDefiler: no argument from me. ;) I just use it as a point of reference... but still, I do think this is one of the things that MS got right... because, you know, tons of .NET Japanese websites out there still. :)
06:09:10drbrain(pi degrees)
06:11:44twbray enters the room.
06:11:44Defilerssmoot: I'm not sure they got it right, necessarily. I just don't have the .NET experience I need to say for sure
06:12:09DefilerI've never actually had to implement a shift-jis user-driven site in .NET. :)
06:12:36ssmootDefiler: well that's the point... you wouldn't. :) it'd be UTF-8.
06:12:48rueagardiner: Rubinius.compile_if($global) { ... }
06:13:03agardinerthanks!
06:13:03ssmootI mean, I guess you could use shift-jis, but why?
06:13:09rueagardiner: The $global is evaluated at compile time, naturally :)
06:13:19Defilerssmoot: No, I would. It's a hard requirement
06:13:27agardineryeah, i just plan to use $DEBUG
06:13:29DefilerNobody uses a web browser in Japan. Everything is cell phones
06:13:31be9 enters the room.
06:13:52Defiler..and older ones don't support UTF-8 correctly, so everything is shift-jis or EUC, etc
06:14:01ssmootDefiler: ah... well... :/
06:14:01rueSlightly hyperbolic but sure :P
06:14:19agardinerhmm, actually perhaps that's not a good global to use for the debugger!
06:14:27DefilerOK, yeah.. they know what web browsers are and stuff.. :)
06:14:38agardinersince there's a good chance it would be set when using the debugger to debug something else!
06:14:55ssmootheh...
06:15:07rueagardiner: Well possible--on the other hand, the file must still be compiled *while* under $DEBUG
06:15:10ssmootso yeah, once upon a time: http://www.gpnet.ne.jp/home-e.html
06:15:26agardinerah yeah -- good point!
06:16:03ssmootDefiler: and yeah, it's shift-jis.
06:16:04Defilerssmoot: click on 'Japanese' at the top. It is in shift_jis encoding
06:16:18ssmoot:)
06:16:21Defiler..and does the horrible usual thing of putting most of the text on images
06:16:23Defiler=(
06:17:33rueWell, there is one good thing about M17N or whatever stupid acronym they use now
06:17:34Defilerむかつくね
06:17:44rueIt makes my Apache woes seem surmountable
06:18:33ssmootrue: what does it have to do with apache? Or do you mean you could abandon Apache or something?
06:19:42ssmootDefiler: so what does Java do? strings are byte-arrays to be manipulated?
06:20:20MenTaLguYsort of
06:20:22Defilertwbray: Got a second to enlighten us on how non-unicode strings are handled in Java?
06:20:29MenTaLguYwe keep a byte array and a Java String around
06:20:36MenTaLguYcacheing to some extent as needed
06:20:47MenTaLguYJava itself doesn't really do non-Unicode strings
06:21:00ruessmoot: I just like to complain about Apache. I am compiling a huge statically linked library out of apache to be able to enable weak symbols
06:21:15MenTaLguYJava Strings are UTF-16, originally UCS-2
06:21:29ssmootrue: If I were a smarter man I'd know what you meant. :)
06:21:40stepheneb_ leaves the room.
06:21:43ssmoota-ha. :)
06:22:05Defilerhttp://osdir.com/ml/text.unicode.general/2003-05/msg00742.html
06:22:08Defileroh god those poor people
06:22:10ssmootsee? UTF16: 2, M17N: 0. ;)
06:22:14ssmootheh
06:23:09tarcieriwhy UTF-16 over UTF-8?
06:23:21MenTaLguYJava strings were already sequences of 16-bit characters
06:23:29MenTaLguYas I said, it was originally UCS-2
06:23:47tarcieriJava predates UTF-8's emergence as the popular standard
06:23:51MenTaLguYwell, that too
06:24:08MenTaLguYbut you couldn't go from UCS-2 to UTF-8 and be nice about backwards compatibility anyway
06:24:18MenTaLguYwell, that and also UTF-8 hates asian text
06:24:19tarcieriyeah
06:24:21MenTaLguYsize-wise
06:24:26MenTaLguYUTF-16 is half as worse
06:24:32tarcieriheh, I suppose
06:24:33MenTaLguYgive or take
06:25:20tarcieriUTF-8 means less thunking between encodings in the general case
06:25:53tarcierithat is: talking to network services which encode strings in UTF-8, and reading/writing from files that are UTF-8
06:26:08MenTaLguYonly inasmuch as UTF-8 is common
06:26:09ssmoottarcieri: well, I would prefer UTF8, I was just putting forth the idea that if the 2 biggest platforms out there (ok, maybe a little hyperbolic) are UTF16 native with automatic conversion at IO boundaries, then M17N seems like overkill and will probably cause as many headaches as it tries to solve.
06:26:14MenTaLguY(now)
06:26:30tarcierissmoot: biggest virtual machine platforms?
06:27:13DefilerLike it or not, Ruby was developed in Japan, and is always going to be sensitive to the needs of that locale
06:27:39DefilerHopefully it will all work out
06:28:14ssmoottarcieri: I guess so? I mean, I suppose in Japan they probably only have 50% of the jobs, but still, it's significant enough that to deviate without a really good justification just seems... not ideal? And if most of the market can settle on UTF16 then Han Unification seems a really sorry excuse no?
06:29:03DefilerThe whole writing system over there is totally retarded, so some people get defensive
06:29:26DefilerThere has never been a language (other than maybe Indonesian) more suitable for an alphabet-based writing system than Japanese
06:29:38Defilerbut due to a trick of history, they got saddled with the worst possible fit
06:30:02DefilerLiterally native speakers cannot read a business card and tell you who it belongs to
06:30:48DefilerMakes for some amusing gags, though, because you can say "It is written 'Bob', but pronounced 'Swift Sword of Justice'"
06:31:08benburkert leaves the room.
06:31:26tarcieriyou're talking about hanko?
06:31:55DefilerNo, nanori
06:35:58dysinger leaves the room.
06:37:39stepheneb enters the room.
06:39:09twbrayDefiler: Java doesn't grok non-Unicode strings. The fact that Java uses UTF-16 is a history-related botch, it' totally be UTF-8 if you were doing it today.
06:40:25Defilertwbray: OK, so presumably Java apps that need to serve content up in, say, Shift-JIS store their data in UTF-16 and convert at the last moment?
06:40:40twbrayUTF-8 has 50% overhead vs UTF-16 on Asian texts, but my disks are filling up with video & audio & the text is to the right of the decimal point, so maybe no biggie
06:41:03twbrayDefiler: Exactly. Which is probably the right approach. Except for it should be UTF-8.
06:42:17DefilerMy inclination is to go with UTF-8 as the default encoding, introduce a CodePoint immediate type, and handle things in a compatible way only when the encodings absolutely require it
06:42:19MenTaLguYthe only exceptions are where you're dealing with encodings which can't roundtrip through Unicode, and if you do a lot of bytestring manipulation in the native code for some externally-driven reason
06:42:31DefilerI suspect we can be M17N compatible without making exactly the same decisions as 1.9
06:43:06boyscout9 commits by Adam Gardiner
06:43:07boyscout * Remove TaskBreakpoint class, breakpoint debugging statements; 8e9bb15
06:43:08boyscout * Get breakpoint handling working properly; 37d3127
06:43:09boyscout * Make ISeq#decode return symbols rather than objects by default; 498b95a
06:43:09boyscout * Simplify and correct breakpoint handling; e89c7b0
06:43:10boyscout * Add hit count to breakpoints, list breakpoint display; a585c83
06:43:12boyscout ...
06:45:29ssmootbooo M17N! :p
06:45:33joseph enters the room.
06:45:44ssmootdecided to make a meaningful contribution :)
06:46:16benburkert enters the room.
06:47:25benburkert leaves the room.
06:47:58boyscout1 commit by Adam Gardiner
06:47:59boyscout * Fix breakpoint hit incrementing; c4663aa
06:49:11ssmootbut seriously... IronRuby is probably going to assume Ruby UTF-8 to .NET internal UTF-16 Strings right? So they'll be ahead of the game. They'll just make integrating easy. And I don't want to use IronRuby. :p
06:50:33MenTaLguYI'm not sure I follow.
06:51:45dysinger enters the room.
06:52:07ssmootMenTaLguY: well, I mean, the way RubyClr worked, it just assumed the Ruby strings were ASCII IIRC. But that's probably going to change to UTF-8 I'm sure. So you'll be able to use IronRuby to use a Merb app with MSSQL.
06:52:59ssmootMenTaLguY: but if M17N means encoding aware strings, and not IO (I'm fuzzy on this), then integrating say Rubinius with MSSQL will still be (almost) as big a PITA tomorrow as it would be today.
06:53:27drbraindamn, Alien Director's Cut is playing for the midnight movie
06:53:28rubuildius_amd64 leaves the room.
06:53:30ssmootMenTaLguY: maybe jRuby already has this figured out tho'...
06:53:45benburkert enters the room.
06:54:08MenTaLguYI'm a little bit fuzzy on JRuby's M17N handling, except that we do use the dual representation I mentioned earlier
06:55:58ssmootMenTaLguY: anyways, point is, without automatic conversion and encoding aware IO, it practically guarantees YARV or Rubinius won't see any real action in businesses that have to deal with multiple encodings right? I mean, at least if I had the choice, I'd rather say "this file is shift-jis, handle everything else transparently".
06:56:09Defilerdrbrain: Have you seen it? It's really good
06:56:10ssmootI'm being hyperbolic again I know. :)
06:56:27drbrainDefiler: I saw it when it first was released
06:56:33Defilerword.
06:56:39ssmoot(I think hyperbolic is my Word Of The Day btw...)
06:57:21MenTaLguYIsn't that what 1.9's stuff does?
06:57:29MenTaLguYIIRC you can specify the encoding when opening a file
06:57:42ssmootMenTaLguY: encoding at boundaries? That's what I'm fuzzy on...
06:58:17ssmootI mean, if it's not going to normalize to a uniform encoding, what's the point other than it'll stamp the Strings returned with an enum?
06:58:25drbrainopen some_file, 'r:encoding_of_file' do |io| ... end
06:58:41tarcierissmoot: you can always write an itsy bitsy subclass to ensure all I/O thunks to unicode
06:58:51drbrainssmoot: automatic transformation is not guaranteed to work
06:58:56drbrainthat's the point of it
06:59:11ssmootdrbrain: can you specify a default encoding for IO in 1.9 and have it take Strings with other encodings and translate them automatically just by passing them to that IO?
06:59:30tarcierissmoot: write an itsy bits subclass
06:59:32drbrainssmoot: I'd have to experiment...
06:59:41tarcierissmoot: or hell, a module
07:00:06ssmoottarcieri: to overwrite IO#<< or something you mean?
07:00:40tarcierior just define something like #uread and #uwrite that implicitly convert to/from unicode
07:00:53obvio171 enters the room.
07:01:01MenTaLguYmy understanding had been that it keeps things in the original encoding until/unless conversion is required
07:01:58ssmoottarcieri: makes sense... but... you'd have to do the same for FasterCSV then... and Net::HTTP... and mini-exiftools... and...
07:02:12agardiner leaves the room.
07:02:24ssmootMenTaLguY: but then it's automagic? I have nothing to complain about then possibly?
07:02:41drbrainirb(main):012:0> open "ascii", 'w:us-ascii' do |io| io.write utf_16le endRuntimeError: conversion undefined for byte sequence (maybe invalid byte sequence)
07:02:44drbrainoops
07:02:48twbray leaves the room.
07:02:55drbrainRuntimeError: conversion undefined for byte sequence (maybe invalid byte sequence)
07:03:41ssmootdrbrain: well of course. :) Pretty sure .NET throws a similar error...
07:03:43drbrainbut...
07:04:17drbrainirb(main):017:0> open "ascii", 'w:us-ascii' do |io| io.write "foo".encode('utf-16le') end
07:04:21drbrain=> 3
07:04:28drbrainso it appears it auto-converts on autput
07:04:31drbrainoutput
07:05:17joseph leaves the room.
07:05:24ssmootThen I suppose I have nothing to complain about. ;)
07:06:18drbrainirb(main):018:0> open "utf-8", 'w:utf-8' do |io| io.write utf_16le end=> 7
07:06:23rubuildius_amd64 enters the room.
07:06:46obvio leaves the room.
07:07:04benburkert leaves the room.
07:07:10drbrainyeah, and writing to a 'w:utf-16le' IO gives 6 bytes written
07:07:26ssmooter...
07:07:47ssmootdrbrain: it's writing out the BOM then?
07:08:13benburkert enters the room.
07:08:19ssmootdrbrain: because UTF-8 should be 3... except I think it's BOM is 3 bytes long. Or 4. I forget.
07:08:41ssmootdrbrain: or did you use a different string?
07:08:53drbrainssmoot: my string was "πº" (pi degrees)
07:09:20drbrain$ od -Ax utf-16le
07:09:30drbrain0000000 177377 001700 000272
07:09:35drbrain$ od -A x utf-8
07:09:45drbrain0000000 135757 147677 141200 000272
07:10:06ssmootdrbrain: ah, gotchas. so no BOM. :/
07:10:33drbrainI guess not
07:10:39scooprutf8 can have bom
07:10:42scooprfefffe I think
07:10:50scoopror was it fffeff
07:11:10drbrainhere's proper output of hex string content for utf-16le: 03c0feff000000ba
07:11:19scooprEFBBEF it seems =)
07:11:30ssmootthat's a (minor) problem... at least if you're not opening it as binary you'd think the BOM should be default.
07:12:07scooprhttp://en.wikipedia.org/wiki/Byte_Order_Mark#Representations_of_byte_order_marks_by_encoding
07:12:15ssmootbut whatevs. I'm happy. thanks drbrain :)
07:12:22tarcierior you could use UTF-8 and not have to deal with that
07:13:40ssmoottarcieri: true... BOM is just nice because it makes it really easy to tell what you're working with, and File libs can open with the correct encoding automatically then.
07:14:09ssmootWhich is so much better than trying to guess at random what encoding something is. :D
07:15:27ezmobius enters the room.
07:16:24rubuildius_amd64Adam Gardiner: c4663aa29; 1990 files, 6478 examples, 22572 expectations, 0 failures, 0 errors; http://rafb.net/p/F6esNY77.html
07:19:05yaroslav enters the room.
07:22:09DefilerUTF-8 often is used without a BOM because most UTF-8 is just ASCII
07:22:19Defiler..and the BOM breaks compatibility with things that don't speak UTF
07:22:30MenTaLguYUTF-8 doesn't need a BOM
07:22:51MenTaLguYit is byte-oriented rather than word-oriented
07:24:17ssmootyour words make sense. :) I suppose you could just open any plain-text file as UTF-8, and if it was just ASCII, no harm done.
07:30:42kade enters the room.
07:31:01kadeivars == instance variables?
07:31:35yaroslav leaves the room.
07:32:01MenTaLguYssmoot: well, not all valid iso-9660 sequences are valid UTF-8 sequences
07:32:14yaroslav enters the room.
07:32:19_mk_ enters the room.
07:32:38_mk_ leaves the room.
07:32:47MenTaLguYer, is it 9660? or is that CD-ROM filesystems?
07:33:05tarcieriCD-ROM filesystem
07:34:07ssmootMenTaLguY: I don't ever remember if ASCII is 7bit or 8bit to be honest. I _think_ 7. So I think UTF-8 is a full superset, but I could be wrong.
07:34:21MenTaLguYUS-ASCII is 7 bits
07:35:42drbrainhttp://en.wikipedia.org/wiki/Joliet_%28file_system%29
07:35:51drbrain64 UCS-2 characters
07:37:12kw leaves the room.
07:37:36ssmootyou guys are better than google. :)
07:37:51drbrainit looks like ISO-9660 is /\A[A-Z0-9_]{,8}.[A-Z0-9_]{,3}\Z/
07:38:02drbrainoh, that's level 1
07:38:14ssmootdreams of writing an ad-supported technical mechanical turk that posts to #rubinius for great riches...
07:38:23ssmoot:)
07:38:37drbrainlevel 2 can have file names up to ~180 characters
07:39:18drbrainhttp://en.wikipedia.org/wiki/ISO-9660#File_and_directory_name_restrictions
07:39:27drbrainbut, still no lowercase characters
07:41:55DefilerYeah, Joliet is the lowercase stuff
07:43:27drbrain"According to legend, the El Torito CD/DVD extension to ISO 9660 gained its name because its design originated in an El Torito restaurant in Irvine, California."
07:44:05Maledictus enters the room.
07:44:47DefilerI think that is a totally legit naming convention
07:45:01drbrainme too
07:45:46MenTaLguYmaybe Rubinius should adopt it
07:46:28drbrain"The [Rock Ridge] standard takes its name from the fictional town in Mel Brooks' film Blazing Saddles."
07:47:13tarcieriRumeo and Joliet?
07:48:05drbrainwikipedia doesn't say where the name came from
07:51:59cypher23 enters the room.
07:58:07mentz enters the room.
08:00:47MenTaLguY leaves the room.
08:02:04zimbatm_ enters the room.
08:02:57mentz_ enters the room.
08:03:42mentz_ leaves the room.
08:03:46mentz leaves the room.
08:04:13mentz enters the room.
08:05:15mentz leaves the room.
08:17:39octopod enters the room.
08:21:21thehcdreamer enters the room.
08:42:42stepheneb leaves the room.
08:44:37trythil_ leaves the room.
08:44:42trythil enters the room.
08:47:39TheVoice leaves the room.
08:48:06Skip enters the room.
08:52:43benburkert leaves the room.
08:53:13benburkert enters the room.
08:56:04qwert666 enters the room.
08:58:52ariekeren enters the room.
08:59:09w1rele55 enters the room.
08:59:52mutle enters the room.
09:00:23trythil leaves the room.
09:02:13Fullmoon enters the room.
09:10:27kade leaves the room.
09:13:19wycats_ leaves the room.
09:15:47_mk_ enters the room.
09:15:54Fullmoon leaves the room.
09:16:09ezmobius leaves the room.
09:25:48Arjen_ enters the room.
09:31:27wycats enters the room.
09:33:02cypher23 leaves the room.
09:40:39qwert666 leaves the room.
09:55:28benburkert leaves the room.
10:05:44ariekeren leaves the room.
10:09:54retnuH enters the room.
10:22:01chris2 enters the room.
10:23:02mentz enters the room.
10:33:52rueGood morning, Europe
10:36:13scooprgood afternoon =)
10:36:13ArjenMorning.
10:38:36mentz leaves the room.
10:40:27mentz enters the room.
10:46:12yugui enters the room.
10:52:32ko1eban?
10:52:34ko1evan?
10:54:40rueko1_: He will probably not be up for a couple hours
10:54:51ko1rue: thanks!
10:56:35rueko1_: I can try to help if you have questions about the codebase although you may want to e-mail him or check back in 5-6 hours or so
10:57:47ruedrbrain: Minor, the RDoc TemplatePage diagram is *really* big :P
10:58:13_mk_ leaves the room.
10:58:13w1rele55 leaves the room.
10:58:13wyhaines leaves the room.
10:58:13djwhitt leaves the room.
10:58:13goodney leaves the room.
10:58:13_goodney_ leaves the room.
10:58:13Fobax_ leaves the room.
10:58:13boyscout leaves the room.
10:58:13squeegy leaves the room.
10:58:13Defiler leaves the room.
10:58:13brixen leaves the room.
10:58:13Ingmar leaves the room.
10:58:13crayz__ leaves the room.
10:58:13chris2 leaves the room.
10:58:13jtoy leaves the room.
10:58:13smparke1 leaves the room.
10:58:13rudebwoy leaves the room.
10:58:13mitsuhiko leaves the room.
10:58:13cyndis leaves the room.
10:58:13ndemonner leaves the room.
10:58:13_eric leaves the room.
10:58:13flori leaves the room.
10:58:13ko1_ leaves the room.
10:58:13fearoffish leaves the room.
10:58:13VVSiz leaves the room.
10:58:13yugui leaves the room.
10:58:13retnuH leaves the room.
10:58:13zimbatm_ leaves the room.
10:58:13obvio171 leaves the room.
10:58:13ttmrichter leaves the room.
10:58:13winescou1 leaves