<solnic>
mbj: no rush, it's not a quick fix anyway
<solnic>
there's a ton of failing tests
<solnic>
but as I wrote in the PR comment - I'd remove those 27 tests checking #hash method
<solnic>
that's up to dkubb to decide of course
<solnic>
mbj: I'm gonna do ROM work from now on btw
<mbj>
solnic: have fun.
<solnic>
so if you finish morpher I will update rom-mapper to use it
<jgaskins>
solnic: so your OSS break is over? :-)
<solnic>
jgaskins: oh hi!
<mbj>
solnic: I'll do also but under mbj-* prefix.
<mbj>
solnic: If its good we can discuss.
<jgaskins>
solnic: howdy!
<mbj>
solnic: So we both dont block each other ;)
<solnic>
mbj: you mean mbj/mapper and mbj/session?
<mbj>
solnic: mbj/maper is bullshit.
<solnic>
lol :)
<mbj>
solnic: I'll do something better based on morpher.
<solnic>
mbj: what's wrong with doing it in rom-mapper already?
<solnic>
jgaskins: yeah sort of, I'm trying to do some OSS whenever I can but with zero pressure this time
<mbj>
solnic: We both have differend approaches.
<mbj>
solnic: So we'll block each other in discussions.
<mbj>
solnic: Better to do it parallel.
<solnic>
mbj: I thought rom-mapper is heavily based on your mapper but with slightly diffirent naming
<mbj>
solnic: Its about that session thing ;)
<solnic>
mbj: ah I see
<solnic>
mbj: well, what we have in rom right now is inline with the general idea of proxying
<jgaskins>
solnic: good call. don't burn out, man.
<solnic>
but sure, I'd love to see what you can come up with
<mbj>
solnic: I know.
<solnic>
fwiw I'm still happy with the proxy idea
<mbj>
solnic: And I like it. But I think it can be done on a differend way.
<solnic>
I think it's the easiest thing that can work
<mbj>
solnic: And I like my idea more.
<solnic>
+ there's another proxy layer we will need, which is lazy-loading layer :)
<mbj>
solnic: So I'll try for my own. And support you all with morpher ;)
<solnic>
mbj: are you still talking about that session object being injected into relation and by default making it a pass-through-session?
<mbj>
solnic: no
<solnic>
or null-session or whatever you wanna call it
<mbj>
solnic: New ideas ;)
<solnic>
no?
<solnic>
oh?
<mbj>
I have a special idea that developed when brainstorming with snusnu.
<solnic>
any more details?
<solnic>
please tell me about if you can
<mbj>
No, spike.
<mbj>
I'll spike it out.
<mbj>
That is the best description.
<solnic>
I challange you not to and start with tests first :D
<mbj>
solnic: heh
<mbj>
solnic: I'll do some integration tests as anchors.
<solnic>
jgaskins: yeah that's the plan :) I'm also cooling down with all the metrics etc this time and I'm gonna focus on making things work as a solid PoC/prototype first and take it from there
<solnic>
jgaskins: seems like we've got all we needed to support relationships now in axiom so I'd love to integrate it in ROM
<mbj>
solnic: I'm doing the same strategy. But reactivating metrics for the small parts that have a visible shape. Morpher is an example ;)
<solnic>
mbj: I'm done with rake ci, really
<solnic>
mbj: I will use metrics but not as constraints, that didn't work for me at all
<mbj>
solnic: I dont use it while spiking. But once my design becomes durable.
<mbj>
solnic: But lets avoid to discuss this now.
<solnic>
mbj: you won't know it until you use it in the real world :) ok ok shutting up now ;)
<mbj>
solnic: Lulz. The first part of your above statment makes it hard for me to do the same.
<mbj>
solnic: I'm part of the real world. With real success.
<solnic>
mbj: wellllll
<mbj>
solnic: But pls, lets stop. We both made our statements!
<solnic>
mbj: I feel like we need a bit more people to say the same :)
<solnic>
mbj: sure sure
<mbj>
solnic: Idea: Lets do it at wroclav.
<solnic>
looking forward to your prototype
<mbj>
solnic: With some beeer!
<solnic>
sounds like fun
<solnic>
jgaskins: what did you use to generate SQL in perpetuity?
<mbj>
solnic: This is not the discussion: Mutant now has configurable "failure bar".
<mbj>
solnic: And I'm about to use the morpher predicates for filtering in mutant.
<mbj>
solnic: 1rst use of them.
<solnic>
mbj: what about expanding scope?
<mbj>
solnic: Not yet. I need the predicates for this also
<solnic>
I tried latest mutant with rom-session and lots of mutations are not killed because of how it finds the tests to run
<jgaskins>
solnic: i generated it myself. this is gonna take a while to type. :-)
<solnic>
jgaskins: we're working on a pure sql generator
<solnic>
jgaskins: you could take a look
<solnic>
jgaskins: github.com/dkubb/sql
<mbj>
solnic: All the "test selection logic, aka kill expresions" will be based on that predicates.
<solnic>
jgaskins: Dan is wrapping up a refactor where it's gonna be quite usable
<mbj>
solnic: Also I'll load the mutant.yml in mutant itself, doing the mapping with morpher.
<solnic>
jgaskins: it's gonna be a generator and a parser too :)
<solnic>
mbj: oh that's nice
<mbj>
solnic: Remember the monkeypatch you can include into your spec_helper to get "full expanded scope" for mutant.
<mbj>
solnic: I'm using that one in morpher currently.
<solnic>
mbj: shit, no :) where is it?
<mbj>
solnic: I told you about this twice ;)
<solnic>
ah ok
<jgaskins>
solnic: nice! i've been interested in looking at how it works, i just haven't gotten around to it yet.
<solnic>
sorry man, I have a lot of good reasons to forget things ;)
<solnic>
jgaskins: it's a pure sql generator/parser following out small-libs philosophy. it's based on the ast gem and should kick ass ;)
<solnic>
s/out/our/
<jgaskins>
solnic: basically, when you do something like `mapper.select { |obj| obj.name == 'foo' }`, the yielded object is a Perpetuity::Postgres::Query, which generates a `QueryAttribute` when you send `name` to it, which then generates a `QueryExpression` when you use a comparator like `expr == foo`.
<mbj>
jgaskins: I was involved while dkubb wrote it. And I'm using ASTs in this style very requently. Its good stuff!
<solnic>
jgaskins: smells like DM1 ;)
<jgaskins>
solnic: lol really?
<mbj>
solnic: Mutant does work like I need it to work. I did not had the time to include all that options. My OSS time is limited.
<mbj>
solnic: I love to support use cases for others, but when my OSS time is so limited I do my demand first.
<mbj>
solnic: So sorry for kill expressions are *still* not in.-
<solnic>
jgaskins: yeah, in DM1 there's Query abstraction and Comparison objects supporting various expressions like equality etc
<mbj>
solnic: I dont want to force any specific mutant style on you. Its just the fact I'm supporting my style first.
<solnic>
mbj: sure, I fixed it for myself in mutant but because of axiom I had to revert it
<solnic>
mbj: I'm 10000000% sure you will change your style :D it's funny to say this to a guy who wrote mutant but here I am doing it ;)
<mbj>
solnic: lulz
<mbj>
solnic: That will be an interesting discussion.
<mbj>
solnic: Looking forward to it.
<jgaskins>
solnic: interesting. i only used DM1 for one project and i was only on it for 3 months. everything else i've worked on was on AR.
<solnic>
me too
<mbj>
solnic: You need to realize: I'm using YOUR and MY style. Both.
<solnic>
mbj: ah, interesting.
<solnic>
mbj: btw - can we do filtering already?
<solnic>
I'm really in need of this feature
<mbj>
solnic: Ignoring subjects?
<mbj>
solnic: --ignore-subject 'MatchExpression'
<solnic>
some mutations make no sense and I gotta filter them out
<mbj>
solnic: Ahh ignoring mutations, yeah easy to support but not in.
<solnic>
things like "def foo; @foo ||= something; end" gets mutated to "def foo; @gmadlkgansgfoas ||= something; end"
<mbj>
solnic: I plan to not emit this one anymore.
<solnic>
oh that's great
<solnic>
what about mutating error messages? would love to turn it off too
<mbj>
solnic: Error messages are just code.
<mbj>
solnic: But you have to deal with @foo ||= expression to @foo = expression.
<mbj>
solnic: Detecting if a specific string is an Exception message is tricky
<solnic>
I see
<solnic>
I'm fine with writing manual filters
<mbj>
solnic: Each mutation has a deterministic code.
<mbj>
solnic: You can match on this codes.
<solnic>
however if mutant's config becomes such a PITA as in reek then I'm gonna be a sad panda
<mbj>
solnic: you have a very good channel to avoid this.
<solnic>
jgaskins: are you using perpetuity in production apps already?
<mbj>
solnic: Talk to me ;)
<solnic>
mbj: yeah I know
<solnic>
mbj: I'm probably abusing that power ha-ha ;)
<solnic>
mbj: btw I'm very happy about wroclove. really looking forward to it. it's so much easier to communicate in real world
<mbj>
solnic: yeah
<jgaskins>
solnic: not yet. i've built several toy Rails apps with it to get an idea of how people would want to use it, but nothing beyond my local machine. :-)
<mbj>
solnic: Small to medium tech issues are easy to discuss in chat form.
<solnic>
jgaskins: this is what we've been missing. hence my plan is to get a toy app working using ROM ASAP
<solnic>
just for the sake of seeing full stack working and realizing what's missing and what we should focus on
<solnic>
I also got to a point where I really no longer feel confident about what I'm doing and I need to experiment more with something real (as in an app that actually uses ROM)
<solnic>
jgaskins: you haven't done anything with session and unit-of-work yet, right?
<jgaskins>
solnic: yep. i really think that'll help you guys out a lot. people really want to see ROM and play with it
<solnic>
jgaskins: yeah we've spent a lot of time doing related things that slowed down ROM's development
<solnic>
I'm talking mostly about support libs, devtools, metrics (esp mutant) etc
<jgaskins>
solnic: and even though you all work on it a lot, people don't see what all you're doing because they notice is "it doesn't talk to a database yet"
<mbj>
jgaskins: Please note I totally disagree with solnic here ;)
<solnic>
that was really cool btw but I've become rather tired while focusing on that so much so this year it's 100% ROM for me
<solnic>
mbj: in what sense you disagree
<jgaskins>
mbj: if you two agreed on everything, one of you would be unnecessary, right? ;-)
<solnic>
?
<mbj>
jgaskins: yeah
<solnic>
jgaskins: lol well said
<mbj>
solnic: "jgaskins: yeah we've spent a lot of time doing related things that slowed down ROM's development
<solnic>
mbj: there's nothing to disagree with here, it is a fact O_o
<mbj>
solnic: Thats not true for me. But part of our pending discussion.
<mbj>
solnic: Not my fact.
<solnic>
mbj: well, you're talking about your mapper/session stuff right?
<mbj>
solnic: So please s/we've/I think we've/
<jgaskins>
solnic: anyway, this is the reason i actually began working on the Postgres adapter. i couldn't get *anyone* to try it out using the Mongo adapter.
<jgaskins>
it was always "Mongo? LOL NOPE!"
<solnic>
frankly if I were to start over I would've done a working prototype of the full stack first
<solnic>
based on that I would start extracting things into smaller pieces, refactoring, polishing and whatnot
<solnic>
I'm having hard time believing that you can go bottom-up when you're building such a huge thing as a data mapper
<jgaskins>
solnic: and no, i haven't done a session/UoW yet. it *does* persist an entire object graph if you insert an object with non-persisted associations, but it won't save everything if you modify existing objects.
<solnic>
jgaskins: I see, that part is something I fear ;) I'm gonna try adding UoW to rom-session soon and we'll see how it goes, I've got a prototype of a UoW already but it hasn't been integrated with rom-session yet
<solnic>
well, it's more a PoC to be honest, not a prototype
grinat has joined #rom-rb
<solnic>
mbj: man, I'm dying to know your new session idea :P I will torture snusnu tomorrow to get some info :D
<mbj>
solnic: Its called the mapping operator.
<solnic>
operator?
<jgaskins>
solnic: yeah, it's something i've had in mind for a while and i'm just not sure how to handle it all yet. i think once i fix the identity map and dirty tracking the pieces might fall together to make that easier, but i'll have to wait and see.
<mbj>
solnic: I'll try to get something up seoon. But I'm so busy :(
<solnic>
mbj: did you talk about it on irc? maybe I could scan the logs
<mbj>
solnic: Was a skype talk.
<solnic>
crap, ok
<mbj>
solnic: And the skype chat.
<mbj>
solnic: + some private channel.
<mbj>
in irc
<mbj>
not logged :(
<solnic>
ok, bummer
<mbj>
I'd love to have the logs also. It "felt" right.
<mbj>
I need to try to get all details again.
<solnic>
short summary in one sentence? I promise not to ask any questions
<solnic>
I just want to sleep tonight :D
<jgaskins>
lol
<solnic>
jgaskins: have you thought about how you'd like to tackle session?
<solnic>
jgaskins: currently you have mappers exposing the db interface right?
<solnic>
jgaskins: as in some_mapper.find { blabla }
<mbj>
solnic: Its about providing an object that captures operational transformations. In a way no metaprogramming / code genration is involved. This would be the primary interface, our could be wrapped by AR or rom-mapper like public API.
<jgaskins>
solnic: yeah, the mappers are the primary interface to everything right now. it's nice to have that consolidated interface, but it means the mapper does more than i'd like.
<mbj>
solnic: This relational operator provides the same public interface, if backed by a session or an UoW.
<mbj>
solnic: or NO session or UoW.
<solnic>
that no metaprogramming part is intriguing
<mbj>
solnic: That description does not show the beauty of the idea.
<mbj>
solnic: I'm busy and have to quit IRC, sorry
<solnic>
you're just afraid to see questions now!!! ;)
<solnic>
thanks for the summary
<mbj>
solnic: lulz
grinat has quit [Ping timeout: 272 seconds]
<solnic>
I'll talk about it with snusnu tomorrow (we're having a call in the evening)
<jgaskins>
solnic: it's nice that the mappers can be thrown away and regenerated in the next Rails request, but more and more i'm liking the idea of a session.
<mbj>
solnic: No metaprogramming: Same public API regardless how mapper / schema looks like.
<solnic>
mbj: I'm gonna hold of with my session work then, this sounds interesting so I'm gonna just wait for it
<mbj>
solnic: heh
<solnic>
I mean, I could do some work because we will keep the interface (it's basically axiom interface all the way to the top and it's kinda stable)
<solnic>
but I don't wanna mess around with session's internals if you guys have an idea how to do it w/o metaprogramming
<solnic>
jgaskins: in rom we have relation's interface on all levels
<solnic>
jgaskins: so, basically, rom-relation is still axiom but with mappers :)
<solnic>
jgaskins: and session is still axiom but with dirty tracking, mapping and UoW (in the future)
<jgaskins>
solnic: so it just kinda wraps it?
<solnic>
by saying axiom I mean its interface
<solnic>
jgaskins: yes, it's based on proxy objects
<jgaskins>
nice!
<solnic>
axiom => axiom gateway => rom relation => rom session
<solnic>
axiom => proxy => another proxy => yet another proxy
<solnic>
I imagine there could be lazy-loading proxy on top of that all
<solnic>
but now I'm intrigued by mbj's idea of not using metaprogramming to achieve this
<solnic>
because method_missing everything isn't something I'm super happy with
mbj has quit [Quit: leaving]
<solnic>
jgaskins: ^^
<jgaskins>
yeah, depends on what you're doing with it. i use method_missing for proxy objects all the time if i need to just extend the behavior, so i'm not sure they're a bad thing for that.
<jgaskins>
if there's a better way, though, i'd really be happy to know about it.
<solnic>
me no likey how backtraces are looking with so many proxying :D
<jgaskins>
lol
<solnic>
here's the thing - it's THE SIMPLEST thing that could work
<solnic>
and I really tried all sorts of approaches
<solnic>
here's the actual challenge: keep the same interface w/o re-implementing it in all the layers
<solnic>
and as you said, it's about extending existing behavior
<jgaskins>
yeah, that's the hard part. if you really want to use an axiom method in the top layer, there doesn't seem to be another way to do that.
<solnic>
and transparently preserving the original one
<jgaskins>
yep
<solnic>
exactlky
<solnic>
exactly even
mbj has joined #rom-rb
<solnic>
this is why dkubb used it in the gateway code
<solnic>
I picked it up in rom-relation
<solnic>
and eventually after lots of experiments I realized it fits very well in rom-session too
<solnic>
btw we're doing things slightly diffirent than other DMs because session is NOT our primary interface :)
<solnic>
axiom is
<solnic>
everything else is its extension
<solnic>
I think it's actually pretty neat
<jgaskins>
tbh, i've never used other DMs that i didn't build myself back before i knew about ORMs. :-)
<solnic>
but the meta-programming makes me still a bit uncomfortable so I'm eagerly waiting to see what mbj can come up with
<solnic>
jgaskins: I just analyzed sqlalchemy and doctrine and read about hibernate
<solnic>
and talk to people who used those ORMs
<solnic>
talked
<solnic>
1 major complaint is that DMs are heavy
<solnic>
because there's a big ceremony around the usage
<solnic>
create this object, set up that object, inject this, define that blah blah
<mbj>
solnic: I quit for today. Cu!
<mbj>
jgaskins: hav efun!
<solnic>
mbj: cya!
mbj has quit [Client Quit]
<jgaskins>
mbj: thanks, you too :-)
<jgaskins>
doh
<solnic>
almost
<solnic>
;)
<jgaskins>
hehehe
<solnic>
this is also why I liked the proxy concept
<solnic>
because it simplifies things, every layer extends axiom in a very lightweight way
<jgaskins>
i had a look at Hibernate, but i didn't really look too far into it because i figured if i did, i'd probably just be porting the damn thing over instead of writing something i'd actually want to use.
<solnic>
if we decide to skip the proxy idea we will have to introduce new objects, new concepts. smells like adding complexity but I may be wrong, we will see
<solnic>
jgaskins: this is what happened with doctrine IIRC, they mostly ported hibernate to PHP (sounds like a horror to me btw)
<jgaskins>
snusnu and i were going to pair on both ROM and Perpetuity like 2 months ago but he kept chickening out. :-) if we had, i'd probably understand ROM a bit better.
<solnic>
jgaskins: I'm happy to pair with you
<solnic>
on both
<jgaskins>
that'd be great!
<jgaskins>
the idea was that we'd both learn about how the other works.
<solnic>
jgaskins: I'm trying to pair more these days
<jgaskins>
solnic: same here
<solnic>
like we're trying to schedule pairing sessions with elskwid to work on virtus together :)
<solnic>
hai elskwid btw ;)
<jgaskins>
hi elskwid!
<solnic>
jgaskins: yeah so, you're from Australia right?
<jgaskins>
solnic: nope. i was living there for several years, though. moved back to the US about 7 months ago
<jgaskins>
so now i'm *behind* you in time zones.
<solnic>
jgaskins: oh! where are you based now if I may ask?
<jgaskins>
Baltimore
<jgaskins>
… USA
<solnic>
ok so it's 6 hours diff I suppose
<solnic>
what time is it on your side now?
<jgaskins>
sounds about right. it's 5pm here.
<solnic>
yep
<jgaskins>
you got any free time for pairing coming up?
<solnic>
jgaskins: i'm gonna move this to a priv chat :)
<jgaskins>
:-)
jgaskins has quit [Quit: This computer has gone to sleep]
jgaskins has joined #rom-rb
snusnu1 has quit [Quit: Leaving.]
snusnu1 has joined #rom-rb
jgaskins has quit [Quit: This computer has gone to sleep]