Oh that's a pretty decent advantage there actually. On 29 November 2016 at 22:07, Gary Gregory <garydgreg...@gmail.com> wrote:
> On Tue, Nov 29, 2016 at 8:04 PM, Matt Sicker <boa...@gmail.com> wrote: > > > That's pretty neat. So it looks like two competing styles of annotations > > here would be separate annotations for each concern, a single annotation > > with an enum, or even separate annotations with boolean values or enums > > (though that gets a little more complex come to think of it). > > > > The problem with solo annotations is that you can say nonsensical things > like: > > @ThreadSafe > @NotThreadSafe > public class Foo { > ... > } > > You can't do that with: > > @Contract(threading = ThreadingBehavior.IMMUTABLE) > > Gary > > > > > > If only the JDK had an annotation for this. > > > > On 29 November 2016 at 20:41, Gary Gregory <garydgreg...@gmail.com> > wrote: > > > > > And an example: > > > > > > /** > > > * HTTP/2 compatible extension of {@link RequestConnControl}. > > > * > > > * @since 5.0 > > > */ > > > @Contract(threading = ThreadingBehavior.IMMUTABLE) > > > public class H2RequestConnControl extends RequestConnControl { > > > ... > > > > > > Gary > > > > > > On Tue, Nov 29, 2016 at 6:40 PM, Gary Gregory <garydgreg...@gmail.com> > > > wrote: > > > > > > > FYI, this is how we're going to do it in HttpComponents 5: > > > > https://svn.apache.org/repos/asf/httpcomponents/ > > > > httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/ > > > > annotation/ThreadingBehavior.java > > > > > > > > Gary > > > > > > > > On Tue, Nov 29, 2016 at 2:20 PM, Gary Gregory < > garydgreg...@gmail.com> > > > > wrote: > > > > > > > >> On Tue, Nov 29, 2016 at 1:59 PM, Benedikt Ritter < > brit...@apache.org> > > > >> wrote: > > > >> > > > >>> I agree with Oliver. I don't think we have consensus about if and > how > > > we > > > >>> want to implement this. Does it even make sense to try to document > > > this? > > > >>> What value does such a documentation have, when it is wrong 50% of > > the > > > >>> time? I just sumed up the feedback I got from one (!) user at the > > > >>> conference. I think this needs more thought. This is why I > suggested > > to > > > >>> create a PR instead of committing this directly to master. > > > >>> > > > >> > > > >> This is a good discussion. Let's keep in mind the audience for these > > new > > > >> annotations: > > > >> > > > >> - Commons Lang > > > >> - All of Commons > > > >> - Any Java code. > > > >> > > > >> Just because we may not get to document thread safety properly in > > > Commons > > > >> Lang does not mean that any other developers will fail similarly. > > > >> > > > >> My goal is not to decorate all of Commons Lang with these new > > > annotations > > > >> and certainly not to take on the task of documenting all of Commons > > ;-) > > > >> > > > >> I look at these annotations as a tool, a Commons way of using > > > annotations > > > >> where some folks best see fit. > > > >> > > > >> Providing these annotations is one thing, using them another ;-) > > > >> > > > >> Gary > > > >> > > > >> > > > >>> > > > >>> Regards. > > > >>> Benedikt > > > >>> > > > >>> Gary Gregory <garydgreg...@gmail.com> schrieb am Di. 29. Nov. 2016 > > um > > > >>> 22:33: > > > >>> > > > >>> > On Tue, Nov 29, 2016 at 1:12 PM, Oliver Heger < > > > >>> > oliver.he...@oliver-heger.de> > > > >>> > wrote: > > > >>> > > > > >>> > > > > > >>> > > > > > >>> > > Am 28.11.2016 um 22:28 schrieb Gary Gregory: > > > >>> > > > WRT licensing, I re-implemented the annotations in git > master. > > > >>> Notice > > > >>> > > that > > > >>> > > > all Javadocs are different and much simpler for now. Feel > free > > to > > > >>> write > > > >>> > > > more. > > > >>> > > > > > >>> > > As the length of this thread shows, using annotations for the > > > >>> purpose of > > > >>> > > documenting thread-safety can be a controversial topic. > > > >>> > > > > > >>> > > > > >>> > How is the length of a thread a reflection of its controversy? > > > >>> > > > > >>> > > > > >>> > > I do not see the advantage over a plain text documentation in > > > >>> Javadoc. > > > >>> > > Written text can even be more comprehensive. > > > >>> > > > > > >>> > > > > >>> > One does not exclude the other. Annotations are easy to search. > > Text > > > in > > > >>> > Javadoc is subject to typos and formatting oddities that makes it > > > much > > > >>> > harder to search. > > > >>> > > > > >>> > Tools can work with annotations. > > > >>> > > > > >>> > > > > >>> > > > > > >>> > > The risk that the documentation goes out of sync with the > > > >>> implementation > > > >>> > > is given in both scenarios. But if a class announced as > > thread-safe > > > >>> is > > > >>> > > manipulated in a way that it is no longer thread-safe, I would > > > >>> consider > > > >>> > > this as a bug. This is also a kind of backwards-incompatible > > > change. > > > >>> > > > > > >>> > > > > >>> > That has nothing to do with annotations. If we change behavior in > > > some > > > >>> > incompatible way, that's the bug. > > > >>> > > > > >>> > I can interpret what you wrote as: If I remove an @Override > > > annotation, > > > >>> > then that is backwards-incompatible change. That sounds extreme. > > > >>> > > > > >>> > I do not think we have talked about annotations in the context of > > > >>> backwards > > > >>> > compatibility. Does this deserve a separate discussion? > > > >>> > > > > >>> > a third penny, > > > >>> > Gary > > > >>> > > > > >>> > > > > >>> > > > > > >>> > > My 2 cents > > > >>> > > Oliver > > > >>> > > > > > >>> > > > > > > >>> > > > Gary > > > >>> > > > > > > >>> > > > On Mon, Nov 28, 2016 at 12:55 PM, Gary Gregory < > > > >>> garydgreg...@gmail.com > > > >>> > > > > > >>> > > > wrote: > > > >>> > > > > > > >>> > > >> On Mon, Nov 28, 2016 at 12:18 PM, Matt Benson < > > > >>> gudnabr...@gmail.com> > > > >>> > > >> wrote: > > > >>> > > >> > > > >>> > > >>> I hoped to stay out of this. :) Points: > > > >>> > > >>> > > > >>> > > >>> * "provided" scope is another Maven mechanism that compiles > > > >>> against a > > > >>> > > >>> given dependency but does not pull the dependency in as a > > > runtime > > > >>> > > >>> dependency. I personally prefer it to marking a dependency > > > >>> optional. > > > >>> > > >>> * For annotations with only classfile retention, a future > > > package > > > >>> > > >>> rename e.g. lang4 would not require a consumer to upgrade > > just > > > >>> for > > > >>> > the > > > >>> > > >>> renamed annotation, though nothing would stop them from > doing > > > >>> so. A > > > >>> > > >>> given project could depend on either or both of lang3 and > > lang4 > > > >>> in > > > >>> > any > > > >>> > > >>> combination of compile-only or runtime-inclusive scope with > > no > > > >>> > > >>> problems. > > > >>> > > >>> * A standalone annotations component might be interesting, > > but > > > >>> I'm > > > >>> > not > > > >>> > > >>> sure if the proposed annotations constitute a critical mass > > > >>> adequate > > > >>> > > >>> to justify it. > > > >>> > > >>> > > > >>> > > >> > > > >>> > > >> I would have a hard time justifying a > > commons-lang3-annotations > > > >>> module > > > >>> > > >> with only these 4 annotations. > > > >>> > > >> > > > >>> > > >> I could see having a Commons Annotations component though > > which > > > >>> for > > > >>> > good > > > >>> > > >> or bad would hold all annotations one could imagine having > the > > > >>> Commons > > > >>> > > >> world. Hm... it smells a bit though... > > > >>> > > >> > > > >>> > > >> Gary > > > >>> > > >> > > > >>> > > >> > > > >>> > > >>> > > > >>> > > >>> Matt > > > >>> > > >>> > > > >>> > > >>> On Mon, Nov 28, 2016 at 1:21 PM, Pascal Schumacher > > > >>> > > >>> <pascalschumac...@gmx.net> wrote: > > > >>> > > >>>> Groovy had to change the license of its documentation from > > > CC-A > > > >>> 3.0 > > > >>> > to > > > >>> > > >>> the > > > >>> > > >>>> Apache License during incubation: > > > >>> > > >>>> > > > >>> > > >>>> https://issues.apache.org/jira/browse/LEGAL-167 > > > >>> > > >>>> http://markmail.org/message/2e7tehlwtpx625q4 > > > >>> > > >>>> https://issues.apache.org/jira/browse/GROOVY-7470 > > > >>> > > >>>> > > > >>> > > >>>> So I guess Commons is probably not allowed to use these > > files. > > > >>> > > >>>> > > > >>> > > >>>> > > > >>> > > >>>> Am 28.11.2016 um 18:58 schrieb Gary Gregory: > > > >>> > > >>>>> > > > >>> > > >>>>> On Mon, Nov 28, 2016 at 7:15 AM, Jochen Wiedmann > > > >>> > > >>>>> <jochen.wiedm...@gmail.com> > > > >>> > > >>>>> wrote: > > > >>> > > >>>>> > > > >>> > > >>>>>> On Mon, Nov 28, 2016 at 4:06 PM, sebb <seb...@gmail.com > > > > > >>> wrote: > > > >>> > > >>>>>> > > > >>> > > >>>>>>> The code would not run without the JCIP jar. > > > >>> > > >>>>>> > > > >>> > > >>>>>> Are there licensing issues regarding that jar? > > > >>> > > >>>>>> > > > >>> > > >>>>> Hm, according to https://www.apache.org/legal/ > > resolved.html, > > > >>> the > > > >>> > > >>> license > > > >>> > > >>>>> "Creative Commons Attribution (CC-A) 2.5" is discussed in > > the > > > >>> > section > > > >>> > > >>> "HOW > > > >>> > > >>>>> SHOULD "WEAK COPYLEFT" LICENSES BE HANDLED?" > > > >>> > > >>>>> > > > >>> > > >>>>> It looks like we might have an issue but this is not > clear > > to > > > >>> me as > > > >>> > > >>> IANAL. > > > >>> > > >>>>> I you look at the license summary > > > >>> > > >>>>> https://creativecommons.org/licenses/by/2.5/ it sure > seems > > > >>> OK, but > > > >>> > > our > > > >>> > > >>>>> resolved.html has this license on a list of licenses to > > watch > > > >>> out > > > >>> > > for. > > > >>> > > >>>>> > > > >>> > > >>>>> So to be on the safe side, how do we best re-implement > > these? > > > >>> The > > > >>> > > >>>>> annotation names we can keep as is but I would imagine > that > > > >>> we'd > > > >>> > want > > > >>> > > >>> to > > > >>> > > >>>>> re-write the Javadoc from scratch. > > > >>> > > >>>>> > > > >>> > > >>>>> Thoughts? > > > >>> > > >>>>> > > > >>> > > >>>>> Gary > > > >>> > > >>>>> > > > >>> > > >>>>> > > > >>> > > >>>>>> Jochen > > > >>> > > >>>>>> > > > >>> > > >>>>>> > > > >>> > > >>>>>> -- > > > >>> > > >>>>>> The next time you hear: "Don't reinvent the wheel!" > > > >>> > > >>>>>> > > > >>> > > >>>>>> http://www.keystonedevelopment.co.uk/wp- > > > content/uploads/2014 > > > >>> /10/ > > > >>> > > >>>>>> evolution-of-the-wheel-300x85.jpg > > > >>> > > >>>>>> > > > >>> > > >>>>>> ------------------------------ > > > ------------------------------ > > > >>> > > --------- > > > >>> > > >>>>>> To unsubscribe, e-mail: dev-unsubscribe@commons. > > apache.org > > > >>> > > >>>>>> For additional commands, e-mail: > > > dev-h...@commons.apache.org > > > >>> > > >>>>>> > > > >>> > > >>>>>> > > > >>> > > >>>>> > > > >>> > > >>>> > > > >>> > > >>>> > > > >>> > > >>>> > > > >>> > ------------------------------------------------------------ > > > --------- > > > >>> > > >>>> To unsubscribe, e-mail: dev-unsubscribe@commons. > apache.org > > > >>> > > >>>> For additional commands, e-mail: > > dev-h...@commons.apache.org > > > >>> > > >>>> > > > >>> > > >>> > > > >>> > > >>> ------------------------------ > ------------------------------ > > > >>> --------- > > > >>> > > >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > > >>> > > >>> For additional commands, e-mail: > dev-h...@commons.apache.org > > > >>> > > >>> > > > >>> > > >>> > > > >>> > > >> > > > >>> > > >> > > > >>> > > >> -- > > > >>> > > >> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > > > >>> > > >> Java Persistence with Hibernate, Second Edition > > > >>> > > >> <https://www.amazon.com/gp/product/1617290459/ref=as_li_ > > > >>> > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& > > > >>> > > linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b > > > >>> 1af9fe6a2b8> > > > >>> > > >> > > > >>> > > >> <http://// > > > >>> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > > > >>> > > 1617290459> > > > >>> > > >> JUnit in Action, Second Edition > > > >>> > > >> <https://www.amazon.com/gp/product/1935182021/ref=as_li_ > > > >>> > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& > > > >>> > > > > > >>> > linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac > > > >>> 902a24de418%22 > > > >>> > > > > > > >>> > > >> > > > >>> > > >> <http://// > > > >>> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > > > >>> > > 1935182021> > > > >>> > > >> Spring Batch in Action > > > >>> > > >> <https://www.amazon.com/gp/product/1935182951/ref=as_li_ > > > >>> > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& > > > >>> > > linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% > > > >>> > > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> > > > >>> > > >> <http://// > > > >>> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > > > >>> > > 1935182951> > > > >>> > > >> Blog: http://garygregory.wordpress.com > > > >>> > > >> Home: http://garygregory.com/ > > > >>> > > >> Tweet! http://twitter.com/GaryGregory > > > >>> > > >> > > > >>> > > > > > > >>> > > > > > > >>> > > > > > > >>> > > > > > >>> > > ------------------------------------------------------------ > > > >>> --------- > > > >>> > > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > > >>> > > For additional commands, e-mail: dev-h...@commons.apache.org > > > >>> > > > > > >>> > > > > > >>> > > > > >>> > > > > >>> > -- > > > >>> > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > > > >>> > Java Persistence with Hibernate, Second Edition > > > >>> > < > > > >>> > https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie > > > >>> =UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCo > > > >>> de=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8 > > > >>> > > > > > >>> > > > > >>> > <http://// > > > >>> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1& > > > a=1617290459 > > > >>> > > > > >>> > JUnit in Action, Second Edition > > > >>> > < > > > >>> > https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie > > > >>> =UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCo > > > >>> de=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de4 > 18%22 > > > >>> > > > > > >>> > > > > >>> > <http://// > > > >>> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1& > > > a=1935182021 > > > >>> > > > > >>> > Spring Batch in Action > > > >>> > < > > > >>> > https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie > > > >>> =UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCo > > > >>> de=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink > > > >>> _id%7D%7D%22%3ESpring+Batch+in+Action > > > >>> > > > > > >>> > <http://// > > > >>> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1& > > > a=1935182951 > > > >>> > > > > >>> > Blog: http://garygregory.wordpress.com > > > >>> > Home: http://garygregory.com/ > > > >>> > Tweet! http://twitter.com/GaryGregory > > > >>> > > > > >>> > > > >> > > > >> > > > >> > > > >> -- > > > >> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > > > >> Java Persistence with Hibernate, Second Edition > > > >> <https://www.amazon.com/gp/product/1617290459/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& > > > linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2 > b8> > > > >> > > > >> <http:////ir-na.amazon-adsystem.com/e/ir?t= > > garygregory-20&l=am2&o=1&a= > > > 1617290459> > > > >> JUnit in Action, Second Edition > > > >> <https://www.amazon.com/gp/product/1935182021/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& > > > linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de4 > > 18%22 > > > > > > > >> > > > >> <http:////ir-na.amazon-adsystem.com/e/ir?t= > > garygregory-20&l=am2&o=1&a= > > > 1935182021> > > > >> Spring Batch in Action > > > >> <https://www.amazon.com/gp/product/1935182951/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& > > > linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% > > > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> > > > >> <http:////ir-na.amazon-adsystem.com/e/ir?t= > > garygregory-20&l=am2&o=1&a= > > > 1935182951> > > > >> Blog: http://garygregory.wordpress.com > > > >> Home: http://garygregory.com/ > > > >> Tweet! http://twitter.com/GaryGregory > > > >> > > > > > > > > > > > > > > > > -- > > > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > > > > Java Persistence with Hibernate, Second Edition > > > > <https://www.amazon.com/gp/product/1617290459/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& > > > linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2 > b8> > > > > > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t= > garygregory-20&l=am2&o=1&a= > > > 1617290459> > > > > JUnit in Action, Second Edition > > > > <https://www.amazon.com/gp/product/1935182021/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& > > > linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de4 > > 18%22 > > > > > > > > > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t= > garygregory-20&l=am2&o=1&a= > > > 1935182021> > > > > Spring Batch in Action > > > > <https://www.amazon.com/gp/product/1935182951/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& > > > linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% > > > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t= > garygregory-20&l=am2&o=1&a= > > > 1935182951> > > > > Blog: http://garygregory.wordpress.com > > > > Home: http://garygregory.com/ > > > > Tweet! http://twitter.com/GaryGregory > > > > > > > > > > > > > > > > -- > > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > > > Java Persistence with Hibernate, Second Edition > > > <https://www.amazon.com/gp/product/1617290459/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& > > > linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2 > b8> > > > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > > > 1617290459> > > > JUnit in Action, Second Edition > > > <https://www.amazon.com/gp/product/1935182021/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& > > > linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de4 > > 18%22 > > > > > > > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > > > 1935182021> > > > Spring Batch in Action > > > <https://www.amazon.com/gp/product/1935182951/ref=as_li_ > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& > > > linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% > > > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> > > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > > > 1935182951> > > > Blog: http://garygregory.wordpress.com > > > Home: http://garygregory.com/ > > > Tweet! http://twitter.com/GaryGregory > > > > > > > > > > > -- > > Matt Sicker <boa...@gmail.com> > > > > > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > Java Persistence with Hibernate, Second Edition > <https://www.amazon.com/gp/product/1617290459/ref=as_li_ > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& > linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > 1617290459> > JUnit in Action, Second Edition > <https://www.amazon.com/gp/product/1935182021/ref=as_li_ > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& > linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22 > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > 1935182021> > Spring Batch in Action > <https://www.amazon.com/gp/product/1935182951/ref=as_li_ > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& > linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= > 1935182951> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > -- Matt Sicker <boa...@gmail.com>