Log of the #fcrepo channel on chat.freenode.net

Using timezone: Eastern Standard Time
* thomz joins02:47
* dchandekstark joins04:14
* dchandekstark leaves04:20
* thomz leaves05:46
* dchandekstark joins06:20
* dchandekstark leaves06:25
* jjtuttle leaves07:32
* jjtuttle joins07:34
* dwilcox joins08:04
* dchandekstark joins08:52
* dchandekstark leaves08:56
* dchandek_ joins
* dchande__ joins09:00
* dchande__ leaves
* dchandek_ leaves09:01
* dhlamb joins
* mikeAtUVa joins09:06
* dchandekstark joins09:23
* esm_ joins09:25
* manez joins09:27
* acoburn joins09:28
* dchandekstark leaves
* dchandekstark joins09:29
* dchandekstark leaves09:35
* dchandekstark joins09:36
* esm_ leaves09:37
* dchandekstark leaves09:41
* ajs6f joins
* esm_ joins09:43
* dchandekstark joins09:48
* dchandekstark leaves09:50
* dchandekstark joins09:56
* dchandekstark leaves10:00
* dchandekstark joins10:02
* dchandekstark leaves10:06
* dchandekstark joins10:18
* dchandekstark leaves10:19
<barmintor>here's a kind of progress: I have the new converter apis in on my branch that decomposes the URI Resource -> FedoraResource function to defer node retrieval10:20
<ajs6f>barmintor: "new converter apis"?
<barmintor>ajs6f: yes, the ones you and acoburn wrote
<ajs6f>barmintor: Oh, cool.10:21
barmintor: That was at least 48 hours ago, so I have already forgotten completely.
<barmintor>ajs6f: acoburn: I made a minor change to one, namely that InvertibleFunction<X,Y> requires X toDomain(Y)
<ajs6f>barmintor: "defer node retrieval" means don't get the node unless you actually need a property thereof? So people can just use IDs if all they need is the reference?10:22
<barmintor>I also added some combinatory and inverse wrappe impls
<ajs6f>barmintor: What is the semantic of your toDomain?
<barmintor>ajs6f: it could, but in this case it's so that I can try using MODE's query api results to build triple objects instead of getting each node10:23
<ajs6f>barmintor: I'm not sure I get how that differs. You're still avoiding retrieving the node, right? Isn't that still the point?10:24
<barmintor>ajs6f: the semantic? If a function is invertible you should be able to calculate a domain value from a rnage value, no?
ajs6f: yes, that is what I meant by "defer node retrieval" :)
<ajs6f>barmintor: No. You should be able to get a function that does that. That's what InvertibleFunction does now. I'm not sure your using it right, but I'll have to see what you did.
* dchandekstark joins10:25
<barmintor>ajs6f: I am speaking as an implementer here- if InvertibleFunction implements toDomain, then I know how to build an InverseFunction
ajs6f: if it doesn't, then I have to write inverse function impls for all my converters10:26
<ajs6f>barmintor: Okay, but I don't see why we need to use MODE's query stuff for that. I'm not super-against it or anything. I just seems unnecessarily complicated. But I'll wait to see your code.
barmintor: Did you somehow not notice InvertifbleFunction:inverse?
barmintor: Yes, that is exactly what you are suppose to do.10:27
* dwilcox leaves
* manez leaves
<ajs6f>bamintor: Having apply and your toDomain together is not a function. It's a pair of functions.10:28
<barmintor>ajs6f: put yourself in the shoes of me as an implementer. Would you rather locate all the function logic in one place and wrap generically as necessary, or have completely separate classes?
<ajs6f>barmintor: For example, you can no longer use it in the method someStream.map(myfunction)
<barmintor>ajs6f: of course you can
<ajs6f>barmintor: No, you have to use a method ref.10:29
<barmintor>ajs6f: someStream.map(myFunction.inverse())
<ajs6f>barmintor: No, you can only do that if myFunction.inverse() is a @FunctionalInterface, with only one abstract method. Your adding toDomain breaks that.
* dchandekstark leaves10:30
<ajs6f>barmintor: Unless you have some really unexpected default impl.
barmintor: I'm not saying your design can't go forward. I'm saying you are not using the API that acoburn and I worked up. You are using something else.10:31
barmintor: Something based on pairs of functions instead of functions.
<barmintor>wait, hold on10:35
<ajs6f>HOLDING
HOLDING10:36
HOLDING
<barmintor>is your stream example above supposed to be producing a stream of functions, or applying a function to a stream of results
<ajs6f>the latter
<barmintor>ok
<ajs6f>The far more common use case, I would think
Can I stop holding now?10:37
It's getting a bit tense.
<barmintor>and DomainRestrictedFunction, does that have an abstract method?
or InveritbleFunction, now that I think of it10:38
<ajs6f>yep, inDomain. Yeah, it's not good, but the difference in semantics is pretty dang obvious, isn't it.
<barmintor>I think you can only have one abstract method in the actual FunctionalInterface
<ajs6f>You're right.10:39
<barmintor>which InvertibleFunction extends
<ajs6f>Yep, it's not usable as a simple function to begin with.
<barmintor>No, I think they are
I'm pretty sure they are
<ajs6f>Syntactically. But again, the semantics are pretty clear.
I'm trying it now in Eclipse.
<barmintor>because if you're right, there's something very wrong with our test suite10:40
:-/
<ajs6f>Did you need my words to tell you that?
It does work. I do not like this at all.10:42
<barmintor>I don't think it's even that confusing
<ajs6f>How does it know to use apply and not inDomain?
<barmintor>because there's only one method annotated in FunctionalInterface10:43
they all extend java.util.Function10:44
* esm_ leaves
<barmintor>if we annotated one of the extensions, I expect the compiler would barf
<ajs6f>A) That annotation is not used in DomainRestrictedFunction, B) FunctionalInterface doesn't annotate methods, but classes, and C) that annotation doesn't have anything the semantic you are suggesting for it.
it says nothing about subtypes of the type on which it is laid.10:45
<barmintor>I really don't think this is that hard for the compiler to figure out
* esm_ joins
* dwilcox joins
<ajs6f>I don't think so either. That's not what bugs me. What bugs me is that it is not clear to me by what rules (or whose rules) it's being calculated.10:46
More pragmatically, it doesn't really change my view, tho. If you want to use something like toDomain, don't start with InvertibleFunction. I promise you, that is not what I meant by it.10:47
<barmintor>ajs6f: well, look
we are replacing an api that included backward()
if a function is invertible, which I take to mean it's bijective,10:48
<ajs6f>We are replacing that APi specifically because we didn't like the way it did that.
barmintor: I'm not saying don't do this. I'm saying, don't call it by the same name.10:49
<barmintor>hmm. I was under the impression that acoburn wanted a lighter wait kernel
and to use the JDK 8 function interfaces instead of guava
<ajs6f>barmintor: part of the design of acoburn and my API was specificlly to separate "has an inverse" from "bijective". they aren't the same in that API. This isn't category theory.10:50
<barmintor>anyway, although it was a PITA, it incidental to what I'm trying to do10:51
<ajs6f>barmintor: Yes. If you don't want to use that new APi, that's fine. Make up something that suits you. We can worry about getting everything on the same page later.
<acoburn>barmintor: I wanted a lighter-weight kernel, but mostly I found the whole IdentifierConverter classes terribly confusing
<barmintor>acoburn: yes, they are quite terrible, because we really have types String identifiers10:52
<ajs6f>typed?
<barmintor>I was ranting about this yesterday
* bseeger joins
<barmintor>ajs6f: yes, they have phantom types but we pass around their String serializations
<ajs6f>barmintor: Yes. We could probably do things with URI and URL and classes like that. But that's a lot of baggage. We could do our own type system for ourselves…10:53
That's kind of where we started to go with InternalIdentifierConverter, etc.
I don't think anyone really likes that.10:54
<barmintor>there's 1) the external URI 2) the path fragment for the repo 3) with hash and namespace magic 4) without the magic suffixes 5) JCR paths
oh, I ended up liking it A LOT
at least you sort of understand what context you're in
<ajs6f>barmintor: Do you remember talking with cbeer and myself about the desire to have the contents of the repository be immune to shifting it around in the network? "NO HTTP URIS inside the repo."?10:55
barmintor: Well, maybe we can do something simple and clear. InternalIdentifier, ExternalIdentifier.
<barmintor>yeah, I do. I'm not saying there ought not to be those 5 identifying contexts, I'm saying passing around Strings and crossing your fingers is very confusing10:56
you're constantly asking "should this start with a slash? should I trim jcr:content? is it an error if it's a tombstone?"
ugh
ajs6f: I initially tried that refactor to introduce Internal/External abstractions, but it was too confusing to do that *and* decompose the Id translators10:58
<ruebot>https://wiki.duraspace.org/display/FF/2016-08-04+-+Fedora+Tech+Meeting
<barmintor>so I backed off, went with the new function compositions. But would still like to see the abstractions come on
* dchandekstark joins
<ajs6f>Okay, maybe this is a terrible thought, but Strong is not final.10:59
String, rather.
Oh, wait, yes it is.
Probably to protect idiots like me from ourselves.11:00
<barmintor>yeah
s/me/us/, but yeah
<ajs6f>Still, the types are there, and we could use String to implement them.
<barmintor>but URI is basically a String wrapper, so yaknow
<ajs6f>InternalIdentifier < CharSequence.
Sorry .InternalIdentifier < Identifier < CharSequence11:01
ExternalIdentifier < Identifier < CharSequence
Yeah, and just keep a String inside.
<barmintor>ajs6f: get on the phone
<ajs6f>What's the URL for the meeting?11:02
<barmintor>ajs6f: people are asking after you
<ruebot>https://wiki.duraspace.org/display/FF/2016-08-04+-+Fedora+Tech+Meeting
<ajs6f>What's the dereferencable identifier for the meeting.
* kat3_drx joins
<barmintor>ajs6f: are you in the repository or outside?
<ajs6f>barmintor: I am dereferencing _MYSELF_.
* ajs6f is here11:03
I feel like a flower unfolding.
<dhlamb>brt, internet issues11:04
<ruebot>https://jira.duraspace.org/projects/FCREPO-2098
oops
<acoburn>https://github.com/fcrepo4/fcrepo4/pull/108311:05
* dchandekstark leaves
<acoburn>and https://github.com/fcrepo4/fcrepo4/pull/1084
<ruebot>https://jira.duraspace.org/browse/FCREPO-2098
* dchandekstark joins11:09
* dchandekstark leaves11:10
* dchandekstark joins
<ruebot>https://wiki.duraspace.org/display/FF/2016-08-05+-+Import+-+Export+Planning+Meeting11:11
<ajs6f>dchandekstark: We're about to fix FCREPO-2098 and cut a fresh RC for 4.6.0 with that fix. Can you guys test that, since you reported it?
<ruebot>https://doodle.com/poll/9yb77qtcuhw2yaya11:12
https://wiki.duraspace.org/display/FF/Design+-+Import+-+Export
<dchandekstark>ajs6f: this is the ETag mismatch problem?
<ajs6f>dchandekstark: yep11:13
This is meeting is going at lightspeed.
<dchandekstark>ajs6f: lemme check with coblej
<ajs6f>dchandekstark: thanks!
I always thought that worked.11:14
But then, that's how I feel about Fedora.
* dchandekstark leaves11:16
* github-ff joins
[fcrepo4] ajs6f pushed 1 new commit to 4.6.0-RC: https://git.io/v6qJ9
fcrepo4/4.6.0-RC ee2bd46 Aaron Coburn: Properly support HTTP Patch with If-Match header checking (#1084)...
* github-ff leaves
* github-ff joins
[fcrepo4] ajs6f pushed 1 new commit to master: https://git.io/v6qJ7
fcrepo4/master 1833da0 Aaron Coburn: Properly support HTTP Patch with If-Match header checking (#1083)...
* github-ff leaves
<mikeAtUVa>Whats the new technology called (instead of ldpath)?
<ajs6f>mikeAtUVa: It is LDPath, just implemented in a diff place.11:17
mikeAtUVa: It's just a more powerful form of LDPath.
<mikeAtUVa>ajs6f: thanks
<ruebot>echo echo echo11:20
<mikeAtUVa>If there's not unanimous agreement, do committers/community members vote on these things?11:21
<ruebot>mikeAtUVa: that makes sense to me.
<mikeAtUVa>I agree it's a waste of our limited resources.11:22
<ajs6f>mikeAtUVa: There is agreement except for awoods. I'm not sure that's quite what you mean.
* dchandekstark joins
* dchandekstark leaves11:23
<f4jenkins>Project fcrepo4 build #3353: FAILURE in 7 min 9 sec: http://jenkins.fcrepo.org/job/fcrepo4/3353/
* dchandekstark joins
<ruebot>acoburn++11:24
<mikeAtUVa>Could we also reach out to folks who might be using it and walk them through the new alternative?
what ruebot said...
Can we be sure to include instructions and documentation (or links to it) in the release notes for the release that removes it.11:26
<ajs6f>mikeAtUVa: We sure can. Would you like to help write that?
<mikeAtUVa>ajs6f: I can try.11:27
* dchandekstark leaves
<ajs6f>mikeAtUVA: It would actually be quite cool, specifically because you haven't been knee-deep in this stuff like acoburn. You'll bring fresh eyes.
<barmintor>I'm going to argue a little more with ajs6f about invertible functions off the call11:28
:)
<ruebot>acoburn++11:29
<ajs6f>barmintor: I'll -invert _your_ function for you!
<barmintor>ajs6f: yes, that's what I'm adding to that branch
We can invert it for you wholesale
<mikeAtUVa>ruebot: notes are done.
<ruebot>mikeAtUVa++11:30
<ajs6f>Wholesale inversion is very close to total protonic reversal.
mikeAtUVa++
* dchandekstark joins11:32
* kat3_drx leaves11:33
* travis-ci joins11:38
fcrepo4/fcrepo4#4640 (4.6.0-RC - ee2bd46 : Aaron Coburn): The build passed.
Change view : https://github.com/fcrepo4/fcrepo4/compare/0c3ff7740cc6...ee2bd468fa08
Build details : https://travis-ci.org/fcrepo4/fcrepo4/builds/149788594
* travis-ci leaves
* travis-ci joins
fcrepo4/fcrepo4#4641 (master - 1833da0 : Aaron Coburn): The build passed.
Change view : https://github.com/fcrepo4/fcrepo4/compare/ad9423914a9d...1833da04b382
Build details : https://travis-ci.org/fcrepo4/fcrepo4/builds/149788661
* travis-ci leaves
<dchandekstark>ajs6f: coblej is going to test the RC when it's available11:44
<ajs6f>dchandekstark++ jcoble++
<dchandekstark>barmintor: testing fixity service on our prod server11:45
<barmintor>dchandekstark: I'll stay on the channel
<dchandekstark>i'm suspicious that earlier failures may be related to test server sitting idle for a time before the checks
<barmintor>hmm.11:48
<dchandekstark>barmintor: not sure we put in an issue for this, but we have observed consistenly that following an idle period, the first request to Fedora blows up with persistence exception11:52
barmintor: infinispan error
<barmintor>dchandekstark: hmm
dchandekstark: maybe a timeout?
<dchandekstark>lemme get the details11:53
barmintor: they look like:
STATUS: 500 org.infinispan.persistence.spi.PersistenceException: SQL error while fetching stored entry with key: 87a0a8c7505d64a5b072e7-8124-4655-82f3-18605daf5859, lockingKey: 87a0a8c7505d64a5b072e7-8124-4655-82f3-18605daf5859 [...]
<ajs6f>mikeAtUVa: ^^^11:54
<barmintor>I am feeling a jdbc connex timeout
<ajs6f>mikeAtUVa: Does that sound anything like the probs you had with connex timeouts?
<barmintor>and also my usual hostility to ison
<dchandekstark>barmintor: bizarre - just got a couple of those persistence exceptions doing a fixity check11:57
i hadn't seen that before
although i didn't check all the errors on test11:58
barmintor: oh, that may be because i'm retrieve the object with ActiveFedora
barmintor: on test, i was instantiating AF::File objects with URIs and then calling check_fixity11:59
<barmintor>like the AF object may have become stale b/c of a parallel update?
<dchandekstark>barmintor: shouldn't have been stale - nothing else happing on server now
happening12:00
barmintor: i'm getting the feeling that we might be better off waiting until we can run F4 on Mode512:01
w/o ISPN
<ajs6f>dchandekstark: That's the conclusion to which mikeAtUVa has come.12:02
<barmintor>and escowles afaik
<dchandekstark>ajs6f: and what version are we looking at now for that?
not 4.6, right?
<ajs6f>dchandekstark: 4.7.0. The new code is in master now, actually, so whatever the next release (after 4.6.0) is is guaranteed to be sans ISPN.12:03
Let's all go to ISPN's house and TP it!
<barmintor>dchandekstark: I think the big question is whether Jena 3 goes in to a 4.6.x release or 4.7 (did I follow that right ajs6f?)
<ajs6f>barmintor: No, I'm not sure how Jena 3 gets into 4.6.0.12:04
barminto: Oh, wait, 4.6.x, sorry.
barmintor: Yes, I think that's still to be decided, but I suspect we will move on a 4.6.1.
<barmintor>those seem like pretty fast turnarounds, though12:05
<ajs6f>barmintor: The alterantive would be 4.6.1 just deprecates fcrepo-transform and Jena 3 shows up in 4.7.0
<barmintor>I just need the new version of ldpath and mode5 to be released by November. Actually by halloween.12:06
<ajs6f>barmintor: Well, acoburn has it ready and waiting. We could merge it today, we're just being courteous to awoods. Did you ever watch Mr. Rogers when you were young?
<acoburn>barmintor: I was assuming that Jena 3.x goes into 4.7.x
<dchandekstark>ajs6f: so if we build master, it will be w/o ISPN12:07
<ajs6f>dchandekstark: Correct.
dchandekstark: (So the backends are incompatible and a migration will be needed.)
* esm_ leaves12:08
<barmintor>Showing 113 changed files with 2,254 additions and 718 deletions.12:09
<ajs6f>barmintor: The vast majority of that is just com.hp.jena => org.apache.jena names
<dchandekstark>ajs6f: that's why i'm thinking about waiting
<barmintor>acoburn: ^^ that was me refactoring to use the kernel j.u.function apis
sorry, ajs6f
<ajs6f>barmintor: Wait, that's your forthcoming PR?12:10
<barmintor>more reason not to book lots of rebasing in the future
yeah
<ajs6f>barmintor: You end up _adding_ hundreds of lines of code. That's a little surprising.
<barmintor>well
<acoburn>barmintor:ajs6f: this is _exactly_ why I want the jena PR to be merged soon — rebasing will be hell12:11
I know awoods volunteered to do that, but that's just going to be a big waste of time
<barmintor>ajs6f: every single new class pulls in a minimum 24 lines of code, and a corresponding test with another 25 lines
<ajs6f>If we can spend all of our time rebasing, we can avoid introducing any new bugs.
barmintor: Right, the licenses. Forgot about that. When you point that out, it doesn't seem nearly so bad.12:12
<mikeAtUVa>dchandekstark: sorry, I was away. We got those 500s after idle periods.
<barmintor>ajs6f: like, adding a CompositeConverter so that Converter impls can .andThen -> a Converter?12:13
ajs6f: that alone adds probably 200 LoC, but it's almost all javadoc and licenses
<mikeAtUVa>dchandekstark: we "solved" it by no longer using the connection pooling because ISPN connection pooling sucks and it doesn't validate connections before use. Keepalives didn't work, and we couldn't use other tricks to keep the connections alive, so we switched to its non-pooled mode.12:14
<ajs6f>barmintor:That sounds like a sub-interface of Converter with a single default method that could reasonably be included inside Converter as a public static type. But it's okay either way to me. I'm fine with a seperate compilation unit.12:15
<barmintor>ajs6f: I have a preference for separate classes
<ajs6f>barmintor: So let it be written, so let it be done.
<barmintor>ajs6f: but just to say that the pro-forma stuff has a lot of byte-gravity12:16
<ajs6f>barmintor: Yeah. You know, I feel like we talked about this recently. Didn't we have some discussions about moving the license to a top-level file only and just calling it out in a short comment at the top of compilation units?12:17
* dchandekstark leaves
<barmintor>ajs6f: we did!
<ajs6f>barmintor: looking in jira...
barmintor: it was this: https://jira.duraspace.org/browse/FCREPO-206612:18
barmintor: But we could go further in that way
barmintor: That was the license, but we could also do that with the copyright notice, I would think. Isn't that what remains?12:19
<barmintor>ajs6f: yeah, 16 or 17 lines. But we might be stuck with that as a condition of the ASL
<ajs6f>barmintor: Really? Hm.12:20
dwilcox: ^^^ Do you now anything about this?
* dchandekstark joins12:23
* manez joins12:24
* dchandekstark leaves12:27
<dwilcox>ajs6f: Unfortunately, no. We'll probably have to check with awoods
<ajs6f>dwilcox;barmintor: Okay. I just read the ASL 2.0 prtty carefully, and I don't see any such restriction there, but IANAL.12:28
<barmintor>ajs6f: ok, I think I see a place where my read of what these interfaces are/should be and you & acoburn's diverges12:29
or maybe not
<ajs6f>barmintor: We can diverge, as long as we do it together.
<barmintor>I think it is important that function.inverse.inverse return the same function
maybe not literally the same object, but the same function12:30
<ajs6f>barmintor: Hm. I feel like acoburn and I discussed that, but maybe not.
<barmintor>so that prompts me to provide a default impl for .inverse()
<ajs6f>barmintor: Why is it important? To guarantee inverse().inverse().apply(x).equals.(x)?
<acoburn>barmintor: does the current api not do that?
<barmintor>and that requires something to dispatch to12:31
ajs6f: yes
<ajs6f>barmintor: Whoa, whoa, a _default_ impl for inverse()? How does that even make sense?
barmintor: That's no more obvious than a default impl for apply()!
<barmintor>ajs6f: remember what I suggested earlier and it makes sense
<acoburn>I can't imagine what that would be
<ajs6f>barmintor: Are you including your toDomain() method in this?12:32
<barmintor>fellows! I invite you to make generous estimations of my sanity.
ajs6f: yes
<ajs6f>barmintor: We are not.
<acoburn>barmintor: I was referring to a default impl of inverse(), not your sanity12:33
<barmintor>I know. You instead are interested in inRange(B)
<ajs6f>barmintor: If you use toDomain, get rid of inverse() and call the whole type something else.
barmintor: We're really talking about two different ways of thinking about this.
<barmintor>ajs6f: inverse() is still a useful factory method
<ajs6f>barmintor: It's just confusing. It's not better or clearer than myInvertibleThing::toDomain.12:34
<barmintor>ajs6f: since might want to pass it along, tho you could also presumably lamda to toDomain
<ajs6f>barmintor: Use the method ref.
<barmintor>there are still some nice things about it12:35
* esm_ joins
<ajs6f>barmintor: It is the worst thing that has ever happened to anyone, anywhere.
<barmintor>again, my perspective here is from just having hacked the identifier converter into a chain of decomposed converters12:36
<ajs6f>barmintor: Seriously, if you want to put together an alternative APi for this stuff, I say go for it. acoburn and I had one way of looking at the problem, maybe you will have a better way. Just don't get these things mixed, because that doesn't help anything.
<barmintor>ajs6f: just hear me out12:37
ajs6f: actually, first tell me out
ajs6f: what did y'all have in mind for inRange?
ajs6f: that's on Converter12:38
<ajs6f>barmintor:acoburn: that was acoburn's addition12:40
<acoburn>barmintor: isn't inRange simply the same as inverse().inDomain()?12:41
<barmintor>well, sure by default.12:42
<ajs6f>barmintor: Thinking about it a little, I don't like guaranteeing inverse().inverse().apply(x).equals.(x), because that's syntactic. We want some other kind of equality. I might want to swap in VIAF identifiers on the way to fulfilling a request, even thought the identifiers stored in my repo are local.12:43
<barmintor>but it's a curious question to ask, I guess I'm saying
<ajs6f>barmintor: I agre. I don't think we need it.
<barmintor>acoburn: I'm trying to think through the use case of having a typed range for the function and then having an instance of that type and...12:44
acoburn ajs6f and also I found, after this refactor, that I didn't use it anywhere. which gives me pause.12:45
<acoburn>barmintor: IIRC it's more for completeness sake than for immediate utility12:46
<ajs6f>barmintor:acoburn: Like I said, I have no brief for it.
<barmintor>ajs6f: that kind of swapping should be part of the pipeline, right?12:48
ajs6f: I mean "as a developer" I don't expect an InvertibleFunction to be an irreversible transformation :)12:49
* barmintor makes use case hands
<ajs6f>barmintor: Hm. Yes, I think you are right. It should go through inverse(). and the andThen or after or whatever you want to call the concatenation is a separate mechanism.
barmintor: I don't understand what you mean by "an irreversible transformation" but pragmatically, I think we agree that inRange is not a good thing, unless we can think of some reason we actually need it to do anything other than the default impl.12:50
<barmintor>ajs6f: that seems to be the spirit of our namespaceConverter, for example12:51
<ajs6f>barmintor: That's the whole chaining thing.
<barmintor>ajs6f: yes
<ajs6f>barmintor: If we're going to successfully maintain invariants, they're going to be local in action. Not swinging from the core of the repo out into the web.12:52
<barmintor>ajs6f: "irrersible" as in I pass in a id.loc URI, then it gets internalized, but the inverse only does VIAF, so you'll never know whether you had a NAF value of a VIAF value12:53
that I would recommend against
<ajs6f>barmintor: I actually think that's okay, but I don't think we need to decide that now. In fact, I'd like to avoid making that decision at all and leave it to the people on the scene at a given site.
barmintor; In fact, I'd like to avoid making any decisions at all, in any case, about anything.12:54
<barmintor>well
I can remove the toDomain addendum, but that patch is going to go up a few hundred more lines12:55
<ruebot>https://wiki.duraspace.org/display/FF/2016-08-04+Fedora+API+Extensions+Meeting12:56
* ruebot is not chairing that call12:57
<barmintor>or I guess I could also just move it into a subinterface
<ajs6f>barmintor: Hang on— I don't want toDomain in the contract itself. Couldn't you put it in your own types? I.e. SelfInvertingFunction or something like that? The sauce you're adding is just that guarantee about inv().inv.apply(x).equals(x), isn't it? That's stronger than what acoburn and I want to say, so why shouldn't you add it in as a subtype?
barmintor: Great minds think alike.
<bseeger>ruebot: but you do such a nice job. :) Who's chairing?12:58
<barmintor>ajs6f: yeah althought InvertibleFunction will have no impls that I know of
<ajs6f>barmintor: Why not move it into a subinterface and document tthere he invariants you want to add?
* barmintor shrugs
hmm12:59
<ruebot>bseeger++
<esm_>ruebot: beseeger: I have the pleasure of chairing the API-X call today :)
<ruebot>esm_++
<ajs6f>barmintor: You mean no impls that are not of the more specific kind with which you are concerned?
* ruebot is here
<barmintor>ajs6f: yeah
<bseeger>esm_++
<barmintor>ajs6f: and also no externally available contracts afaik13:00
* ddavis joins
<ajs6f>barmintor: I'm totally fine with that. It's about making the intent really clear, and goodness knows that Fedora's policies and ideas about identifiers need, if they need one thing, CLARITY.
<barmintor>ajs6f: but I'll do it, just to get us on the same page for a review :)
<ajs6f>barmintor++
Thank you for humoring the weird grouchy old man who lives in the basement.
<bseeger>* is here *13:01
<esm_>https://wiki.duraspace.org/display/FF/2016-08-04+Fedora+API+Extensions+Meeting13:02
<acoburn>* is here *13:06
<bseeger>I haven't looked at them close enough yet, either.13:12
* dchandekstark joins13:15
<barmintor>"An invertible function that is also reversible."13:16
worth it
<ajs6f>Reversing an invertible function is as dangerous as crossing the streams.13:17
<barmintor>fwiw acoburn if I subtype InvertibleFunction as InjectiveFunction, both toDomain and inRange make more sense13:18
<ajs6f>I think we talked about DomainRestrictedFunction really being PartialFunction, but for some reason we didn't do that.13:19
barmintor: are you trying to say that the conversion is injective, or monic?13:22
<dwilcox>https://wiki.duraspace.org/display/FF/Design+-+API+Extension+Architecture13:25
<barmintor>ajs6f: I think we're actually saying that DomainRestricted, Inveritble functions that are also RangeRestricted and bijective13:26
ajs6f: but I'm taking the more conservative route on Injective
<ajs6f>barmintor: Okay. I think that's actually more than you need, but it seems like certainly enough.13:27
<barmintor>ajs6f: it at least makes the contract clear
<ajs6f>barmintor: Yeah, "injective" is a thing most people understand pretty well.
* yinlin joins13:28
* yinlin leaves13:31
<ajs6f>Does anyone know who Lukáš Jáně is?
<barmintor>no13:40
<ajs6f>Problem soled.
solved
<ruebot>ajs6f: can't say that i do. :-(13:41
<barmintor>Am I misunderstanding something bout the versioning ? on t he list? Isn't the whole subtree versioned?
<ajs6f>barmintor: I read that three or four times and I still don't understand it, so I haven't replied.13:42
<barmintor>I *think* it means that they don't understand the wacky jcr versioning model13:48
but I hardly do myself.
<ajs6f>I don't think we actually did change the URIs in any problematic way.
* dchandekstark leaves13:49
<barmintor>I don't either. I think it's just confusing that the "version" of a child resource contained in a parent resource version may not be present at all in the version history of the child resource13:50
* esm_ leaves13:53
* dchandekstark joins13:56
* dchandekstark leaves
* dchandekstark joins
<barmintor>ajs6f acoburn https://github.com/fcrepo4/fcrepo4/compare/modeshape5...barmintor:rw-performance
<acoburn>barmintor: you might want to point this at master (the mode5 branch has been merged)13:57
<barmintor>ajs6f acoburn it's in that branch b/c the identifier converter decomposition is a prerequisite to the MODE-query-instead-of-node-post-process bit
<ajs6f>barmintor: what acoburn just said13:58
<barmintor>acoburn++ // will do after I grab a sandwich
<ajs6f>barmintor: Ooh, can you get me something too? Maybe some pastrami on rye or something?
* manez_ joins14:00
* manez leaves14:01
<barmintor>ajs6f: I can't believe I'm saying this but I was thinking about you when I was in Galicia14:02
ajs6f: The fresh seafood was incredible, but I have never seen such a dizzying array of canned fish
<ajs6f>barmintor: Like, "Thank goodness ajs6f isn't here! He'd have some stupid joke to make."
<barmintor>(and cephalopods and molluscs)
<ajs6f>barmintor: Oh, you're making me jealous!14:03
<barmintor>it was astounding, truly. the grocery had an entire aisle.
<ajs6f>barmintor: Those people know how to live right.14:04
Some programmers put easter eggs in their code. I put kippered herrings in mine.
That's why my code stinks.14:05
* dchandekstark leaves14:07
* dchandekstark joins14:15
* dchandekstark leaves14:19
* dhlamb leaves14:20
<barmintor>aargh!14:28
that's no rebase
<ajs6f>That's a battle station.
* dhlamb joins14:29
<barmintor>I'm not actually sure what to do here, the version history is going to be weird
<ajs6f>barmintor: What's the deal?14:30
<barmintor>the master branch had moved to mode5, but not off the modeshape5 branch
<ajs6f>barmintor: Wait, what? I merged acoburn's PR, and he built that from that branch. Didn't you, acoburn?14:31
<acoburn>I just issued the PR based on that branch
modeshape5 -> master
<ajs6f>https://github.com/fcrepo4/fcrepo4/commit/ad9423914a9db2f9672a755d92cad85a4c322aee14:32
<barmintor>it looks like y'all squashed a number of commits together for that commit?
<acoburn>the modeshape5 branch should be deleted at this point
barmintor: it looks like those commits were squashed14:33
<ajs6f>barmintor: I think I did. I would have squashed unless someone told me not to, for some reason.
<barmintor>so... can I start a new branch and cherrypick the terminal commits? tricky.
<ajs6f>barmintor: is this the diff between 5.0.0 and 5.1.0?
barmintor: Why would you need to do that? Where is there any entanglement?14:34
<barmintor>ajs6f: afaik it's the difference between ad94239 and ca71061 :)
ajs6f: let me see what the commit history looks like when I finish this
<ajs6f>barmintor: What's ca71061?14:35
barmintor: I don't see that...
<barmintor>ajs6f: the terminal commit on the modeshape5 branch I forked last week
<ajs6f>barmintor: Oh, that got squashed?
<barmintor>yeah
<ajs6f>barmintor: I would think this will be okay. But as you say, let's see.14:36
<barmintor>ajs6f: I just don't want to reintroduce some weird commit
<ajs6f>barmintor: I get you. We'll check the PR. The MODE5 stuff actually didn't touch that much stuff. It shouldn't be hard to ward against that.14:37
<barmintor>ajs6f: I think it's cherry-pick to the rescue, running test suite again now14:42
<ajs6f>barmintor: As long as you can make up a sensible package of delta, we're good, right?14:43
* bseeger leaves
<barmintor>ajs6f: yeah, I just like a clean commit history so I can blame accurately14:44
<ajs6f>barmintor: Oh, I'm all in favor. I was just meaning that the MODE5 thing and the thing you're doing shouldn't really interact too much, so we shouldn't be in much trouble as long as you see your way clear. The history should make sense.
<barmintor>now the Jena change, that will wreak havoc14:45
<ajs6f>barmintor: We should have done it when Jena did 3.0.0.
barmintor: That would have been easier.
<barmintor>if I call this branch "converters" will you know what I mean?14:48
<ajs6f>barmintor: Sure. Hang on— do you not have a ticket open for this stuff?14:49
barmintor: Just use the ticket id.
<barmintor>ajs6f: it's the first part of the princeton ticket
<ajs6f>barmintor: I don't know what you mean. Something escowles files?
filed
<barmintor>yeah
<ajs6f>Okay, how about FCREPO-XXXX-1, or FCREPO-XXXX-converters, or something like that.14:50
It will make awoods happy. And you know how terrifying he is when he is angry. Like a raging koala.14:51
* dchandekstark joins14:53
* adur joins
* dwilcox leaves14:58
<f4jenkins>Yippee, build fixed!15:00
Project fcrepo4 build #3355: FIXED in 10 min: http://jenkins.fcrepo.org/job/fcrepo4/3355/
* dwilcox joins15:08
<barmintor>ok ajs6f acoburn https://github.com/fcrepo4/fcrepo4/compare/master...barmintor:fcrepo-2103-converters15:09
oh crap15:10
it's 2104, not 2103
lol
what a day
ok, for real https://github.com/fcrepo4/fcrepo4/compare/master...barmintor:fcrepo-2104-converters15:11
* dchandekstark leaves15:12
* manez_ leaves15:13
* github-ff joins15:14
[fcrepo4] barmintor opened pull request #1086: Fcrepo 2104 converters (master...fcrepo-2104-converters) https://git.io/v6qDG
* github-ff leaves
* manez joins15:15
<ajs6f>acoburn: I'd much appreciate any comments you have on barmintor's heroic hand-to-hand assault on the codebase.15:16
<acoburn>ajs6f: ok, but not today…
<ajs6f>acoburn: Yeah, I won't be getting very far with today either.15:17
<acoburn>ajs6f: I'm also _really_ wondering how the jena pr is going to fare with this change
<barmintor>acoburn ajs6f I just took your work and put cool stickers on it
* dwilcox leaves
<ajs6f>acoburn: Good thing awoods volunteered to rebase.
<acoburn>awoods++
ajs6f: btw, the ldpath stuff is going quite well in karaf15:18
* dchandekstark joins
<ajs6f>barmintor: They can't be as cool as the animal stickers my son stuck all over the house the other day. I don't know why my wife got so uptight about it.
<barmintor>ok now who wants to learn about jcr-sql2
* ajs6f dives under desk
<acoburn>ajs6f: there's a little complexity with Sesame's use of the service loader, but I seem to be getting close to submitting a PR
<ajs6f>acoburn: I am shockingly unshocked. Half the work of these things is locating the right venue for the work.15:19
acoburn: I seem to remember having trouble with that too. Is it that META-INF stuff? Packaging woes?
<acoburn>ajs6f: exactly: META-INF/services15:20
ajs6f: the packaging piece (i.e. as a feature) is pretty much done
<ajs6f>acoburn: I actually think the whole ServiceLoader thing is pretty cool, and was a very forward thinking part of JavaSE. But it gets disrespected a lot and doubtless, it falls down in complex situations.
acoburn: I really like the idea of bringing this out fully-fledged in Karaf, and only then turning to get rid of it from the core. People will be so distracted by the awesomeness of the new thing and how much genuinely better it is, that they will forget to be scared of change.15:21
* dwilcox joins15:23
* dchandekstark leaves
* dchandekstark joins15:24
<barmintor>ajs6f: what does one call the Converter subtype that extends Injective? ReversibleConverter? InjectiveConverter sounds like a car part.15:32
<ajs6f>barmintor: This ain't Madison Avenue. I think we actually need to back up the names a bit. What acoburn and I called InvertibleFunction might better be called ReversibleFunction. InjectiveConverter sounds completely fine to me. p15:34
* dchandekstark leaves
* ddavis leaves15:57
* dchandekstark joins16:07
<ajs6f>barmintor: This is looking really good. I do have the same qualms about adding methods to Converter (as I commented in the PR) but by and large, this is good. I do want to get some kind of documentation of what you mean by phrases like "internal path". You _know_ that won't be as obvious to even you, after a few months.16:08
<barmintor>ajs6f: you know *looks for somethung*16:09
<ajs6f>Somethung sounds like a terrible name for your new metal band.16:10
SomethṺng
<barmintor>ajs6f: this is part of why I wanted tpyed wrappers, but check out the class javadoc for ExternalPathToInternalPAthConverter
ajs6f: it's in the direction of what you're saying16:11
<ajs6f>barmintor: Yes, it is. That's good stuff. Let's just get that a little more visibility.
barmintor: I am in no way against typed wrappers. Maybe that's the next step.
<barmintor>ajs6f: b/c at least 3 committers now have said "I get lost in the identifier conversion", but each step is fairly simple16:12
and I think, to put my Soroka on, a little tpying would help16:13
<ajs6f>TYPE SYSTEMS FTW!
Bertrand Russell brings the hammer down.
<barmintor>every dog has its day in the sunshine of my approval16:14
<ajs6f>Bertrand Russell and the Macho Man would be the ultimate tag team.
barmintor: But I am assuming you wouldn't want to delay for that. You want to get this in, right? I think it's a step forward.16:16
<barmintor>ajs6f: yeah, but I'm marching through your comments16:17
ajs6f: some of them are pretty good
:)
<ajs6f>barmintor: Sure. Throw enough spaghetti at the wall and you'll take out someone's eye.
<barmintor>ajs6f: I SEE YOU HAVE ASKED ABOUT asString()16:22
<ajs6f>barmintor: Oh, this is going to hurt, isn't it.
<barmintor>ajs6f: I think it hurts less when you make these functions chains of functions16:23
b/c while it *reads* as apply().toString()
it is *actually* sometimes a cheater method that applies shortcuts16:24
or it was
<ajs6f>Can you give me an example?
<barmintor>because we are actually bad people
<ajs6f>You an I, maybe, but I trust ruebot.
<barmintor>ajs6f: here's one example https://github.com/fcrepo4/fcrepo4/blob/master/fcrepo-http-commons/src/main/java/org/fcrepo/http/commons/api/rdf/HttpResourceConverter.java#L20016:25
<ajs6f>barmintor: Do we _want_ that? I mean, isn't the distinction made (between resource and identifier) exactly what we are trying to factor out of methods into the type system itself?16:26
<barmintor>oh god no
we don't want it
it was one of the things that made this whole subsystem so confusing16:27
<ajs6f>Listen, if you don't want to deal with get rid of it right now, okay, that's fine. As long as we're in agreement about where we're trying to go.
<barmintor>I'll look to see how much of a mess it would be
I've still got a half hour or so16:28
* dwilcox leaves
<barmintor>how many notes can you have maOHMYGOD
<ajs6f>Don't worry. Most of them are just notes to myself about what shopping to do on the way home.
barmintor: Not quite sure what you mean by a "graph resource". An RDF resource?16:30
<barmintor>ajs6f: yes, I spent a lot of time trying to figure out what to call jena.Resource that would not get confused with fcrepo.Resource
and Node could be Jena or Jcr16:31
there's no words
<ajs6f>Fedora 4: There's No Words.
barmintor: URI? Are we actually talking about an URI?16:32
* dchandekstark leaves16:34
* dchandekstark joins16:40
* dchandekstark leaves16:42
* dchandekstark joins
<barmintor>ajs6f: the HashConverter is injective, but not bijective. It's... idempotent?16:51
<ajs6f>barmintor: In one direction at least.
barmintor: Idempotent is a quality of a function. The way you have written Converter, it's a pair of functions.16:52
<barmintor>ajs6f: I mean the HashConverter in particulat
it gets called multiple times, so it needs to ignore preprocessed inputs
<ajs6f>barmintor: I'm saying you can't say that any Converter is or isn't idempotent, simply. You have to say, idempotent in _this_ direction or _that_ direction or _both_.16:53
<barmintor>but that also means that multiple domain elements map to the same range element
ajs6f: yeah
<ajs6f>barmintor: IIRC , we're thinking of the "forward" driection here.
<barmintor>yep
<ajs6f>So it's not injective, in that direction.
I can give you two values that both map to the same value.16:54
x#y and x#z
<barmintor>not quite
<ajs6f>Do they not both go to x?
<barmintor>x#y and x/#/y
both go to x/#/y
<ajs6f>Okay, fair enough. I forgot that it is operating "internally".16:55
<barmintor>yeah
<ajs6f>I constantly have the sinking feeling that we are building the world's crappiest triplestore.
<mikeAtUVa>worse than mulgara?16:57
<ajs6f>Much worse. Mulgara, in its day, was quite good. But no one has worked on it since 2012.
<barmintor>mulgara was quite an accomplishment considering the personnel behind it
<ajs6f>Hey!
<barmintor>what?16:58
<ajs6f>That sounded snide, but maybe I just read that into it?
I'm pretty sure Kendall Clark had part of that work.
<barmintor>nobody worked on mulgara but that one guy. I had one commit, and somebody else had a few dozen.
AFAIK
it was really a titanic effort by the guy that was eventually hired at OSU I think16:59
<ajs6f>When was that? I know at least early on, the locking subsytems were being worked on by three or four people.
Not that it did them much good.
<barmintor>):
<ajs6f>That is very hard problem.
I guess that would have been Kowari days.17:00
* dchandekstark leaves17:01
<ajs6f>barmintor: Got to run. I'll catch up with you about the PR tomorrow, if you are in IRC.17:02
* manez leaves
<barmintor>ajs6f: I'm sorry it's such a big PR. I actually went through and re-added stuff to minimize it!
<ajs6f>barmintor: No worries— it's good stuff. When you start messing with core concerns like identifiers, it's going to have knock-on effects.
o-and-o17:03
* ajs6f leaves
* mikeAtUVa leaves17:04
* acoburn leaves17:05
* dchandekstark joins17:06
* dchandek_ joins17:08
* dchandekstark leaves17:11
* dchandek_ leaves17:12
* dchandekstark joins17:15
* dchandekstark leaves17:19
* dchandekstark joins17:36
* dchandekstark leaves17:37
* dwilcox joins18:21
* dwilcox leaves19:35
* dchandekstark joins19:40
* dchandekstark leaves19:44
* github-ff joins19:56
[fcrepo-transform] acoburn closed pull request #26: Replace Jena LDCache backend with a linkeddata backend (master...fcrepo-2070) https://git.io/vKjaZ
* github-ff leaves
* github-ff joins20:01
[fcrepo-webapp-plus] acoburn opened pull request #46: Remove fcrepo-transform (master...fcrepo-1672.2) https://git.io/v6mcG
* github-ff leaves
* github-ff joins20:03
[fcrepo-transform] acoburn opened pull request #27: remove acoburn from maintainer list (master...update_docs) https://git.io/v6mc0
* github-ff leaves
* dchandekstark joins20:20
* github-ff joins21:46
[fcrepo4] ajs6f created SuggestionsForBarmintor (+8 new commits): https://git.io/v6m0G
fcrepo4/SuggestionsForBarmintor 703b3bc Benjamin Armintor: add composition methods for IdentfierConverter implementations
fcrepo4/SuggestionsForBarmintor b3d5d52 Benjamin Armintor: Decompose string translator and api refinements...
fcrepo4/SuggestionsForBarmintor 00c2c0a Benjamin Armintor: replace boilerplate Converter methods for composition with defaults
* github-ff leaves
* github-ff joins21:55
[fcrepo4] ajs6f force-pushed SuggestionsForBarmintor from 051a453 to c99c1d0: https://git.io/v6m0b
fcrepo4/SuggestionsForBarmintor c99c1d0 ajs6f: Tightening type relationships
* github-ff leaves
* travis-ci joins22:11
fcrepo4/fcrepo4#4647 (SuggestionsForBarmintor - 051a453 : ajs6f): The build passed.
Change view : https://github.com/fcrepo4/fcrepo4/compare/703b3bcaf1ec^...051a4536b36e
Build details : https://travis-ci.org/fcrepo4/fcrepo4/builds/149932145
* travis-ci leaves
* travis-ci joins22:14
fcrepo4/fcrepo4#4648 (SuggestionsForBarmintor - c99c1d0 : ajs6f): The build passed.
Change view : https://github.com/fcrepo4/fcrepo4/compare/051a4536b36e...c99c1d0c122b
Build details : https://travis-ci.org/fcrepo4/fcrepo4/builds/149933726
* travis-ci leaves
* dhlamb leaves22:38
* dchandekstark leaves22:43
* dhlamb joins22:45
* dhlamb leaves23:20
* dchandekstark joins23:43
* dchandekstark leaves23:48
* dchandekstark joins00:45
* dchandekstark leaves00:50

Generated by Sualtam