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
therabidbanana has quit [Quit: leaving]
jordanyee has quit [Quit: MacBook went to sleep.]
jordanyee has joined #rom-rb
lgierth_ has joined #rom-rb
lgierth has quit [Ping timeout: 250 seconds]
lgierth_ has quit [Quit: Ex-Chat]
jordanyee has quit [Quit: MacBook went to sleep.]
jordanyee has joined #rom-rb
vsorlov has joined #rom-rb
vsorlov has quit [Ping timeout: 250 seconds]
skade has joined #rom-rb
dbussink has quit [Remote host closed the connection]
dbussink has joined #rom-rb
skade has quit [Quit: Computer has gone to sleep.]
skade has joined #rom-rb
solnic has joined #rom-rb
robmiller has joined #rom-rb
<solnic> postmodern: dear lord man ;D
<postmodern> I am atleast happy you are starting to listen to me
<solnic> I always listen :P
<solnic> well, technically speaking - I read ;)
<postmodern> not really
<postmodern> it's really easy to ignore feedback that doesn't fit into your internal mental plan for a library
<solnic> I don't have any mental plans for libraries that I work on
<solnic> I used to have
<postmodern> which is why I try to extract the useful feedback even from the most angry bug reports I get
<postmodern> even if someone is insulting me in a bug report, somewhere in there is some actionable feedback
<solnic> I'm really open to criticism, trust me
<postmodern> well you closed my issues
<postmodern> when i pointed out complexities in the libs, you and mbj argued with me
<solnic> well, if I disagree with something then I disagree with something, what did you want me to do?
<solnic> sorry, are you talking about something specific now?
<solnic> I really only remember the one about Virtus.model
<postmodern> see that is not how to process criticism
<postmodern> accept criticism, try to extract the information from it, integrate it into your plans
<postmodern> instead of ignoring or arguing against criticism
<solnic> that's just agreeing to any criticism you might receive, there are always people who are not happy with what you do
<postmodern> Virtus.model is one thing, and it's a major code smell
<postmodern> also the whole hiding the meta-programming in Builder classes, even when the meta-programming is at most 4 lines
<postmodern> solnic, it's not agreeing, it's listening
<postmodern> solnic, not arguing with criticism is not implicit agreement
<postmodern> solnic, it's just listening
<solnic> I think you're confusing things here now
<postmodern> no I am not
<solnic> Virtus.model and it's module builder is not hiding simple meta-programming
<postmodern> solnic, those are two separate issues
<postmodern> solnic, having two separate methods for injecting into classes vs. modules is a code smell
<postmodern> solnic, hiding meta-programming in a Builder class is excess indirection, also a code smell
<postmodern> solnic, imho meta-programming should be kept in the main module/class
<postmodern> solnic, additional methods should be moved out into modules
<solnic> well, I had that in virtus and it was very hard to work with
<postmodern> solnic, since the first place a developer is going to look, is the main class
<solnic> I was getting lost in my own code
<postmodern> solnic, except i solved this problem in parameters, without needing different methods
<postmodern> granted I did not use anonymous Modules, which now I kind of want to try
<postmodern> and if you are furiously looking through my parameters code trying to find holes, you're doing it wrong :)
<solnic> not really
<postmodern> again merely take my criticism, sleep on it and see if you can extract some value from it
<postmodern> ie there has to be a way of making `include Virtus.new(...)` work for Modules and Classes
<solnic> well, that's a one liner
<solnic> I just don't see why is it a code smell to have 2 methods
<solnic> since including virtus into a module is different from including it into a class
<postmodern> because the developer has already specified that they are opening a module or a class
<solnic> it's just doing a different thing
<postmodern> to have different Virtus methods is requiring that they re-specify this
<postmodern> also it's unidiomatic, you don't use include_in_module and include_in_class methods
<postmodern> i feel like I'm re-explaining myself again and you're trying to justify the current code instead of thinking of how to improve it
<solnic> actually now I'm not really sure if that would be an easy thing to do
<solnic> changing that wouldn't be an improvement, that's the point
<postmodern> it would be an improvement
<solnic> I was there already, with a bunch of modules, figuring out when it's a class when it's a module
<postmodern> it would simplify the public API
<postmodern> it would allow you to inject virtus into any context
<solnic> man, it was already like that
<postmodern> without knowing what the context was
<solnic> and it sucked and it made it very hard to introduce features I wanted to have
<postmodern> solnic, did you look at how parameters solved this?
<solnic> I had almost identical code in virtus
<solnic> I remember looking there when you reported the issue
<solnic> virtus builds modules that are *configured*
<solnic> and there are various extensions that are appended conditionally
<solnic> I *prefer* what I have now over telling people to include multiple modules as it hides internals
<postmodern> right I know that
<solnic> it's just uncommon
<postmodern> still that's no reason you need multiple methods for modules vs. classes
<solnic> I need to know upfront whether something is going to be included in a module or a class
<solnic> I will revisit this for virtus 2.0
<solnic> maybe I missed something
<solnic> hard to say now, it's been a while since I worked on this codebase
<postmodern> still sounds like you are defending your original API choices
<postmodern> instead of simply taking my criticism, and thinking about it
<solnic> it's because I used both approaches
<solnic> I tried both, I prefer what I have now, simple
<postmodern> still defending
<postmodern> maybe I'll add anonymous modules to parameters and maybe you might reconsider your API choices
<solnic> man, I said I will revisit this for virtus 2.0
<solnic> I'm pretty sure I'm sticking to building modules though
<solnic> unless I decide to remove 50% of the functionality (which is a posibility)
<postmodern> ok, leave an issue open for it
<postmodern> i always have a gh issue label called "future" for those wild enhancements
mbj has joined #rom-rb
skade has quit [Quit: Textual IRC Client: www.textualapp.com]
<solnic> postmodern: https://github.com/solnic/virtus/issues/264 there you go
<solnic> postmodern: gotta step away for a second, brb
<postmodern> solnic, thank you
<postmodern> these things might not be immediately solvable, but that's no reason you shouldn't try
<mbj> morning
<mbj> postmodern: Do you realize that if you dont like some code its your responsibility to fix it in OSS? If its a bug, or a misbehavior I think its the authors responsibility.
skade has joined #rom-rb
<postmodern> mbj, no it's not my responsibility
<mbj> If you want to have it fixed it is ;)
<postmodern> mbj, i didn't like rbenv, it's not my responsibility to re-architect it
<postmodern> mbj, sure i will try to fix minor things
<mbj> If you are not happy. Dont use it.
<mbj> I have my reasons for indirections in morpher via an AST.
<postmodern> mbj, but it's not my responsibility to refactor complex code that i didn't write, since the more changes I make the less likely you will accept it
<mbj> Because I use it for many other domains and I need a shared IR, to not write optimizers / analisers over and over again.
<postmodern> mbj, plus i have a very demanding day job :(
<mbj> postmodern: Same here.
<mbj> postmodern: I write the code to solve my problems.
<postmodern> mbj, yeah which is why i was advocating writing simple code that easy to maintain
<mbj> postmodern: If these code helps stuff like ROM I'm more than happy.
<postmodern> mbj, instead of this over-SRP primitive-phobia code
<mbj> postmodern: My code is very simlpe. You dont see it. Because you did not even took a look in the reasons behind morpher.
<postmodern> mbj, see again, it looks perfect to you because you wrote it
<mbj> postmodern: Feel free to write a mapper backend other than morpher.
skade_ has joined #rom-rb
<postmodern> mbj, there's a cognitive dissonance here
<mbj> Hehe, No I dont think so.
<postmodern> mbj, I'm not talking about a full on mapper
<mbj> You wanna force a certain style of coding on me.
skade_ has quit [Client Quit]
<mbj> And I dont agree with a reason.
<postmodern> mbj, talking about specific libraries that are not the full mapper
<mbj> And you try over and over again. Wount work.
<postmodern> right because there's a cognitive bias
<mbj> If you dont like my stuff: Feel free to not use it.
<postmodern> you wrote the code using the style you believe it
skade has quit [Client Quit]
<postmodern> thus criticism of that style is meet with defense
<mbj> Nope, my style shifts from day to day.
skade has joined #rom-rb
<postmodern> yet, the complexity of the code is difficult to maintain
<mbj> I have a feedback loop because I use that stuff.
<mbj> In production.
<mbj> If you dont use it: You have a non closed feedback loop.
<postmodern> with your current workload you do not have adequate time to work on these libraries, because development requires so much time investment
<mbj> Get the feedback loop closed, report from production / whatever project you use.
<postmodern> this to me indicates complexity
<mbj> Than write your own version if mine is not suitable for you
<mbj> If you dont like them: Dont use them.
<postmodern> yet, even with my heavy workload, i am able to maintain my libraries because they are designed in a minimal fashion
<mbj> This is OSS.
<mbj> We are free to explore.
<postmodern> yes, but you are writing general purpose libraries
<mbj> For me that builder makes sense, that AST IR makes sense.
<postmodern> not expirements
<postmodern> what makes sense to you, might not to others
<mbj> Feel free to tweet: Dont use mbj/* it sucks so hard and never use it in production.
<postmodern> and you want others to help contribute to and maintain your libraries
<mbj> So you did your job in warning people from my overcomplex nonfuctional stuff.
<mbj> I do not care. I write the stuff to use it.
<mbj> For myself OSS, is only a side-effect.
<postmodern> i wasn't warning people, this is not an attack on you
<postmodern> you are not your code
<mbj> mbj/* is a selector for the code.
<postmodern> OSS is about community
<mbj> Not the person.
<postmodern> see this is exactly what I was talking about
<postmodern> criticism about code is treated as personal criticism
<mbj> I dont see your point. You think my code is overcomplex. I dont think so, its actually quite simple. Its a matter of style.
<mbj> I prefer to read ivars over passing arguments around.
<mbj> You not.
<mbj> No way, I dont feel insulted. I only think that you should accept the code the way it is.
<postmodern> instead of listening to my criticism, thinking about it, extracting valid points which you might consider working on
<postmodern> i get attacked
<mbj> Where I attacked you?
<postmodern> well more like any criticism i have is immediately challenged
<mbj> postmodern: You tell me its possible to write the code in a less complex way.
<mbj> I tell you: In my opinion, with my style the current complexity level is lower.
<mbj> So your metric is "complexity", and we see differend values on the bar.
<mbj> Instead of talking about "push arguments to ivars, is that a good pattern", we are iterating over non code topics.
<mbj> I like to argument on code, that works, that is tested.
<mbj> Anything else is noise, and yeah it goes to some kind of /dev/null here.
<mbj> Because it'll not bring the discussion forward.
<mbj> You showed me the builder class and told me: I can replace it with a 4 loc method.
<mbj> Thats what you should do. Replace it with a 4 loc method. Than I'll see your point.
<postmodern> let's try an experiment
<solnic> wooohaaa
<solnic> I was away for too long
<solnic> ;)
<solnic> postmodern: man, I'm so with you on that community bit
<solnic> maybe you haven't noticed but I was saying similar things recently
<postmodern> solnic, i mean if all of ROM support libraries want to be only for ROM, they should sport the rom- prefix
<solnic> support libs are general purpose stuff
<mbj> postmodern: You know that ROM is NOT finished?
<solnic> I use it on production
<solnic> s/it/them/
<postmodern> mbj, and probably never will be at this rate
<solnic> I agree!
<mbj> postmodern: I dont care. Because I solve my problems with the libs already.
<mbj> I write domain specific mappers for a living.
<mbj> So all the time I see a pattern I extract something that might be usable for others.
<mbj> Eventually it is.
<postmodern> mbj, that's good, except there's all these other users who want to use ROM
<solnic> postmodern: fwiw I don't think amount of supports libs was a problem
<mbj> postmodern: I do not optimize for a hypothetical concept "user of ROM". I optimize for myself. If its not usable for me, why it should be usable for others?
<solnic> the way they were developed was/is a problem
<postmodern> solnic, well there is overlap between some of the libs and morpher
<mbj> postmodern: Which one?
<solnic> postmodern: what overlap?
<postmodern> solnic, coercible
<mbj> postmodern: You do not follow this channel close enough.
<postmodern> solnic, you can configure coercible to map arbitrary inputs to boolean values, that feels like a morpher feature
<mbj> postmodern: We already talke about porting the important coercions to morpher.
<solnic> the plan is to either replace coercible with morpher or integrate it with morpher
<mbj> postmodern: But make them more strong.
<mbj> So coercible acceppts "10e10" as Fixnum input.
<solnic> coercible comes from DM1 :)
<mbj> Morpher will not do this.
<solnic> it's the same code in 90%
<solnic> we no longer like it
<mbj> postmodern: You see an in process state without transaction isolation. Sure there are some inconsistencies at this point.
<postmodern> mbj, i've been following ROM since it's announcement
<solnic> postmodern: re rate of development, things are speeding up a lot, I work on it every Friday and I'm making really nice progress, I'll start using ROM in production before end of the month as we already have use cases for it at work
<solnic> it will take more time to add crucial missing features but for reading it will be already pretty useful
<solnic> postmodern: I do agree that simplifying things to make it more contribution-friendly is important
<solnic> that's why I raised my concerns about rake ci in the past
<solnic> about the way mutation testing was practiced
<postmodern> solnic, also not only allowing you to maximize dev ROI
<postmodern> solnic, currently it seems you invest too much time into ROM and don't get adequate results
<mbj> postmodern: I measure dev ROI only in terms of usability for my commercial/OSS projects.
<mbj> postmodern: That feedback loop is faster and more relihable but subjective.
<solnic> postmodern: no, that's no longer true but it used to be
<mbj> postmodern: I can live with that as a trade off.
<postmodern> mbj, yet you always seem to be overburdened with your work load
<mbj> postmodern: I have limited OSS time, yeah.
<solnic> mbj: I think that's exactly the point postmodern is trying to make
<solnic> simplifying things in order to get more done in our limited time
<solnic> because the ROI would be bigger
<mbj> postmodern: I did some more adanced stuff in top of axiom + morpher than publically known. The knowlege will feed-back the code not (commercial).
<solnic> that's why I suggested merging support libs into one, this would simplify stuff, that's why I suggested removing many sources of friction in the dev cycles too like rake ci and failing builds on metric violations etc etc
<mbj> solnic: I cannot work on OSS currently without having an eye on relations to my commercial projects. And I'm okay with htat.
<mbj> solnic: Its easier for me to manage n small libs than one big.
<solnic> mbj: I do the same thing, things I build are driven by the needs of my project at work
<mbj> solnic: People are not the same, so you might be better in managing one bigger lib. I'm not.
<mbj> solnic: So for ROM, you could merge that libs in one if you want. I'll not use it, but if it speeds up your development: Do it.
<solnic> mbj: I'm confident that merging support libs into one would result in less time spent because dep management is drastically reduced
<mbj> solnic: I never had big dep management issues so far.
<mbj> solnic: Again, I'd love you try it.
<mbj> its the only way to know
<solnic> I won't try it w/o you guys agreeing to it
<solnic> because I'm not going to maintain those libs myself
<skade> wasn't that the big problem of datamapper?
<solnic> so far it's been OK
<solnic> skade: no it's a bit different
<solnic> here we're talking about many small support libs
<skade> i mean, a lot of the tangential libs got poor support, because they were always out of the scope of the main project
<solnic> libs that mostly help in getting rid of boilerplate code
<postmodern> mbj, I have sent you a PR, specs pass on my end
<solnic> in DM1 we inherited a ton of abandoned projects that we never had the time to maintain properly
<postmodern> also dm-core was heavily coupled
<postmodern> the slightest change in it would ripple across everything
<solnic> yeah it wasn't a good separation of concerns anyway
<solnic> as I said, it's a different story
<postmodern> also splitting apart the dm-more libs didn't help because of the coupling
<solnic> yep that's true
<skade> okay
<solnic> we hoped to find new maintainers fwiw
<solnic> we didn't then we lost interest in DM1 altogether as we decided to build DM2 and then you know the story ;)
<postmodern> i thought about rewriting DM1 using pieces of ROM
<postmodern> piecemeal style
<skade> still, but the approach "thats for me and mine is the validation" also won't help in finding maintainers for ROM
<solnic> probably not a good idea
<solnic> DM1 is an AR after all
<solnic> skade: I agree and my approach differs from mbj's here
<solnic> I know I just said I currently add features that I need
<solnic> but that doesn't mean I ignore everybody else
<solnic> I mean see issues I'm responding to, I do care about needs other people have
<solnic> I'm not going to ignore things because I don't need something
<mbj> postmodern: thx. I see a way to improve the amound of LOC saved. Currently we have multiple descendant.instance_exec blocks next to each other. What about to move it into one?
<solnic> and really, trust me, I'm very concerned about a development environment that's contributor-friendly
<mbj> postmodern: Should have the same semantics and save even more loc.
<mbj> postmodern: And the #included(descendant) method would be as short as I like.
<postmodern> mbj, combined
<mbj> postmodern: I like that PR. Historically we did each aspect fo anima infection into one method. We saw the duplication of passing the descendant around. If we only use one instance_exec block we'll not have this issue. And that solution is better than the builder.
<mbj> postmodern: Thats the kind of discussion I like.
<postmodern> mbj, also consider moving more of the anima helper methods out into modules, like InstanceMethods
<postmodern> mbj, however it took like 20 minutes to merge this code back together carefully, and it's 2:50am
<mbj> postmodern: See, its quite easy if we talk about that code.
<postmodern> mbj, it's way more easier for me to point this stuff out, than go around simplifying code
<postmodern> mbj, and i have to wake up soon
<postmodern> mbj, essentially i wasted sleep time to simplify your code
<mbj> postmodern: I did not saw it the first time. (And you also, since I needed to point out to use one instance_exec block)
<mbj> postmodern: Thats a collaborative efford.
<solnic> postmodern: heh NOW I see what you mean with the builder stuff (after seeing that PR)
<mbj> postmodern: Wasted?
<mbj> postmodern: I take that PR, why your time is wasted?
<postmodern> solnic, see, SRP doesn't make sense for meta-programming
<solnic> postmodern: but man I really agree
<postmodern> meta-programming should be declarative, since it's mutating something else
<solnic> that builder was absolutely not needed in anima
<postmodern> SRP makes more sense when your composing the return values of multiple methods/classes
<mbj> postmodern: you also did not spotted to merge the instance_exec blocks
<mbj> postmodern: At the time this was not known, the builder was the better option.
<postmodern> mbj, right because i was just merging the code as is, instead of going deeper
<mbj> postmodern: k
<postmodern> mbj, i did a bottom up merge
<postmodern> mbj, copy/pasted until it was all in #included
<mbj> postmodern: Yeah, the history of that code was multiple methods with passing descendant around.
<solnic> so this kind of builders is overengineering for sure
<mbj> postmodern: So nobody spotted before to merge the instance_execs
<postmodern> plus you weren't really using the instance state of Builder
<mbj> I'm happy its spotted now.
<mbj> We did.
<mbj> The descendant
<postmodern> just a way to pass in anima, names and descendant
<postmodern> which you could using block arguments
<mbj> the descendant and anima had been the instance state.
<mbj> The whole point of the builder was to get a rid of passing the arguments around.
<mbj> Since nobody spotted the #include method could be simplified that much when we only use one instance_exec block.
<mbj> We stuck into a local maxima.
<postmodern> again i am very against the idea of separating that logic into a separate Builder class
<postmodern> it doesn't make sense since you do not care about getting back a Builder instance
<mbj> postmodern: If we find a nice solution like this +1
<postmodern> unlike a true DSL Builder
<postmodern> which returns you a built DSL object
<solnic> like in ROM :)
<solnic> brb
<postmodern> exactly
<postmodern> mbj, also please stop applying SRP to methods :)
<postmodern> mbj, SRP is really about isolating responsibility to classes
<postmodern> i feel like single-line methods work best when you care about their return values
<solnic> yeah I've seen a lot of too SRPish stuff
<solnic> like splitting a simple method into 4 anemic methods
<postmodern> all those methods can be merged into one block with single-line comments for each
<solnic> WAY harder to follow such code
<postmodern> exactly
<postmodern> think about optimizing code for people debugging it
<solnic> postmodern: btw not sure if you've seen this post I wrote: http://solnic.eu/2014/01/22/common-pitfalls-of-code-metrics.html
<postmodern> or Single Intention Principal
<solnic> this is heavily based on my experience while working on ROM and its ecosystem
<postmodern> each block of code, method or class should communicate a distinct intention
<postmodern> solnic, ah yes
<postmodern> solnic, a good read, i definitely got burned by erroneous code metrics from codeclimate
<postmodern> oh great travis failed the build
<postmodern> because of a fracking style error!!!!
<postmodern> mbj, ok fixed the style
<mbj> postmodern: I was about to fix these style errors by myself.
<mbj> postmodern: I dont require any contributor to do this.
<mbj> postmodern: See it that way when I dont find a more elegant solution at the time I mess with the code you'll see a builder in my code.
<postmodern> mbj, it's a nice feature
<mbj> postmodern: Im more than happy to get a rid of any class.
<postmodern> mbj, what are you using for style checking? and is it configurable?
<mbj> postmodern: rubocop
<mbj> postmodern: And yeah its configurable.
<mbj> postmodern: I share mostly the same config over all my projects.
<postmodern> would love to impose my style requirements on my projects
<postmodern> but i like doing things like explicit returns
<mbj> postmodern: I know, and I still dont had the time to push the switch for mutant.
<postmodern> don't remind me of things i haven't done yet :(
<postmodern> have a backlog of unmerged branches i need to get around to
<postmodern> have a couple high priority fixes in bundler-audit i need to merge
<solnic> postmodern: yeah I've been optimizing for productiveness recently ie not giving a damn about rake ci output, especially reek
<solnic> or not prematurely documenting everything like I used to
<mbj> postmodern: merged.
<postmodern> mbj, thank you!
<solnic> ...or not killing mutants in fresh code :)
<postmodern> solnic, yeah i always prototype code first, then doc/test
<solnic> I found feedback from strict TDD to be way more better than metrics we use
<postmodern> solnic, if i can't get past prototype phase, the idea isn't fully formed imho
<solnic> exactly
<mbj> solnic: I suggest to kill mutants on fresh code via "run all tests per mutation" strategy.
<mbj> solnic: At least you should try ;)
<solnic> prototype/experimental phase shouldn't be disturbed by metrics
<solnic> mbj: I tried, doesn't work for me, mutant still adds too big of an overhead when I'm experimenting
<solnic> mostly because of those mutations that make no sense
<solnic> like ||= thing
<solnic> or mutating error messages
<solnic> and other things that I don't recall atm :)
<mbj> solnic: @ivar ||= think will be more intelligent in future.
travis-ci has joined #rom-rb
travis-ci has left #rom-rb [#rom-rb]
<travis-ci> [travis-ci] Build details : http://travis-ci.org/mbj/anima/builds/23108990
<travis-ci> [travis-ci] mbj/anima#114 (master - 456870f : Markus Schirp): The build has errored.
<mbj> solnic: Error messages are nothing special from AST pov.
<mbj> solnic: so it'll be hard to make you happy here ;)
<solnic> "Flay total is now 40, but expected 44" haha :P
<solnic> see how much time is needed to get a simple PR in?
<solnic> oh, style violation, oh flay threshold needs to be updated etc
<solnic> FRICTION
<mbj> solnic: your opinion
<mbj> solnic: For me it was the reason to accept this PR
<mbj> solnic: Because I see: Hey cool, that new code is better now.
<solnic> what was the reason?
<mbj> solnic: not the reson, better "another reason"
<solnic> lowered flay threshold?
<mbj> solnic: I already pushed an adjustment.
<solnic> you really need flay to see this?
<mbj> solnic: Soling ANOTHER reason, a small reason.
<solnic> yes, but you had to do it
<mbj> solnic: I dont care.
<mbj> solnic: I told you, I'm happy to take care of metrics for all my repos.
<solnic> you had to see the failing build. click on link, see what happened, go and change the code, push, wait for CI to pass etc
<mbj> solnic: Nobody must mess with them.
<solnic> multiple that procedure by 100 and suddenly you spent HOURS on crap work
<mbj> solnic: I did not waited for the flay only pass.
<mbj> solnic: I do 2-4 metrics adjustments a day
<mbj> thats okay for me.
<mbj> solnic: You are not part of my commercial work, so you dont have to care about my hours now ;)
<mbj> solnic: Maybe you want to optimize my OSS hours, so you actually have a reason.
<solnic> you complain about not having enough time and yet you're happy doing this kind of tedious work, I'm confused
<solnic> yes I do want you to see that you're wasting time w/o any good reason
<solnic> because what you do is strictly related to what I do
<solnic> I rely on your work
<solnic> so I'd love to see you being productive :)
<solnic> make an experiment, stop using rake ci, turn it off for a month in your projects
<solnic> measure if you achieved more w/o it
<solnic> then we'll talk again
<solnic> now you're terribly biased
<mbj> solnic: 2-4 metrics adjustments where its rare I need to do a CI cycle
<mbj> solnic: Does not hurt in any way.
<solnic> you don't know that because you haven't tried NOT doing that, really
travis-ci has joined #rom-rb
<travis-ci> [travis-ci] mbj/anima#115 (master - 424ffce : Markus Schirp): The build was broken.
<travis-ci> [travis-ci] Build details : http://travis-ci.org/mbj/anima/builds/23109046
travis-ci has left #rom-rb [#rom-rb]
<solnic> frankly codeclimate feedback is probably a great middleground here
<solnic> if I see green there I'm happy
<mbj> solnic: I was coding before rake ci also.
<solnic> I may revisit rake ci feedback at some point in the future once ROM has crucial features implemented
<solnic> right now going back and forth updating those configs is very distracting
<solnic> so you still need flay to see that something is too complex?
<mbj> solnic: I do not actively contribute to rom/* these days. Feel free to do whatevery you like.
<solnic> or you're worried that w/o it you'll end up with a bloated codebase?
<mbj> solnic: One LAST time: No I dont need flay.
<solnic> so what's the point?
<mbj> solnic: But its nice to have some unbiased opinion
<mbj> solnic: It helps me to rethink my decisions.
<solnic> don't wanna sound arogant but I feel like I'm talking to myself from 2 years ago
<solnic> codeclimate with its green colors ftw :)
<solnic> tools don't have opinions, they only generate output from which you should form an opinion
<solnic> besides the best metric for code complexity is readability
<mbj> solnic: I had been stuck in a local maxima with that anima builder.
<solnic> I've seen code with super low flay score that was very hard to follow due to what postmodern mentioned multiple times - obsessive SRP
<solnic> or SRP on a method level
<mbj> solnic: Maybe you had been stuck in a local-maxima-in-metrics?
<mbj> solnic: Or I'am we cannot know.
<postmodern> solnic, yeah fley/flog seem to prefer single liner methods
<postmodern> solnic, sort of like how lsegal was afraid people would game YARDoc scores by intentionally hiding code
<mbj> postmodern: I flay has assigned node weights. A block pass is more expensive than a method call etc.
<mbj> postmodern: Thats good. But I think we can do better.
<mbj> postmodern: My idea is to write a flay / flog like tool that bases the weight of each node by its mutations.
<solnic> yeah that would be better than flah for sure
<mbj> postmodern: So a node with less mutations is probably not as complex than a node with more mutations.
<solnic> I still prefer to just read code though
<mbj> solnic: I like the feedback. So I use it.
<mbj> solnic: I dont force it on you.
<solnic> yeah sure
<solnic> I would obviously honor rules in your repos so I would fix rake ci if I sent you a PR
<solnic> unless I wouldn't have enough time
<solnic> then I'd say "well, ok, here's the patch, CI is red, feel free to fix or reject"
<mbj> solnic: As long specs pass, I'll handle the rest.
<solnic> good to know
<mbj> solnic: I told it to you multiple times.
<solnic> it's still friction though ;D
<postmodern> what about that new thoughtbot service? hound
<solnic> never heard of it
<postmodern> supposedly it's a flog/reek as a service, service
<mbj> solnic: A PR where CI is red signalls: I had an idea I like it, but you still have to do some work if you wanna have it.
<mbj> solnic: I'm okay with that.
<postmodern> ah it uses robucop
<solnic> haha that's interesting
<solnic> so it automates PR reviews
<postmodern> solnic, wonder if you could hook it up to github services
<postmodern> would be nice to distinguish between a Travis CI fail and a Rubocop fail
<solnic> I suggested that 1.5 year ago
<solnic> I was dismissed :P
<solnic> I repeated countless of times - code smells != broken code
<mbj> solnic: It wasnt dismissed!
<mbj> solnic: use rake spec if you want to silence code smells.
<solnic> rake ci is still being run on travis
<solnic> the builds are failing because of metrics
<solnic> so, nothing changed
<mbj> solnic: ?
<mbj> solnic: You can change what is run on travis quite eaily.
<solnic> ??
<mbj> *easily
<solnic> I can and I did
<solnic> you didn't
<solnic> :D
<mbj> solnic: yeah, because I like exactly that feedback.
<postmodern> you should schedule code reviews separately
<mbj> solnic: I'm not done once the specs pass.
<postmodern> like run robucop every week or month and email back the results
<solnic> postmodern: I suggested something like that
<postmodern> as a way to identify technical debt
<postmodern> instead of doing it on every commit
<solnic> revisit feedback but don't let it desiturb our every day dev cycles
<solnic> mbj: you are done, metrics is cosmetics in most of the cases, often times things can and even should be ignored
<mbj> solnic: me != you ;)
<mbj> solnic: We dont have to agree on that stuff.
<solnic> yeah, let's not go through this again ;)
<solnic> even though we already did that lol
<solnic> but then again, postmodern raised exactly same concerns that I had
<mbj> solnic: A good disagreement is sometimes better than a weak compromise!
<solnic> so I couldn't resist
<postmodern> i say disable code metrics
<postmodern> add CONTRIBUTING.md files that list basic syntax
<solnic> I did that in ROM months ago
<solnic> shit, I forgot about CONTRIBUTING.md
<mbj> postmodern: Please dont PR that metrics disable stuff to my repos :P
<postmodern> maybe do basic syntax scans for obvious non-Ruby syntax (like tabs)
<mbj> I'll not take it.
<postmodern> but save the complex code metrics for weekly/monthly scans
<mbj> I'm off for lunch.
<postmodern> as a way to identify problem areas
<solnic> yeah that would be an improvement
<postmodern> since problem areas take time to develop, you wont catch them on every commit
<solnic> I'm sure mbj will get there at some point ;) again, don't wanna sound arrogant, just saying as somebody who went through this process already (blah, feeling really arrogant now :D)
<postmodern> it's a valid view point
<postmodern> the more i work on larger projects, the more i realize it's a process
<solnic> I guess making a code audit before every major release would be sufficent
<postmodern> yeah, you want to separate per-commit checks from pre-release checks
<postmodern> micro vs. macro
<solnic> yep
<solnic> watching the trend is a good thing, if things are improving then we're good
<solnic> or at least not getting worse
<postmodern> now there's a thought, does a service exist that charts your code metrics?
<postmodern> instead of failing builds
<solnic> I'm not aware
<postmodern> that way you can chart your velocity
<solnic> there's metric-fu gem
<solnic> it's maintained again
<postmodern> codeclimate might have something
<postmodern> but they just give you a grade letter
<solnic> really, CC is all I need these days
<solnic> but we could look into something more powerful...one day...maybe ;)
<solnic> well, no, you can see some charts there too
<solnic> + they added test coverage just yesterday
<solnic> blah, I really need to go to work :)
<solnic> postmodern: thanks for the chat, I really appreciate it
<postmodern> solnic, your welcome, hopefully this resulted in something actionable
<postmodern> also i would like to contribute to ROM, but even the small libraries have a considerable barrier to entry
<solnic> postmodern: not the ones under /rom-rb or /solnic
<postmodern> solnic, come on Virtus Builder :)
<postmodern> solnic, reminds me of early RSpec code
<solnic> well I would accept a PR that improves that
<postmodern> solnic, you know I have this day job and projects of my own :)
<solnic> you'd be surprised how many usecases have to be handled there
<solnic> + virtus 2.0 will be a rewrite anyway
<postmodern> solnic, i don't think it's fair to put the burden of simplicity on me, since i didn't write that code and thus have to first understand it
<solnic> virtus is low on my priority list anyway
<solnic> the code handling things is simpler now and we have more power so it was a win for me :)
<postmodern> yeah, ROM still needs write support
<postmodern> to make it fully functioning
<solnic> I'm focusing on adding missing parts on the mapping/reading level for now
<solnic> but very very soon I will move on to writing
<solnic> which involves SQL gem with a hanging PR :(
<postmodern> yeah once we can do full reads and writes, to at least on major SQL DB, ROM will be a viable ORM
<postmodern> even if we don't have UoW, it's still on the same level as AR or DM
<solnic> I will probably fork axiom/sql under rom-rb and continue there until dkubb gets back
<solnic> he can cherry pick from my commits if he finds them to be good
<solnic> postmodern: yep UoW is also very low on my priority list
<postmodern> a nice to have, maybe as a plugin
<solnic> we could use it without UoW, that's gonna be a bit more verbose from the client's code pov
<solnic> postmodern: what time is it on your side? :D
<postmodern> solnic, 4am currently
<solnic> gah ;)
<postmodern> i should eat some food and go to bed ASAP
<solnic> you do that sir :)
<solnic> I'm gonna go to work, have a good night
solnic has quit [Quit: Linkinus - http://linkinus.com]
snusnu has joined #rom-rb
skade has quit [Quit: WeeChat 0.4.3]
snusnu has quit [Quit: Leaving.]
snusnu has joined #rom-rb
skade has joined #rom-rb
cored has joined #rom-rb
cored has quit [Changing host]
cored has joined #rom-rb
postmodern has quit [Quit: Leaving]
jordanyee has quit [Ping timeout: 240 seconds]
jordanyee has joined #rom-rb
CraigBuchek has joined #rom-rb
snusnu has quit [Quit: Leaving.]
snusnu has joined #rom-rb
CraigBuchek has quit [Quit: Leaving.]
CraigBuchek has joined #rom-rb
CraigBuchek1 has joined #rom-rb
CraigBuchek1 is now known as CraigBuchek|921
CraigBuchek has quit [Ping timeout: 276 seconds]
ptico has joined #rom-rb
snusnu has quit [Quit: Leaving.]
snusnu has joined #rom-rb
<ptico> Hi guys. Just finished read your epic conversation and want you to know that having a lot of small SR libraries is good. For example i use many of them on the different commercial projects.
<ptico> I mean some of them in one project, some of them in another. Merging them in one big will lead to new ActiveSupport
<snusnu> yeah ptico, i agree
<mbj> ptico: I fully agree. I fear that people try to judge our approach without having tried it.
<snusnu> (i wasn't part of the convo, but i just read it myself)
<mbj> ptico: Its eays to say $foo is wrong, without trying $foo once.
<mbj> ptico: I'm very proud of the fact we are NOT discussing the public API. We are discussing implementation details.
<ptico> This is about programmers psychology – why i will use library X if similar, but purer functionality already contains library Z
<mbj> ptico: This is a sign our public API must not be soo bad.
<mbj> ptico: And I care about specifing the public API in a way all private stuff is fully mutation covered. Thats actually the only quality bar I'm really interested in.
<mbj> ptico: It includes all the other stuff: Less code is easier to mutation cover. Deduplicated code is easier to mutation cover. ...
<mbj> ptico: Also I think that people dont get we are NOT done. Its quite natural to do more iterations. We could simplify animas internals without changing the public API. That is the effect of our approach. Not the smell!
<mbj> ptico: I'd love people would evaluate morpher and its code, there is much more opportunity to cleanup / improve than on small libs like anima.
<mbj> ptico: Morpher is sadly medium sized. I'll try to reduce it.
<ptico> The only one lib can be merged (my very own opinion) is memoizable/adamantium
<ptico> Like Memoizable::Frozen or something like this
<mbj> ptico: I'm okay with having it separated.
<mbj> ptico: Its easy to merge stuff, but uneasy to separate.
<ptico> But this is because i don't met a project which needs only one of them yet
<ptico> Anyway thank you guys
<mbj> ptico: There is a project.
<mbj> ptico: the twitter gem.
CraigBuchek|921 is now known as CraigBuchek|afk
<mbj> ptico: It only uses memoizable but not adamantium.
<ptico> mbj: btw, did you ever had a problem with memoizable and mutant? I mean when mutant stops seeing the specs for memoized method?
<mbj> ptico: I had before I fixed them.
<mbj> ptico: Are you using the latest mutant?
<ptico> Oh cool
<ptico> Not sure
<mbj> ptico: The point where admanatium depenended on memoizable mutant was not aware there was a memoizer it needs to readd.
skade_ has joined #rom-rb
skade_ has quit [Client Quit]
<ptico> I have v0.5.3
<mbj> ptico: Time to upgrade!
<mbj> ptico: 0.5.3 is stoneage ;)
<mbj> ptico: Not that hard. I still get reports from people that are on 0.2.
<mbj> That uses the mutant-melbourne RBX based parser.
<ptico> Oh no! :) Every time i kill all zombies – new version is out
<mbj> ptico: ;)
<mbj> ptico: Mutant is an optionated tool.
<mbj> ptico: But I follow some non random principles when adding mutations.
<mbj> ptico: I'll blog my policy and the reason behind it.
<ptico> Endless zombie shooter
<mbj> ptico: I expect to get lots of people complaining about these: https://github.com/mbj/mutant/blob/master/Changelog.md#v0510-2014-04-06
<mbj> But #== is a coercing operator. And you should specify for it.
<mbj> In 99% of the cases where I used #== i wanted #eql?
<ptico> Ok, will try and give feedback in #mutant
<mbj> ptico: k, much apprechiated.
vsorlov has joined #rom-rb
CraigBuchek|afk is now known as CraigBuchek
<ptico> mbj: btw, i have a question regarding morpher
CraigBuchek is now known as CraigBuchek|mtg
<mbj> ptico: shoot
<ptico> I have some classes in my system which transforms received API data (Hash) to internal objects. They are basically PORO classes and i want to replace them with something more declarative
<mbj> ptico: morpher at your service ;)
<mbj> ptico: If you can pair on this I offer free support.
<mbj> ptico: Do you need bijective transformations?
<mbj> ptico: That specific example (moving a key down) is not modelled in morpher actually.
<mbj> ptico: I can add such a node, but maybe I should see the big picture.
<mbj> ptico: I *always* found in such situartions that I'm doing something wrong.
<mbj> So I explicitly do not added a node for such stuff in morpher.
<ptico> This is most complex example
<ptico> Usually its more simple transformations
snusnu has quit [Quit: Leaving.]
<mbj> I think you should write a domain specific node that does that transformation, that only adds minimal behaviour around what morpher can do for you.
<ptico> I see
<ptico> Here is another thing: transform { cargo: 'ttx1234,ml1212' } to { cargo: 'ttx1234', meta: 'ml1212' } the divider between cargo number and meta info can be also ; and :
mbj has quit [Ping timeout: 258 seconds]
snusnu has joined #rom-rb
mbj has joined #rom-rb
<ptico> mbj: RE: Here is another thing: transform { cargo: 'ttx1234,ml1212' } to { cargo: 'ttx1234', meta: 'ml1212' } the divider between cargo number and meta info can be also ; and :
<ptico> How to reach this
<ptico> ?
<mbj> ptico: Custom node.
<mbj> ptico: That stuff is uncommon IMO. Morpher allows you to reach 90% of the job. But you'll have to get your hands dirty on inline signalling like this.
<ptico> What about example in repository with custom node?
<mbj> ptico: It should remove the burden to get that 90% right.
<mbj> ptico: Just look at the existing nodes and how they work.
<ptico> Because i understand the concept but steel feels like a fool :)
<mbj> ptico: Again, I'm interested to pair with you on that one.
<mbj> ptico: I'd show you what we have, and how I think that custom one should handle it.
<ptico> Great! I need to finish some work before, lets return to this a little bit later
<ptico> Thanks
<mbj> ptico: Not today. I'm busy.
<mbj> ptico: What about Saturday / Sunday?
<ptico> I mean like next week or maybe weekend
<mbj> k
therabidbanana has joined #rom-rb
<mbj> ptico: Actually I think all cases you showed me will look nice in a custom node.
<mbj> ptico: Once we see a pattern, we can merge them back to master. This is how I created the set of nodes that are in master currently.
<ptico> Will be happy if this helps to make morpher better
<mbj> ptico: sure
<mbj> I need to focus, cu
mbj has quit [Quit: leaving]
skade has quit [Ping timeout: 245 seconds]
skade has joined #rom-rb
snusnu has quit [Quit: Leaving.]
robmiller has quit [Quit: Leaving.]
jordanyee has quit [Quit: MacBook went to sleep.]
CraigBuchek|mtg is now known as CraigBuchek|food
lgierth has joined #rom-rb
sferik has joined #rom-rb
skade has quit [Ping timeout: 240 seconds]
snusnu has joined #rom-rb
CraigBuchek|food has quit [Quit: Leaving.]
jordanyee has joined #rom-rb
mbj has joined #rom-rb
mbj has quit [Client Quit]
sferik has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
snusnu has quit [Quit: Leaving.]
cored has quit [Ping timeout: 265 seconds]
cflipse_ has joined #rom-rb
cflipse_ has quit [Client Quit]
sferik has joined #rom-rb
vsorlov has quit [Ping timeout: 276 seconds]
jordanyee has quit [Quit: MacBook went to sleep.]
snusnu has joined #rom-rb
postmodern has joined #rom-rb
snusnu has quit [Quit: Leaving.]
snusnu has joined #rom-rb
solnic has joined #rom-rb
snusnu has quit [Quit: Leaving.]
lgierth has quit [Remote host closed the connection]
jordanyee has joined #rom-rb
<postmodern> solnic, at work, but you should put together a technical slide-deck and present it over skype to us
<solnic> postmodern: ok I'll prepare something
<solnic> postmodern: I usually have time on Fridays
lgierth has joined #rom-rb
jordanyee has quit [Quit: MacBook went to sleep.]
jordanyee has joined #rom-rb
jordanyee has quit [Client Quit]
skade has joined #rom-rb
jordanyee has joined #rom-rb
jordanyee has quit [Ping timeout: 276 seconds]
<elskwid> postmodern: It’s been great to see your point of view regarding community, OSS, and the rest over the last two days. I hope you aren’t too exhausted.
<postmodern> elskwid, na work is occupying all my time
<postmodern> elskwid, a little annoyed that i couldn't communicate my point, and was easier to just send a PR in the end
<postmodern> elskwid, could have saved a lot of tweets in the beginning
<elskwid> postmodern: I think you did an admirable job with both.
<elskwid> postmodern: perhaps. I am interested in learning more about the differing viewpoints.
<elskwid> postmodern: I won’t drag it out. Just wanted to chime in and say that there’s positive outcomes from the discussion.
<elskwid> which is neat
solnic has quit [Quit: Leaving...]
skade has quit [Ping timeout: 258 seconds]
snusnu has joined #rom-rb
lgierth has quit [Ping timeout: 250 seconds]
lgierth has joined #rom-rb
skade has joined #rom-rb
sferik has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
lgierth has quit [Ping timeout: 252 seconds]
lgierth has joined #rom-rb