solnic changed the topic of #rom-rb to: Ruby Object Mapper | Mailing List: https://groups.google.com/forum/?fromgroups#!forum/rom-rb | Logs: http://irclog.whitequark.org/rom-rb
jgaskins has quit [Quit: Leaving]
dkubb has joined #rom-rb
mbj has quit [Ping timeout: 272 seconds]
mbj has joined #rom-rb
mbj has quit [Read error: Operation timed out]
mbj has joined #rom-rb
jfredett-w1 has joined #rom-rb
jfredett-w has quit [Ping timeout: 272 seconds]
mbj has quit [Ping timeout: 272 seconds]
mbj has joined #rom-rb
mbj has quit [Ping timeout: 272 seconds]
dkubb|away has joined #rom-rb
dkubb has quit [Ping timeout: 245 seconds]
jgaskins has joined #rom-rb
RomAbptTHN has joined #rom-rb
RomAbptTHN has left #rom-rb [#rom-rb]
jgaskins has quit [Quit: This computer has gone to sleep]
jgaskins has joined #rom-rb
lfox has joined #rom-rb
snusnu has quit [Quit: Leaving.]
zIWYIiWPIS has joined #rom-rb
zIWYIiWPIS has left #rom-rb [#rom-rb]
lfox has quit [Quit: ZZZzzz…]
jgaskins has quit [Quit: This computer has gone to sleep]
mbj has joined #rom-rb
mbj has quit [Ping timeout: 246 seconds]
mbj has joined #rom-rb
snusnu1 has joined #rom-rb
jgaskins has joined #rom-rb
snusnu1 has quit [Quit: Leaving.]
snusnu has joined #rom-rb
snusnu has quit [Quit: Leaving.]
snusnu has joined #rom-rb
snusnu has quit [Quit: Leaving.]
snusnu has joined #rom-rb
dkubb|away has quit [Quit: Linkinus - http://linkinus.com]
snusnu1 has joined #rom-rb
snusnu has quit [Ping timeout: 260 seconds]
mbj has quit [Read error: Operation timed out]
mbj has joined #rom-rb
<solnic> mbj: hey Markus, are you familiar with recent changes in adamantium?
<solnic> mbj: I am blocked by this and can't continue on ROM :/ basically things blow up with edge axiom + latest adamantium
<solnic> actually, no, I'm not blocked, my tests are passing with axiom and adamantium from master :)
<solnic> snusnu1: you there?
<mbj> solnic: Adamantium got a new memoization backend. Memoizable.
<mbj> solnic: In my apps there is no semantic change.
<solnic> mbj: yes and it doesn't work with edge axiom
<mbj> solnic: Okay. I can try to fix it.
<mbj> solnic: But I'm very busy.
<mbj> solnic: Maybe tomorrow evening.
<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 ;)
<mbj> solnic: no problem.
<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"
<solnic> and obviously tests are passing
<solnic> which is OK
<solnic> so, would love to be able to skip it
<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]
jgaskins has joined #rom-rb