<mbj>
snusnu: Just from: 452 additions and 789 deletions. I love it ;)
<mbj>
snusnu: Seems ducktrap is also foundational :D
<snusnu>
hehe
<snusnu>
to be fair, it doesn't yet implement all the api previously implemented (mostly session integration)
<snusnu>
but, it adds EV/EC ;)
<mbj>
snusnu: Session is not that complex.
<mbj>
snusnu: I'd love to resurrect my rom session and proove its injectable :D
<snusnu>
mbj: btw, i'm ready for a skype call in like 5min, worksforyou?
<mbj>
snusnu: jo
jgaskins has joined #rom-rb
<snusnu>
mbj: btw, i'm not even sure if my spike has fewer loc, i actually nuked all existing specs, so a pure additions/removals comparison probably is everything else but fair
<mbj>
snusnu: heh
irclogger__ has quit [Remote host closed the connection]
irclogger__ has joined #rom-rb
CraigBuchek has quit [Quit: CraigBuchek]
irclogger__ has quit [Remote host closed the connection]
irclogger__ has joined #rom-rb
CraigBuchek has joined #rom-rb
postmodern has joined #rom-rb
jgaskins has quit [Quit: This computer has gone to sleep]
jgaskins has joined #rom-rb
jgaskins has quit [Quit: This computer has gone to sleep]
breakingthings has quit [Ping timeout: 245 seconds]
breakingthings has joined #rom-rb
CraigBuchek has quit [Quit: CraigBuchek]
dkubb has joined #rom-rb
<dkubb>
good morning
<dkubb>
mbj: ahh, I see you added Ducktrap::Node::Identity, was that a result of the discussion between snusnu and I yesterday?
<snusnu>
dkubb: heh, mbj and me are on a skype call right now, mbj coded it while we're talking (about it ;)
<dkubb>
hehe
<dkubb>
snusnu: so I guess that'll allow for the default type to be Object, and for it to simply pass-through any objects without transformation?
<mbj>
dkubb: will be replaced with: Ducktrap::Node::Block.new([attribute.primitive_check, mappers
<mbj>
no conditional anymore.
<dkubb>
ahh nice
<dkubb>
no separation of Simple and Typed, everything can just be an Attribute
<dkubb>
oh I guess it could be Simple, since there are other kinds of Attributes.. EV and EC
snusnu has quit [Quit: Leaving.]
<mbj>
dkubb: Lets do some pairing later the week when my morpher refactoring for ducktrap is through.
<mbj>
dkubb: I think I'm exploring a very new domain, and I like how evaluators can be "plain", and how they can be transformed to tracing...
<mbj>
cc snusnu
<dkubb>
sure
snusnu1 has joined #rom-rb
<snusnu1>
hey dkubb
<snusnu1>
dkubb: thx for giving the spike a review! i fixed lowest hanging fruits, and will tackle the remaining ones after dinner
snusnu1 has quit [Quit: Leaving.]
snusnu has joined #rom-rb
<dkubb>
mbj: how well is ducktrap mutation tested?
<snusnu>
dkubb: 100%
CraigBuchek has joined #rom-rb
<mbj>
dkubb: It was 100% tested 2-3 month ago.
<mbj>
dkubb: The code did not changed, but mutant was improved.
<mbj>
dkubb: Running with current mutant, posting number in seconds.
<mbj>
*minutes :D mutant is not THAT fast ;)
<mbj>
dkubb: I expect the new mutant implementation "morpher" to be 50% in size of LOC of original ducktrap.
<dkubb>
oh wow
<dkubb>
mutant implementation? you mean with an ast?
<mbj>
dkubb: │Coverage: 95.71%
<mbj>
dkubb: BUT ducktrap was tested 100% with the old rspec strategy that was build on files.
<mbj>
dkubb: I think 4% are false positives where I misnamed the describe / context blocks for the new strategy.
<mbj>
dkubb: And only 0.29% are REAL new mutants.
<mbj>
dkubb: To bad mutcov.org is not online already, and has stats :D
<mbj>
dkubb: Mhh, some checks show mutant got 5% better :D
<mbj>
dkubb: Checked 10 random locations and only 2 false positives because of naming.
<mbj>
dkubb: Lets say it this way: ducktrap master should be more stable than the ruby stdlib that is not 95% mutaiton covered ;)
<dkubb>
I love how mutant gets better and makes our code better over time
<dkubb>
we're constantly raising the bar!
<mbj>
yeah
<mbj>
dkubb: most of the mutations are in op assign stuff ||= += etc.
<mbj>
dkubb: That 50% is easy to explain.
<mbj>
dkubb: Before I had n nodes with n times tracking behavior.
<mbj>
dkubb: But now I'll have n nodes, and one universal tracker.
<mbj>
dkubb: So I'll do this (nontracking) node(node(node), node(node))
<mbj>
dkubb: and tracking: tracker(node(tracker(node), tracker(node), tracker(node)))
<mbj>
dkubb: That tracker seems to be able to be generic.
<mbj>
dkubb: So a nontracking evaluator (build from an morpher ast) will allocate no intermediary objects.
<mbj>
dkubb: A tracking evaluator will allocate an object for each node visit.
<mbj>
dkubb: vanguard will add special named nodes, and these can be used to generate human readable error messages, vanguard will obviousely use the tracking evaluators.
<mbj>
dkubb: An input sanitizer for a public fancing API would use a hybrid mode.
<mbj>
dkubb: A non tracking evaluator (for speed), but in case of failure redo with tracking one and log error tree.
<mbj>
dkubb: The ducktrap error trees (regardless how crappy they are currently) save a lot of time in debuggin and operations.
<mbj>
dkubb: morpher will provide 2 kinds of nodes.
<mbj>
dkubb: one transforming node kind. and a predicate node kind.
<mbj>
dkubb: predicate nodes cant "fail"
<mbj>
dkubb: but transformers can fail.
<mbj>
dkubb: Special transforming guard nodes will only allow the transformation to continue if a predicate the guard transformer node is made of evaluates to true (or false, depending on node direction).
<mbj>
dkubb: Ducktrap is currently to complex because I did not made the distinctio between predicate nodes and transforming nodes.
<mbj>
dkubb: gonna go home, maybe online later.
<dkubb>
k, ttyl
<mbj>
dkubb: We need a memo bot in this channel ;) I'd love to discuss my morpher idea more.
<mbj>
dkubb: One last note: A typed morpher can be made of a morphing tree, with a predicate describing the result type. Ideally types can be added via this recursion and no external libs ;)
<mbj>
where predicates always return true/false obviousely #typedtofast
<dkubb>
one of the things I did in axiom is each function returns a specific type
<dkubb>
so you have your predicate nodes that return a boolean type, and your transforming nodes that take one kind of type, and return another type (or the same type in a different format)
<dkubb>
I'm able to chain things because of this
<dkubb>
so I can do: string_attribute.length.gte(5).and(string_attribute.length.lte(10))
<dkubb>
length returns an integer, which allows gte. gte returns a boolean, so it allows and, etc
<mbj>
dkubb: We talked about this. And I'll try to archive the same.
<mbj>
AFAIK that predicates system will be able to substitute axiom-types
<dkubb>
but I can also use it for transformation, eg: string_attribute.to_integer.gt(1)
<dkubb>
a predicate system would probably use axiom-types or something like it
<mbj>
I'd have no problem to include axiom-types support. But I'll try to make it self-hosting. For *fun*.
<dkubb>
I need to extra axiom-logic
<mbj>
dkubb: What I plan would superseed axiom-logic.
<dkubb>
yeah, you'll learn a bunch first, but after that we should try to close the gap
<mbj>
plan != will-happen-soon :D
<mbj>
dkubb: BTW decoupling DSL from evaluators via an AST as intermediate representation works great.
<mbj>
I'd suggest to write a generic "DSL-parser-that-returns-AST" some time.
<mbj>
Getting sick of writing DSLs.
<mbj>
There was a guy with a simpilar project in this channel, need to find his repo.
<mbj>
DSL -> AST -> Domain-Object-Tree
<mbj>
Sometimes DSL -> Domain-Object-Tree is 1:1, but in reality stuff occurs :D
<mbj>
dkubb: finally have to run, cu!
<mbj>
dkubb: Lets talk soon, after I pushed my reimplementation spike.
jgaskins has quit [Quit: This computer has gone to sleep]
breakingthings has quit []
postmodern has quit [Quit: Leaving]
<mbj>
snusnu1: snusnu, JFYI Ducktrap::Node::Noop is EXACTLY the same ass Ducktrap::Node::Identity. I dont know that code base very well after focusing on morpher ;)
bf4 has quit [Ping timeout: 240 seconds]
irclogger__ has quit [Ping timeout: 272 seconds]
snusnu1 has quit [Quit: Leaving.]
snusnu has joined #rom-rb
<snusnu>
mbj: lol
<snusnu>
mbj: Identity is the better name tho?
mbj has quit [Ping timeout: 246 seconds]
<dkubb>
identity is the generic name for a function which returns the arguments it was provided