« Back to channel list

#ruby - 11 November 2017

« Back 1 day Forward 1 day »
[00:00:12] dminuoso: (Using lambdas to enforce arity is not exceeded)
[00:00:58] dminuoso: RickHull: I think I only use it in one spot: https://gist.github.com/dminuoso/4079510005d0aa988cdd5a849fcf6362#file-lens-rb-L120
[00:01:01] RickHull: what does defc mean?
[00:01:14] dminuoso: RickHull: def and the `c` is just for currying :)
[00:01:58] dminuoso: Well I use currying in a lot of places, but it allows you to directly obtain a method as a first-class citizen
[00:02:05] dminuoso: and that's kind of cool
[00:02:31] Defenestrate: has joined #ruby
[00:05:51] havenwood: >> print_3 = method(:print).curry(3); print_3.('Hello', ' ').('World')
[00:05:51] ruby[bot]: havenwood: # => Hello Worldnil (https://eval.in/897782)
[00:06:37] conta2: has joined #ruby
[00:06:54] alveric4: has joined #ruby
[00:07:30] duckpuppy: has joined #ruby
[00:09:14] RickHull: ok, I get it now; the print_3 example helped
[00:10:12] RickHull: i don't think I've played with currying in ruby before
[00:11:10] RickHull: as far as usefulness -- it gives you more flexibility for structure and expression -- where you don't have to write your methods according to what data is available at a certain "layer" of the program?
[00:11:50] RickHull: partial application? is that the term?
[00:12:20] RickHull: at some layer, you can call a method that needs 3 args with the 2 available, and pass it upwards to get the 3rd arg
[00:12:21] dminuoso: RickHull: Not exactly. You get the effect of it
[00:12:24] _main_: has joined #ruby
[00:12:24] RickHull: something like that?
[00:12:31] dminuoso: RickHull: The idea is just this: every function takes exactly 1 argument.
[00:13:22] dminuoso: RickHull: But yes you use it exactly like that.
[00:13:57] RickHull: i feel like there's a lazy evaluation win in there somewhere too
[00:14:19] RickHull: where if you don't have this, you call the method and get the return value, because the program structure demands it
[00:14:38] _main_: has joined #ruby
[00:15:03] ur5us: has joined #ruby
[00:15:09] RickHull: but maybe we didn't need to do the work
[00:15:12] dminuoso: RickHull: You can create usefulness functions. One favourite example is that of adding.
[00:15:17] nicesignal: has joined #ruby
[00:15:26] dminuoso: Think you have some `defc :add { |a, b| a + b }`
[00:15:41] guardianx: has joined #ruby
[00:15:42] dminuoso: add(2) gives you an adder function back, namely one that adds 2 to whatever you pass it to
[00:16:17] _main_: has joined #ruby
[00:16:29] dminuoso: Or maybe an eq function such as: `defc :eq { |a, b| a == b }`. now to see whether an array includes something, you can do arr.filter(&eq(5))
[00:16:30] RickHull: it's very hard to see why that is helpful
[00:17:15] dminuoso: or rather arr.any?(&eq(5))
[00:18:05] RickHull: yeah, that seems mildly useful :)
[00:18:22] dminuoso: RickHull: Okay, what if you wanted something that `when added to 2, equals to 10`
[00:18:45] dminuoso: then you do: arr.filter(&(eq(5) * add(2))
[00:19:42] dminuoso: Here Proc#* denotes function composition (it constructs a new function, whose argument is passed to the right function, and the return value is then passed to the left function -> creating a pipeline)
[00:21:17] dminuoso: RickHull: But yeah, its often useful to just "partially apply" to give a preconstructed function with some arguments already set.
[00:21:28] sucks: has joined #ruby
[00:21:30] sucks_: has joined #ruby
[00:21:50] RickHull: if f(x) == x**2 and g(x) == x + 2. then f(x) * g(x) is f(g(x)) ?
[00:22:30] dminuoso: RickHull: (f * g)(x) is f(g(x))
[00:23:04] dminuoso: so `f after g`
[00:24:25] dminuoso: RickHull: Now there's a lot more powerful things. One basic tool is that of `fmap`
[00:24:46] dminuoso: RickHull: so instead of foo.map(&func) you could also say `fmap(func, foo)`
[00:25:07] Sparky2: I'm confused
[00:25:30] dminuoso: and if you dont apply it the entire way, something special happens: funcF = fmap(func). fmap has suddenly transformed your function from a normal one into one that can handle arrays
[00:25:31] RickHull: dminuoso: that looks more like Elixir than ruby
[00:26:12] dminuoso: RickHull: The magic lies in *not* applying that `foo` right away to gain intuition about whats happening.
[00:26:12] Sparky2: My lesson is telling me I run irb like: >>> $ irb irb(main):001:0>
[00:26:23] Sparky2: What have I missed?
[00:26:37] Sparky2: never mind
[00:27:18] _main_: has joined #ruby
[00:28:16] RickHull: dminuoso: that sort of makes sense -- is fmap something ruby does today?
[00:28:34] dminuoso: RickHull: No I implemented that myself (you can see it in the gist)
[00:28:39] RickHull: and what about &func vs func ?
[00:28:40] petto: has joined #ruby
[00:29:07] dminuoso: RickHull: Thats a ruby thing. Most of ruby core extends blocks (which for all intends and purposes are just functions)
[00:29:19] dminuoso: So you have to explicitly convert your functions to blocks.
[00:30:19] RickHull: if I def foo, then I would do: func = method(:foo) # or similar?
[00:30:45] dminuoso: RickHull: Let me cook up some working example
[00:32:19] RickHull: i sort of get that func originally operates on scalars, which is why you can pass it to Enumerable#map]
[00:33:03] dminuoso: RickHull: Yeah, now Enumerable#map does two steps and it hides that fact.
[00:33:31] dminuoso: RickHull: Im splitting them into two. First lift the function from a function that transforms numbers to numbers, into a function that transforms arrays of numbers to arrays of numbers
[00:33:59] dminuoso: For clarify of types, Ill do Number -> Bool into [Number] -> Bool in my example
[00:34:08] RickHull: is there a literal sense where you pass an array as an arg to func?
[00:34:21] RickHull: oh, when it's fmap'd
[00:34:30] RickHull: and needs the last arg
[00:34:44] dminuoso: Let me show yuo
[00:35:12] dminuoso: RickHull: https://gist.github.com/dminuoso/97b5eb09b662d760d864ac4186374a84
[00:35:15] dminuoso: so this is the basic premise.
[00:35:45] dminuoso: That last line just wont work. Now the thing is, the array kind of has Integer in it, but it has additional structure so isOdd cant work with it.
[00:36:06] RickHull: also, isOdd.(3)
[00:36:47] dminuoso: RickHull: Indeed. I added type anotations, reload.
[00:37:11] RickHull: yep, but you need the '.()' right?
[00:37:29] RickHull: anyways, not a problem :)
[00:38:16] dminuoso: RickHull: reload.
[00:38:20] romain_t: has joined #ruby
[00:38:46] dminuoso: RickHull: Now just accept that f in the type signature can be [] (in fact it can be a lot of other things too)
[00:38:57] RickHull: makes sense
[00:39:03] RickHull: but hard to see a win
[00:39:16] RickHull: i mean, why not just Enumerable#map
[00:39:39] dminuoso: RickHull: You have some module that operates on arrays
[00:39:41] dminuoso: You cant change that code.
[00:40:20] RickHull: I believe there is a win, and I've tasted it before :)
[00:40:26] RickHull: but I'm trying to put my finger on it
[00:40:30] dminuoso: RickHull: Time to introduce a new type. Maybe. Maybe is kind of like Array, except its contrained to a max length of 1 okay?
[00:40:42] dviola: has joined #ruby
[00:40:45] RickHull: also I've seen in some numerical libs, like numpy and such
[00:40:46] dminuoso: And instead of writing [1] we say Just 1, and instead of writing [] we say Nothing.
[00:40:55] RickHull: where the same functions operate on scalars, vectors, and matrices
[00:41:02] dminuoso: fmap can work with that too.
[00:41:34] dminuoso: RickHull: Or maybe you are doing something like this, this is a wonderful example!
[00:42:21] jrafanie: has joined #ruby
[00:42:22] RickHull: oh -- that simplex.rb
[00:42:47] RickHull: https://github.com/rickhull/simplex/tree/parse
[00:42:48] dminuoso: RickHull: So you have a processing pipeline of functions that calculate some value
[00:42:55] hopsoft: has joined #ruby
[00:43:15] dminuoso: You dont want to wonder what happens about "what if we get a nil" in each function, because its super annoying.
[00:43:23] RickHull: ACTION nod
[00:43:25] charliesome: has joined #ruby
[00:43:38] Sparky2: What have I done?! https://gist.github.com/Dasms/4564621cafb3cce8f4d502347bbc482c
[00:43:45] dminuoso: instead what you do, is you use Maybe to denote that the value could exist or not.
[00:43:48] matthewd: So you instead construct a whole new meta-language inside ruby, because that's less annoying
[00:44:05] dminuoso: Sparky2: infinite recursion probably
[00:44:11] RickHull: Sparky2: you probably called a recursive function with no stopping condition
[00:44:24] matthewd: Sparky2: The problem is inside the method
[00:44:34] RickHull: yes, I am familiar with Maybe and Option types, though have hardly used them
[00:44:44] RickHull: but I know the concept and understand the utility
[00:45:28] dminuoso: RickHull: The idea is that you express function in terms of "the value exists", and fmap transforms it into a function that shortcircuits if its Nothing.
[00:45:41] dminuoso: which you can pass to someone else, and they can just stuff a Maybe in there.
[00:45:49] dminuoso: and get a Maybe value back
[00:46:00] Sparky2: matthewd: It looks fine to me(as far as I know) https://gist.github.com/Dasms/25d142e492cd03a7d196d50803900e63
[00:46:14] dminuoso: your responsibility is just building a function that can process maybe data, but you dont have the data, someone else does
[00:46:46] matthewd: Sparky2: I'm not going to debug this one line at a time.
[00:46:50] dminuoso: or maybe that can process arrays. you use fmap to build such a function, and give it to someone else who needs to process arrays
[00:46:54] RickHull: Sparky2: best to paste the entirety of the code
[00:47:36] Sparky2: RickHull: I'll do some googling and see if I can work out what is going on
[00:48:07] RickHull: dminuoso: one way to explain this as a win, is that you can write small functions that are obviously correct, yet flexible and composable enough to work in a larger system
[00:48:22] RickHull: it helps isolation, in a sense
[00:48:56] dminuoso: RickHull: Exactly. Now you use functions to transform functions. And fmap is not just a wild transformation, it respects some very precise laws.
[00:49:14] dminuoso: These laws lets you reason about program, and even better: it lets you rewrite programs according to those laws, without knowing what it doe.s
[00:49:54] dminuoso: Or you can reason about certain parts, because the law tells you "this holds true because of the XXX laws"
[00:51:16] dminuoso: RickHull: for example fmap has the following laws: (fmap f) * (fmap g) == fmap (g * f)
[00:51:34] dminuoso: and given id = -> (e) { e }, `fmap id = id`
[00:52:20] RickHull: >> hsh = { foo: :bar }; hsh['foo']&.to_s.reverse
[00:52:21] ruby[bot]: RickHull: # => undefined method `reverse' for nil:NilClass (NoMethodError) ...check link for more (https://eval.in/897789)
[00:52:45] dminuoso: RickHull: And thats the problem with &., you have to use it every step of the way
[00:53:09] matthewd: dminuoso: But how is that different from .() ?
[00:54:04] RickHull: so can we build a better &. pretty simply?
[00:54:05] Xiti: has joined #ruby
[00:54:21] matthewd: &. is a call syntax that gives special treatment to the no-value object, and applies the operation for any other 'just' value
[00:54:44] dminuoso: matthewd: &. does not compare to .()
[00:54:48] RickHull: i am thinking mostly in terms of the effect of handling nil without blowing up
[00:54:56] RickHull: through a sequence of operations
[00:54:58] dminuoso: The closest analogy will be Proc#>= in my upcoming library
[00:55:09] dminuoso: Errr, Maybe#=>
[00:56:15] matthewd: It swaps the order around, sure.. but it seems awfully close to Maybe semantics
[00:57:05] duckpuppy: has joined #ruby
[00:58:17] RickHull: how do you know that your fmap impl satisfies the laws? write tests?
[00:59:53] dminuoso: RickHull: Usually its easy to just reason about it and see that they hold true.
[01:00:19] Sparky2: No way... I was getting an error because I had a comment shifted one space to the left
[01:01:13] RickHull: I suppose this relates to provably correct and the ML realm
[01:02:01] dminuoso: RickHull: Yeah, but you really dont have to go that far. In haskell you have a special bonus, that allows you to only prove one of these two laws, and get the other for free.
[01:02:07] dminuoso: So you usually just prove fmap id = id.
[01:02:17] dminuoso: (Which is usually trivial that you dont even need to write or draw anything)
[01:02:30] dminuoso: in ruby you dont, so you have to prove it for both cases
[01:04:17] dminuoso: RickHull: also in all fairness, I implemented fmap twice. Once on BasicObject, and once on Kernel.
[01:04:31] iceden: has joined #ruby
[01:04:50] dminuoso: that allows you to do container.fmap(func) or `fmap func` depending on whether you intend is just applying that function the container or lifting the function instead.
[01:05:03] dminuoso: Just regarding your concern why this would be useful
[01:05:22] cdg: has joined #ruby
[01:05:32] RickHull: i would think the latter is more general
[01:05:39] RickHull: does the former do anything the latter can't?
[01:05:43] RickHull: just convenience?
[01:05:48] dminuoso: RickHull: Convenience.
[01:06:09] RickHull: I'd be tempted to define the former in terms of the latter
[01:06:17] RickHull: and only have one impl and 2 signatures
[01:06:20] dminuoso: RickHull: a.fmap(b) == fmap b a
[01:06:35] dminuoso: and oops on that haskellism. *fmap(b, a)
[01:08:15] _main_: has joined #ruby
[01:08:30] dminuoso: RickHull: https://gist.github.com/dminuoso/4079510005d0aa988cdd5a849fcf6362 this is rewritten using matthewd's last trick for converting procs into lambdas by the way :)
[01:08:44] dminuoso: This reads much nicer
[01:09:43] RickHull: I see, putting defc to use
[01:09:54] RickHull: so the win for defc is arity enforcement?
[01:10:27] dminuoso: RickHull: arity enforcement, ability to use methods as first-class objects, and currying for stepwise application
[01:10:55] dminuoso: (that second is also used, so if you dont pass any arguments, you get a function object back)
[01:11:04] matthewd: I'd say it's arity deferral rather than enforcement
[01:11:24] dminuoso: matthewd: Oh I just meant as opposed to procs (which was your original tip)
[01:12:40] matthewd: RickHull: The win is basically that this turns useful argumenterrors into confusing nomethoderrors
[01:12:42] RickHull: what's a concrete example of using methods as first-class objects compared to standard ruby?
[01:12:48] matthewd: Just Like Haskell™
[01:13:15] RickHull: yeah, I'm still pretty fuzzy on this, grasping
[01:15:04] dminuoso: matthewd: lens.rb:94:in `block in <module:Kernel>': wrong number of arguments (given 3, expected 2) (ArgumentError)
[01:15:06] matthewd: dminuoso: "spicy" was a joke, but I do think I'd name this closer to define_method rather than def -- that's the signature it matches
[01:15:06] dminuoso: not sure what you mean
[01:15:17] RickHull: I don't quite grok defc where name is nil/non-nil
[01:15:29] baweaver: mmmmm lispy
[01:15:49] jenrzzz_: has joined #ruby
[01:15:54] dminuoso: RickHull: That's just a dirty hack to enable singleton methods with that style
[01:16:05] RickHull: defun just sucks the fun right out of it
[01:16:20] matthewd: dminuoso: If you give a curried method too few arguments then call something on its result, you'll get a NoMethodError because the half-curried proc doesn't respond to gsub (or whatever)
[01:17:11] matthewd: dminuoso: If you give a curried method too many parameters, one at a time, via separate .(x).(y), you'll get a NoMethodError because the string you got back doesn't respond to call
[01:17:17] yeticry_: has joined #ruby
[01:17:33] dminuoso: matthewd: Ohh, if you use separate .(x).(y) yeah fair enough
[01:18:37] matthewd: "The idea is just this: every function takes exactly 1 argument." ;)
[01:18:53] dminuoso: matthewd: the problem is just syntax.
[01:19:42] dminuoso: matthewd: in haskell I could just do `a b c`. from that perspective a(1,2) is fine too as long as you dont see it as one application, but applying a to 1, and then applying its result to 2 :P
[01:20:12] dminuoso: I guess `a 1, 2` makes this a bit easier on the eyes
[01:20:32] dminuoso: in fact in a weird way the comma makes this grouping obvious!
[01:21:12] enterprisey: has joined #ruby
[01:21:34] matthewd: And Haskell would also treat `a b c` as a ~NoMethodError if a was "only expecting one argument"
[01:21:44] matthewd: (Granted, at compile time)
[01:22:40] dminuoso: You'd get some couldn't match expected type ‘a -> b’ with actual type ‘c’
[01:23:14] dminuoso: With enough information to identify the spot where you obviously tried to apply a value to a value
[01:24:15] matthewd: "enough information to identify the spot where you obviously tried to apply a value to a value" is what the ruby 'NoMethodError: <some value>#call' + backtrace gives you too
[01:24:46] dminuoso: Oh well its actually better
[01:24:53] dminuoso: https://gist.github.com/dminuoso/a98b72027769f90dac0625b87a510242
[01:25:13] sucks: has joined #ruby
[01:27:16] matthewd: Ah okay, it does actually "decode" the 3-for-2, which you're losing in the ruby equivalent
[01:27:29] RickHull: one common problem in enterprisey applications, particularly db-backed, is it's painful to check everything for nil. assumptions get made, and NPEs result from a schema change or missing field
[01:28:40] RickHull: I think with the right approach, a lot of this pain can go away, but some of it just gets pushed around to something else that's hard to manage
[01:30:05] matthewd: Yeah, I think that's my argument: [given it's not the language-native form] this is just a different way of explicitly coding null-awareness into everything you write
[01:31:33] yeticry: has joined #ruby
[01:37:12] helpa: has joined #ruby
[01:51:27] greensleeves: has joined #ruby
[01:53:15] greensleeves: Could someone help me understand this regex: https://github.com/aprescott/skel-complete/blob/master/skel-complete?
[01:54:02] matthewd: greensleeves: What about it?
[01:54:04] greensleeves: It is for parsing man pages and auto generating bash completion files, but somehow it is doing an incomplete job, in that it's not fetching all the options from man pages
[01:54:45] greensleeves: matthewd: I am unable to understand the regex, would appreciate some help
[01:56:06] matthewd: greensleeves: Right. But which part do you not understand?
[01:56:47] noobineer: has joined #ruby
[01:58:23] greensleeves: I think the expression is looking for --<option>, -<option> but since it is only parsing a part of the man page (it returns an incomplete list of options) I am thinking if it is parsing the entire page
[01:58:30] matthewd: greensleeves: Also, do you have an example of what it does/doesn't match?
[01:59:07] matthewd: At a glance, the $ on lines 10 and 14 don't sound right to me
[01:59:24] duckpuppy: has joined #ruby
[02:04:59] elomatreb: I'm a little too tired to understand the regex, but a similar man page parsing script I worked with had a similar problem (only parsing out some of the options) and it turned out it was because it only looked at the options in one specific section
[02:06:21] RickHull: any regex longer than 10 characters should be commented (with //x) and have test cases
[02:06:28] RickHull: there, I said it
[02:08:33] tcopeland: has joined #ruby
[02:09:32] RickHull: the first thing I would do, when debugging a regex, is add comments and test cases ;)
[02:09:47] RickHull: and as elomatreb implies, perhaps the regexen are fine and there is a problem with the outer logic
[02:10:41] elomatreb: RickHull: Another thing that really helps user friendliness of regexess are named matching groups
[02:11:05] RickHull: yeah, I haven't started doing that
[02:11:33] RickHull: here's the last one I wrote https://github.com/rickhull/compsci/blob/master/lib/compsci/simplex/parse.rb#L10
[02:11:44] matthewd: This one seems pretty legible to me ¯\_(ツ)_/¯
[02:12:46] matthewd: RickHull: `\A # starts with` -- are you one of those people who comments what `x = 1` does too? :|
[02:12:49] greensleeves: matthewd: I think that was one problem, on lines 10 and 14. The regex is not able to fetch some options when I ran it for "man"
[02:13:05] greensleeves: The rror it gave me was : <standard input>:981: warning [p 8, 1.8i, div `3tbd1,0', 0.0i]: cannot adjust line
[02:13:14] Cohedrin: has joined #ruby
[02:13:19] RickHull: matthewd: \A is rather non-obvious in meaning
[02:13:40] RickHull: particularly given its \z counterpart
[02:13:47] RickHull: it may as well be 0x92
[02:13:53] matthewd: RickHull: Only if you assume the reader isn't familiar with regex syntax
[02:14:14] RickHull: most people think ^ and $
[02:14:19] matthewd: @foo is non-obvious if you're not familiar with ruby syntax, too
[02:14:31] greensleeves: matthewd: it worked perfectly for man page for clock, it parsed through and got me all the options with the corrections on lines 10 and 14
[02:14:37] sucks_: has joined #ruby
[02:14:45] bougyman: @foo = bar is pretty obvious
[02:14:51] bougyman: even if you aren't familiar with ruby
[02:15:03] matthewd: bougyman: The assignment maybe, but not the meaning of @
[02:15:23] greensleeves: matthewd: It gave me the above error for man page of man, and got me only a partial list
[02:15:53] matthewd: greensleeves: It's really not a workable generic solution
[02:16:24] matthewd: greensleeves: It only recognises particular layout of manpage, for a start
[02:16:57] Cohedrin: has joined #ruby
[02:17:06] ur5us: has joined #ruby
[02:18:00] sucks: has joined #ruby
[02:18:37] greensleeves: matthewd: oh, so it doesn't parse through the entire page in some cases. Where does it break?
[02:19:27] matthewd: man pages are written to be read by humans, and are formatted inconsistently. A 10 line "parser" cannot reliably extract meaning.
[02:19:53] shoogz: has joined #ruby
[02:21:40] shoogz: has joined #ruby
[02:22:16] guacamole: has joined #ruby
[02:23:16] shoogz: has joined #ruby
[02:23:52] kryptoz: has joined #ruby
[02:24:45] shoogz: has joined #ruby
[02:26:15] shoogz: has joined #ruby
[02:26:47] orbyt_: has joined #ruby
[02:27:14] ledestin: has joined #ruby
[02:27:42] shoogz: has joined #ruby
[02:28:28] greensleeves: matthewd: okay. Can you suggest a way to perhaps extend this to extract all possible options in a given man page? One thing I noticed is it skips the Synopsis Section of the man page and goes to the Options section
[02:30:35] RickHull: greensleeves: there is likely no simple fix. there is no spec for manpage output that allows it to be generally parseable. whoever wrote this was satisfied for the inputs it was tested against
[02:31:44] RickHull: to proceed, you should debug it
[02:31:53] RickHull: which means feeding it an input that has bad behavior
[02:31:57] RickHull: and examining the program state.
[02:32:06] RickHull: a simple way to do this is to add print statements
[02:33:06] kryptoz: has joined #ruby
[02:33:36] kculpis: has joined #ruby
[02:34:09] Azure: has joined #ruby
[02:36:48] _lyte_: has joined #ruby
[02:37:49] RickHull: for this particular program, that looks difficult. it's very terse bash/sh. L30 is the entry point for the main logic
[02:38:08] sucks: has joined #ruby
[02:38:21] RickHull: i'm not sure what `col -b` does when fed with various manpages
[02:38:26] RickHull: but you could start there
[02:41:20] kies: has joined #ruby
[02:43:08] cam27: has joined #ruby
[02:44:04] greensleeves: RickHull: okay, shall try debugging it. I think col -b is for filtering. From man "-b Do not output any backspaces, printing only the last character written to each column position."
[02:44:40] RickHull: yeah, I have no idea what that reverse line feed stuff all about. maybe having to do with manpage interactivity and scrollability
[02:45:06] greensleeves: RickHull: could you check this small debug script I am attempting. It is not printing an output for me: https://gist.github.com/anonymous/7b307547900c9d6fc2c47c3f463f7b7d
[02:46:22] RickHull: no clue -- but that is a good approach
[02:46:41] RickHull: the other thing I would do is: man foo | col -b > manfoo.txt
[02:47:06] RickHull: and use that for the input to the parsing
[02:48:58] cdg: has joined #ruby
[02:49:06] yeticry: has joined #ruby
[02:50:00] gizmore|2: has joined #ruby
[02:54:00] sucks: has joined #ruby
[02:57:41] duckpuppy: has joined #ruby
[02:58:51] d^sh: has joined #ruby
[03:04:08] matthewd: greensleeves: The best idea is really to write a custom completion handler for the command you're interested in. There's a reason this is not the normal approach.
[03:06:20] jenrzzz: has joined #ruby
[03:12:11] cdg: has joined #ruby
[03:12:26] nofxx__: has joined #ruby
[03:21:45] Silthias: has joined #ruby
[03:23:14] ledestin: has joined #ruby
[03:27:12] kryptoz: has joined #ruby
[03:27:56] epochwolf: has joined #ruby
[03:43:41] Technodrome: has joined #ruby
[03:48:41] apparition: has joined #ruby
[03:53:14] Xiti: has joined #ruby
[03:54:16] alfiemax: has joined #ruby
[03:55:11] Dark_Arc: has joined #ruby
[03:58:37] duckpuppy: has joined #ruby
[03:59:09] tcopeland: has joined #ruby
[04:04:47] mim1k: has joined #ruby
[04:11:01] kryptoz: has joined #ruby
[04:16:32] Cohedrin: has joined #ruby
[04:17:47] ur5us: has joined #ruby
[04:29:28] guacamole: has joined #ruby
[04:31:13] alfiemax: has joined #ruby
[04:35:08] shinnya: has joined #ruby
[04:41:16] duckpuppy: has joined #ruby
[04:49:05] Barrt: has joined #ruby
[04:51:56] ^mtkd: has joined #ruby
[04:57:58] jottr: has joined #ruby
[05:00:02] Barrt: has joined #ruby
[05:05:56] alfiemax: has joined #ruby
[05:06:17] uZiel: has joined #ruby
[05:09:17] govg: has joined #ruby
[05:16:39] eckhardt: has joined #ruby
[05:21:28] banisterfiend: has joined #ruby
[05:21:34] zipace: has joined #ruby
[05:23:28] Cohedrin: has joined #ruby
[05:29:36] cam27: has left #ruby: ()
[05:39:28] sucks: has joined #ruby
[05:40:46] sucks: has left #ruby: ("Leaving")
[05:43:59] cdg: has joined #ruby
[05:54:24] JsilverT: has joined #ruby
[05:55:51] uZiel: has joined #ruby
[05:57:55] jackjackdripper: has joined #ruby
[06:01:57] RickHull: can anyone tell me if this is cool, or terrible? https://github.com/rickhull/mruby-tools/blob/master/util.rb
[06:02:40] zautomata: has joined #ruby
[06:03:01] RickHull: it takes any number of .rb files and compiles a standalone binary using mruby
[06:05:12] mim1k: has joined #ruby
[06:08:06] dinfuehr: has joined #ruby
[06:11:51] jottr: has joined #ruby
[06:16:13] LocaMocha: has joined #ruby
[06:18:37] ur5us: has joined #ruby
[06:20:25] guacamole: has joined #ruby
[06:24:20] eckhardt: has joined #ruby
[06:27:13] JsilverT: has joined #ruby
[06:28:17] shoogz: has joined #ruby
[06:29:46] shoogz: has joined #ruby
[06:31:15] shoogz: has joined #ruby
[06:32:26] alex``: has joined #ruby
[06:32:56] shoogz: has joined #ruby
[06:34:27] shoogz: has joined #ruby
[06:36:00] shoogz: has joined #ruby
[06:37:35] reber: has joined #ruby
[06:38:26] JsilverT: has joined #ruby
[06:50:35] mim1k: has joined #ruby
[07:07:53] guacamole: has joined #ruby
[07:19:52] Illianthe: has joined #ruby
[07:21:53] mim1k: has joined #ruby
[07:30:14] Dimik: has joined #ruby
[07:30:53] ledestin: has joined #ruby
[07:31:15] mjolnird: has joined #ruby
[07:37:34] echinopsis: has joined #ruby
[07:39:34] JsilverT: has joined #ruby
[07:48:16] quobo: has joined #ruby
[07:55:57] erlend: has joined #ruby
[07:56:48] marr: has joined #ruby
[08:12:47] Cohedrin: has joined #ruby
[08:12:57] jottr: has joined #ruby
[08:15:12] ur5us: has joined #ruby
[08:20:41] paul0: has joined #ruby
[08:24:12] alfiemax: has joined #ruby
[08:28:47] jrm: has joined #ruby
[08:36:52] rippa: has joined #ruby
[08:44:57] jenrzzz: has joined #ruby
[08:44:57] jenrzzz: has joined #ruby
[08:47:36] mbr: has joined #ruby
[08:53:44] Cohedrin: has joined #ruby
[08:54:59] xco: has joined #ruby
[08:55:11] jenrzzz: has joined #ruby
[08:55:11] jenrzzz: has joined #ruby
[09:03:41] nofxx: has joined #ruby
[09:05:11] dionysus69: has joined #ruby
[09:06:22] nofxx1: has joined #ruby
[09:14:05] Coldblackice: has joined #ruby
[09:15:30] Ober: but... opensource!
[09:15:40] Ober: why would anyone ever need a binary? -ruby community forever
[09:16:02] Ober: RickHull: nice. been looking at using mruby that way
[09:16:11] Ober: this could be a great way to distrubute some stuff
[09:17:18] ledestin: has joined #ruby
[09:21:03] yabbes: has joined #ruby
[09:21:52] alfiemax: has joined #ruby
[09:32:13] mim1k: has joined #ruby
[09:33:59] DTZUZO: has joined #ruby
[09:35:22] tomphp: has joined #ruby
[09:39:09] hs367: has joined #ruby
[09:39:29] bkxd: has joined #ruby
[09:44:04] mim1k: has joined #ruby
[09:49:45] dminuoso: RickHull: What target platforms?
[09:50:59] dminuoso: But it's indeed cool if it works.
[09:51:15] dminuoso: What system dependencies will the binary have? Just the glibc?
[09:51:24] claudiuinberlin: has joined #ruby
[09:52:48] michael3: has joined #ruby
[09:54:24] hs367: has joined #ruby
[10:14:02] jottr: has joined #ruby
[10:15:31] gix: has joined #ruby
[10:17:51] Puffball: has joined #ruby
[10:21:53] alfiemax_: has joined #ruby
[10:22:10] paul0: has joined #ruby
[10:23:17] ShalokShalom: has joined #ruby
[10:25:08] biberu: has joined #ruby
[10:28:58] jenrzzz: has joined #ruby
[10:28:58] jenrzzz: has joined #ruby
[10:33:24] Devalo: has joined #ruby
[10:37:00] shoogz: has joined #ruby
[10:38:26] shoogz: has joined #ruby
[10:38:46] petto: has joined #ruby
[10:39:53] shoogz: has joined #ruby
[10:40:13] jenrzzz: has joined #ruby
[10:41:21] shoogz: has joined #ruby
[10:42:47] shoogz: has joined #ruby
[10:43:03] jottr: has joined #ruby
[10:43:37] yqt: has joined #ruby
[10:43:53] Psybur: has joined #ruby
[10:44:00] Devalo: has joined #ruby
[10:44:15] shoogz: has joined #ruby
[10:47:58] hs367: has joined #ruby
[10:50:21] Ishido: has joined #ruby
[10:50:56] tomphp: has joined #ruby
[10:54:14] DTZUZO: has joined #ruby
[10:56:50] uZiel: has joined #ruby
[11:07:30] dionysus69: has joined #ruby
[11:08:55] mikecmpbll: has joined #ruby
[11:10:25] banisterfiend: has joined #ruby
[11:19:30] guardian: has joined #ruby
[11:20:17] xco: has joined #ruby
[11:21:38] selim: has joined #ruby
[11:21:56] guardian: has joined #ruby
[11:22:35] guardian: has joined #ruby
[11:23:18] banisterfiend: has joined #ruby
[11:24:23] Defenestrate: has joined #ruby
[11:24:51] dionysus70: has joined #ruby
[11:29:30] petto: has joined #ruby
[11:33:22] banisterfiend: has joined #ruby
[11:36:14] heftig: has joined #ruby
[11:36:44] dionysus69: has joined #ruby
[11:46:27] jottr: has joined #ruby
[11:52:23] uZiel: has joined #ruby
[12:06:39] xco: has joined #ruby
[12:08:32] petto: has joined #ruby
[12:11:32] jottr: has joined #ruby
[12:15:50] JsilverT: has joined #ruby
[12:18:22] petto: has joined #ruby
[12:20:43] Defenestrate: has joined #ruby
[12:20:43] Defenestrate: has joined #ruby
[12:22:11] Immune: has joined #ruby
[12:23:33] banisterfiend: has joined #ruby
[12:34:50] conta: has joined #ruby
[12:38:45] blackmesa: has joined #ruby
[12:39:37] tomphp: has joined #ruby
[12:39:38] Jameser: has joined #ruby
[12:46:17] cdg: has joined #ruby
[12:48:37] ta: has joined #ruby
[12:50:07] jottr: has joined #ruby
[12:53:25] tlaxkit: has joined #ruby
[13:11:15] dulipa: has joined #ruby
[13:13:55] michael3: has joined #ruby
[13:21:17] petto: has joined #ruby
[13:23:09] apparition: has joined #ruby
[13:24:19] iamarun: has joined #ruby
[13:28:12] michael1: has joined #ruby
[13:30:54] guille-moe: has joined #ruby
[13:31:55] Puffball: has joined #ruby
[13:35:08] tamouse__: has joined #ruby
[13:38:33] petto: has joined #ruby
[13:43:03] gnoss: has joined #ruby
[13:44:12] petto: has joined #ruby
[13:44:37] gr33n7007h: has joined #ruby
[13:45:10] uZiel: has joined #ruby
[13:45:16] Devalo: has joined #ruby
[13:47:15] petto: has joined #ruby
[13:48:54] michael3: has joined #ruby
[13:50:48] Jameser: has joined #ruby
[13:52:18] xco: has joined #ruby
[13:57:06] uZiel: has joined #ruby
[14:03:07] pilne: has joined #ruby
[14:04:11] bhaak: has joined #ruby
[14:04:14] dinfuehr: has joined #ruby
[14:05:35] xco_: has joined #ruby
[14:11:25] iamarun: has joined #ruby
[14:13:33] kapil___: has joined #ruby
[14:13:53] xco: has joined #ruby
[14:23:55] paul0: has joined #ruby
[14:30:19] darkmorph: has joined #ruby
[14:30:26] alfiemax: has joined #ruby
[14:30:54] alfiemax: has joined #ruby
[14:32:15] michael1: has joined #ruby
[14:38:53] gnoss: has joined #ruby
[14:39:25] adelyne: has joined #ruby
[14:39:42] adelyne: has left #ruby: ()
[14:42:59] tcopeland: has joined #ruby
[14:45:17] shoogz: has joined #ruby
[14:46:46] shoogz: has joined #ruby
[14:48:17] shoogz: has joined #ruby
[14:48:17] raatiniemi: has joined #ruby
[14:49:57] shoogz: has joined #ruby
[14:51:25] shoogz: has joined #ruby
[14:53:00] dionysus69: has joined #ruby
[14:53:06] shoogz: has joined #ruby
[14:56:43] zapata: has joined #ruby
[14:58:39] DLSteve: has joined #ruby
[14:59:03] dionysus69: has joined #ruby
[14:59:07] cschneid_: has joined #ruby
[14:59:44] gnoss_: has joined #ruby
[15:00:27] Silthias1: has joined #ruby
[15:00:45] gnoss: has joined #ruby
[15:01:51] skweek: has joined #ruby
[15:03:00] mtkd: has joined #ruby
[15:05:06] bkxd: has joined #ruby
[15:09:18] xco: has joined #ruby
[15:11:36] paulrbr: has joined #ruby
[15:15:46] jottr: has joined #ruby
[15:17:28] alfiemax: has joined #ruby
[15:25:16] xco: has joined #ruby
[15:25:58] CrazyEddy: has joined #ruby
[15:29:28] michael3: has joined #ruby
[15:32:45] tomphp: has joined #ruby
[15:32:59] MystiqueEnigma: has joined #ruby
[15:36:24] MystiqueEnigma: has left #ruby: ()
[15:36:41] cschneid_: has joined #ruby
[15:39:26] marr: has joined #ruby
[15:44:22] UserOO7: has joined #ruby
[15:44:28] GodFather: has joined #ruby
[15:47:05] UserOO7_: has joined #ruby
[15:50:18] alfiemax: has joined #ruby
[15:52:10] dionysus69: has joined #ruby
[15:55:42] tAn: has joined #ruby
[15:55:53] dulipa: has left #ruby: ()
[15:57:42] raatiniemi: has joined #ruby
[15:59:37] kryptoz: has joined #ruby
[15:59:39] xco: has joined #ruby
[16:00:33] Psybur: has joined #ruby
[16:04:12] cschneid_: has joined #ruby
[16:05:12] cschneid_: has joined #ruby
[16:05:44] elphe: has joined #ruby
[16:07:15] mtkd: has joined #ruby
[16:10:35] michael1: has joined #ruby
[16:11:01] weathermaker: has joined #ruby
[16:16:46] cdg: has joined #ruby
[16:16:51] cosimo_: has joined #ruby
[16:17:56] Technodrome: has joined #ruby
[16:20:00] tomphp: has joined #ruby
[16:23:24] kculpis: has joined #ruby
[16:23:41] cdg: has joined #ruby
[16:26:36] ResidentBiscuit: has joined #ruby
[16:29:08] jrafanie: has joined #ruby
[16:30:14] memo1: has joined #ruby
[16:31:47] bronson: has joined #ruby
[16:32:22] michael3: has joined #ruby
[16:33:31] darkmorph: has joined #ruby
[16:34:10] Devalo: has joined #ruby
[16:34:45] dviola: has joined #ruby
[16:35:56] Devalo: has joined #ruby
[16:38:27] GodFather_: has joined #ruby
[16:38:30] goyox86: has joined #ruby
[16:38:46] weathermaker1: has joined #ruby
[16:40:59] thinkpad: has joined #ruby
[16:47:03] ltem: has joined #ruby
[16:48:55] mtkd: has joined #ruby
[16:49:22] tAn: has joined #ruby
[16:54:17] goyox86: has joined #ruby
[16:55:43] nowhere_man: has joined #ruby
[17:06:42] edwardly: has joined #ruby
[17:06:42] edwardly: has joined #ruby
[17:07:07] tAn: has joined #ruby
[17:14:20] helpa: has joined #ruby
[17:16:36] jottr: has joined #ruby
[17:16:43] Asher: has joined #ruby
[17:16:44] orbyt_: has joined #ruby
[17:20:41] Dark_Arc: has joined #ruby
[17:24:06] uZiel: has joined #ruby
[17:24:31] dinfuehr: has joined #ruby
[17:31:37] kryptoz: has joined #ruby
[17:33:24] jrafanie: has joined #ruby
[17:34:33] tAn: has joined #ruby
[17:35:53] cschneid_: has joined #ruby
[17:38:35] Takumo: has joined #ruby
[17:38:56] ResidentBiscuit: has joined #ruby
[17:41:06] PresidentBiscuit: has joined #ruby
[17:41:09] alex``: has joined #ruby
[17:41:47] safetypin: has joined #ruby
[17:46:49] dionysus69: has joined #ruby
[17:48:57] nicoulaj: has joined #ruby
[17:51:13] mson: has joined #ruby
[17:56:19] uZiel: has joined #ruby
[18:01:21] banisterfiend: has joined #ruby
[18:01:52] johno84: has joined #ruby
[18:07:48] dviola: has joined #ruby
[18:09:50] dionysus69: has joined #ruby
[18:11:42] tAn: has joined #ruby
[18:12:17] 7GHAA5MEF: has joined #ruby
[18:13:59] 7GHAA5MEF: has left #ruby: ()
[18:14:22] goyox86: has joined #ruby
[18:17:46] uZiel: has joined #ruby
[18:18:11] orbyt_: has joined #ruby
[18:18:43] xco: has joined #ruby
[18:21:33] Dimik: has joined #ruby
[18:22:43] cloaked1: has joined #ruby
[18:22:51] uZiel: has joined #ruby
[18:25:05] nofxx: has joined #ruby
[18:25:23] paul0: has joined #ruby
[18:34:28] tvw: has joined #ruby
[18:34:51] Cohedrin: has joined #ruby
[18:35:48] cdg: has joined #ruby
[18:44:44] mbr: has joined #ruby
[18:45:44] ltem: has joined #ruby
[18:45:54] RickHull: dminuoso: not sure on the details. the ruby code is nonetheless interpreted
[18:46:29] RickHull: testing: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3138939666a525ff4f84a1505e4e7cbf8e69b794, not stripped
[18:47:00] RickHull: (testing is the filename)
[18:50:33] tAn: has joined #ruby
[18:50:48] troulouliou_dev: has joined #ruby
[18:52:23] wilbert: has joined #ruby
[18:53:18] RickHull: next logical step is to generate the ruby bytecode and compile time and inject that into the .c
[18:53:47] shoogz: has joined #ruby
[18:55:14] RickHull: note, of course, that the .rb files must be valid mruby https://github.com/rickhull/mruby/blob/doc_for_rubyists/doc/limitations.md
[18:55:22] shoogz: has joined #ruby
[18:55:33] jrafanie: has joined #ruby
[18:56:18] uZiel: has joined #ruby
[18:56:42] RickHull: Ober: as far as source obfuscation, mruby already endorses bytecode deliverables :)
[18:56:52] shoogz: has joined #ruby
[18:58:34] shoogz: has joined #ruby
[19:00:00] shoogz: has joined #ruby
[19:01:39] shoogz: has joined #ruby
[19:03:51] Teriance_Viernio: has joined #ruby
[19:04:51] gnufied: has joined #ruby
[19:12:22] jottr: has joined #ruby
[19:15:26] paul0: has joined #ruby
[19:21:13] c0ncealed: has joined #ruby
[19:25:21] tAn: has joined #ruby
[19:30:46] apofis: has joined #ruby
[19:31:20] elphe: has joined #ruby
[19:32:03] tAn: has joined #ruby
[19:32:08] ace_33: has joined #ruby
[19:34:26] guacamole: has joined #ruby
[19:35:41] oleo: has joined #ruby
[19:36:56] Devalo: has joined #ruby
[19:37:32] ozcanesen: has joined #ruby
[19:43:21] apofis: has joined #ruby
[19:47:32] milardovich: has joined #ruby
[19:48:50] guille-moe: has joined #ruby
[19:49:33] troys: has joined #ruby
[19:53:27] milardovich: has joined #ruby
[19:53:38] tAn: has joined #ruby
[19:54:28] alfiemax: has joined #ruby
[19:55:41] imode: has joined #ruby
[19:58:39] dionysus69: has joined #ruby
[20:05:56] xco: has joined #ruby
[20:13:35] kryptoz: has joined #ruby
[20:15:13] Axy: has joined #ruby
[20:15:55] jottr: has joined #ruby
[20:18:00] cschneid_: has joined #ruby
[20:18:09] Cohedrin: has joined #ruby
[20:19:06] troulouliou_div2: has joined #ruby
[20:21:21] sucks_: has joined #ruby
[20:23:47] jackjackdripper: has joined #ruby
[20:24:24] dviola: has joined #ruby
[20:25:49] troulouliou_dev: has joined #ruby
[20:26:04] jackjackdripper: has joined #ruby
[20:35:33] troulouliou_dev: has joined #ruby
[20:36:24] ResidentBiscuit: has joined #ruby
[20:36:34] Cohedrin: has joined #ruby
[20:36:39] raynold: has joined #ruby
[20:36:42] dviola: has joined #ruby
[20:39:29] goyox86: has joined #ruby
[20:40:29] goyox86: has joined #ruby
[20:41:03] alfiemax: has joined #ruby
[20:41:04] dhollinger: has joined #ruby
[20:41:45] sucks__: has joined #ruby
[20:46:25] nowhere_man: has joined #ruby
[20:49:29] elphe: has joined #ruby
[20:51:17] sucks_: has joined #ruby
[20:51:33] cagomez: has joined #ruby
[20:53:52] ResidentBiscuit: has joined #ruby
[20:54:36] michael3: has joined #ruby
[20:54:51] nowhere_man: has joined #ruby
[20:56:25] jottr: has joined #ruby
[20:59:50] alex``: has joined #ruby
[21:11:22] veeti: has joined #ruby
[21:11:35] Azure: has joined #ruby
[21:14:55] ski7777: has joined #ruby
[21:15:33] guille-moe: has joined #ruby
[21:24:26] mtkd: has joined #ruby
[21:24:36] goyox86: has joined #ruby
[21:26:33] conta: has joined #ruby
[21:28:04] enterprisey: has joined #ruby
[21:30:51] c-c_: my little game engine stub has run for 10 million frames without crashing
[21:35:34] Psybur: has joined #ruby
[21:43:56] banisterfiend: has joined #ruby
[21:44:35] jottr: has joined #ruby
[21:45:33] Emmanuel_Chanel: has joined #ruby
[21:47:08] jackjackdripper1: has joined #ruby
[21:50:56] Technodrome: has joined #ruby
[21:58:13] sucks_: has joined #ruby
[22:06:30] PaulCape_: has joined #ruby
[22:08:15] ur5us: has joined #ruby
[22:13:01] guacamole: has joined #ruby
[22:13:41] tomphp: has joined #ruby
[22:13:57] sucks: has joined #ruby
[22:17:18] Illianthe2: has joined #ruby
[22:22:30] banisterfiend: has joined #ruby
[22:23:30] minimalism: has joined #ruby
[22:24:27] muelleme: has joined #ruby
[22:25:13] Mia: has joined #ruby
[22:25:13] Mia: has joined #ruby
[22:25:52] weaksauce: has joined #ruby
[22:33:51] ledestin: has joined #ruby
[22:36:32] troulouliou_dev: has joined #ruby
[22:36:43] Emmanuel_Chanel: has joined #ruby
[22:38:37] ledestin: has joined #ruby
[22:41:23] ledestin: has joined #ruby
[22:42:50] conta: has joined #ruby
[22:50:51] cdg: has joined #ruby
[22:56:13] selim: has joined #ruby
[22:58:51] Psybur: has joined #ruby
[23:00:32] ruby[bot]: has joined #ruby
[23:00:32] ChanServ: +o ruby[bot]
[23:00:58] milardovich: has joined #ruby
[23:02:02] shoogz: has joined #ruby
[23:03:24] houhoulis: has joined #ruby
[23:03:32] shoogz: has joined #ruby
[23:04:59] shoogz: has joined #ruby
[23:05:11] elphe: has joined #ruby
[23:06:29] shoogz: has joined #ruby
[23:08:04] shoogz: has joined #ruby
[23:09:32] shoogz: has joined #ruby
[23:11:44] ledestin: has joined #ruby
[23:13:06] troulouliou_dev: has joined #ruby
[23:14:11] elphe: has joined #ruby
[23:15:57] ledestin: has joined #ruby
[23:18:19] ledestin: has joined #ruby
[23:18:22] kinduff: has joined #ruby
[23:21:05] Technodrome: has joined #ruby
[23:25:20] eightlimbed: has joined #ruby
[23:31:45] petto: has joined #ruby
[23:35:08] biox: has joined #ruby
[23:36:19] dviola: has joined #ruby
[23:38:14] orbyt_: has joined #ruby
[23:42:30] petto: has joined #ruby
[23:42:50] jenrzzz: has joined #ruby
[23:47:20] tamouse__2: has joined #ruby
[23:51:39] AxelAlex: has joined #ruby
[23:57:39] mjolnird: has joined #ruby