Return-Path: X-Original-To: apmail-incubator-deltaspike-dev-archive@minotaur.apache.org Delivered-To: apmail-incubator-deltaspike-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 868BCF37A for ; Mon, 25 Mar 2013 18:11:01 +0000 (UTC) Received: (qmail 4487 invoked by uid 500); 25 Mar 2013 18:11:01 -0000 Delivered-To: apmail-incubator-deltaspike-dev-archive@incubator.apache.org Received: (qmail 4461 invoked by uid 500); 25 Mar 2013 18:11:01 -0000 Mailing-List: contact deltaspike-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: deltaspike-dev@incubator.apache.org Delivered-To: mailing list deltaspike-dev@incubator.apache.org Received: (qmail 4453 invoked by uid 99); 25 Mar 2013 18:11:01 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Mar 2013 18:11:01 +0000 X-ASF-Spam-Status: No, hits=2.5 required=5.0 tests=FREEMAIL_REPLY,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of andraschko.thomas@gmail.com designates 209.85.212.42 as permitted sender) Received: from [209.85.212.42] (HELO mail-vb0-f42.google.com) (209.85.212.42) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Mar 2013 18:10:54 +0000 Received: by mail-vb0-f42.google.com with SMTP id ff1so4074659vbb.1 for ; Mon, 25 Mar 2013 11:10:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:content-type; bh=TBndClr+O5LlO4ekNlR3I0BFZlJaQubQP6U/XolyqMo=; b=i9FU9PHdQ6Mut5l4Id533zF0WOaQyC0o6wFUeRU5p6McL/UgeE+lNaqRegsn9wUFkx WJYTUx4hePJsVGwDzGJDDCP0RFXdezQcJncXavXFLAachcqNAKEjThZxYo+22A8FCdrH 5Inie0U+7jdz11VVQtHH2hUclarHO1Z/hKy08uIfo7v/Fe/bx1maitq53MtBXVwyHAt/ H9KO/h2yQXiUn8pQYgIKhp6Nvs4u9fBmi7A69Ir+Zy5J9jrVkywlOkI0wG0tCpdM9Ryv gSjHMzhxQn0EriySNcG1L6qCYlEutzk/wxlaLLVP2y/WpqxiAGQKHGRSelzIOqtlPdjq uDrw== MIME-Version: 1.0 X-Received: by 10.220.151.144 with SMTP id c16mr17042007vcw.18.1364235033450; Mon, 25 Mar 2013 11:10:33 -0700 (PDT) Received: by 10.52.159.4 with HTTP; Mon, 25 Mar 2013 11:10:33 -0700 (PDT) In-Reply-To: References: <5E0AA982-B6CC-4210-8BF8-130B5293FB7E@redhat.com> Date: Mon, 25 Mar 2013 19:10:33 +0100 Message-ID: Subject: Re: DeltaSpike Roadmap From: Thomas Andraschko To: deltaspike-dev@incubator.apache.org Content-Type: multipart/alternative; boundary=f46d04388ddf8f228404d8c3b8ff X-Virus-Checked: Checked by ClamAV on apache.org --f46d04388ddf8f228404d8c3b8ff Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Sorry but i didn't get it and i know primefaces very good. Why is RequestContext an alternative for s:validateForm? 2013/3/25 John D. Ament > They have it, it uses a little bit of javascript: > > http://www.primefaces.org/showcase/ui/requestContext.jsf > > > On Mon, Mar 25, 2013 at 12:31 PM, Thomas Andraschko < > andraschko.thomas@gmail.com> wrote: > > > Are you sure? PrimeFaces does not have one. I only know richfaces' > > graphValidator and it's IMO not that easy and cool as s:validateForm. > > > > 2013/3/25 John D. Ament > > > > > I believe all of the major JSF component libraries support some type = of > > > form validation using BV. > > > > > > > > > On Mon, Mar 25, 2013 at 12:19 PM, Thomas Andraschko < > > > andraschko.thomas@gmail.com> wrote: > > > > > > > Any news about s:validateForm? > > > > As i said, it's great feature of seam3 and would perfectly fit DS > > (IMO). > > > > > > > > I could also add it to DS if no one have enough time... :) > > > > > > > > 2012/12/17 Gerhard Petracek > > > > > > > > > there is a reason why it is just an add-on ;) > > > > > and yes, if you would do it with the jsf2-api, it would be a bit > > > easier. > > > > > but you can use this add-on also for jsf 1.x and some users who > don't > > > > like > > > > > to use seam are happy with it. > > > > > however, i just mentioned it as an example to show that cdi isn't > > > needed > > > > to > > > > > implement such a functionality. > > > > > > > > > > regards, > > > > > gerhard > > > > > > > > > > > > > > > > > > > > 2012/12/17 Lincoln Baxter, III > > > > > > > > > > > Also, note that the use-cases for and the latt= er > > > > example > > > > > > are different in their usage. IMO, is much mor= e > > > > > > declarative and simple than the example provided from extval. > > > > > > > > > > > > Just write a validator and attach it like you would normal to a > > > > component > > > > > > in the view, wherever you want to use it. You can also re-use > > > > > > form-validators using this method, instead of using some (in my > > > > opinion) > > > > > > strange view-filtering logic in the FormValidator annotation. > > > > > > > > > > > > is/was one of the most well recieved feature o= f > > Seam > > > > > > Faces, and I think it deserves serious consideration. Can you d= o > > form > > > > > > validation other ways? absolutely, but this way is pretty > > compelling > > > > > based > > > > > > on the feedback we got. It also ties in very normally with the > way > > in > > > > > which > > > > > > JSF handles validation and components, which is not something > that > > I > > > > can > > > > > > speak about with regard to extval, but I can say that seam face= s > > does > > > > > this > > > > > > nicely. > > > > > > > > > > > > ~Lincoln > > > > > > > > > > > > > > > > > > On Mon, Dec 17, 2012 at 4:37 PM, Thomas Andraschko < > > > > > > andraschko.thomas@gmail.com> wrote: > > > > > > > > > > > > > Please do not mix both :) > > > > > > > We had the discussion about commons bv constrains. > s:validateForm > > > is > > > > > > > completely different compared to bv constraints. > > > > > > > s:validateForm does not fit the project for common bv > > constraints. > > > > > > > > > > > > > > 2012/12/17 Karl Kild=E9n > > > > > > > > > > > > > > > Looks really nice I understand finally :-) > > > > > > > > > > > > > > > > In retrospect I don't know why I didn't check the docs > myself, > > > > > probably > > > > > > > > because I read most of the discussion on the phone to begin > > with. > > > > > > > > > > > > > > > > I then agree with the many suggestions regarding doing it a= s > a > > > > > parallel > > > > > > > > project. Perhaps that module could have a sub module for C= DI > > > users > > > > > > that > > > > > > > > included producers and such. > > > > > > > > > > > > > > > > Best regards / Karl > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2012/12/17 Gerhard Petracek > > > > > > > > > > > > > > > > > hi karl, > > > > > > > > > > > > > > > > > > it's implemented via a producer - see [1]. > > > > > > > > > but you don't really need cdi for it - see e.g. [2]. > > > > > > > > > > > > > > > > > > regards, > > > > > > > > > gerhard > > > > > > > > > > > > > > > > > > [1] http://s.apache.org/ury > > > > > > > > > [2] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > http://os890.blogspot.co.at/2010/06/multi-field-form-validation-with-jsr.= html > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2012/12/17 Thomas Andraschko > > > > > > > > > > > > > > > > > > > As far as i understand, validateAll just validates all > > > > components > > > > > > but > > > > > > > > you > > > > > > > > > > can't use custom logic. > > > > > > > > > > > > > > > > > > > > Checkout the seam docu here: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > http://docs.jboss.org/seam/3/faces/latest/reference/en-US/html/components= .html > > > > > > > > > > > > > > > > > > > > 2012/12/17 Karl Kild=E9n > > > > > > > > > > > > > > > > > > > > > Hrmm still not sure I understand. First off didn't Pe= te > > > just > > > > > say > > > > > > it > > > > > > > > was > > > > > > > > > > > just a JSF-validator? It also sounds and reads just > like > > > > > > > validateAll > > > > > > > > > from > > > > > > > > > > > omnifaces? > > > > > > > > > > > > > > > > > > > > > > What is lacking that you would like to see solved by > CDI? > > > And > > > > > is > > > > > > > it a > > > > > > > > > > > natural fit for CDI extensions rather then BV / JSF > > > > extensions? > > > > > > > > > > > > > > > > > > > > > > Best regards / Karl > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2012/12/17 Thomas Andraschko < > > andraschko.thomas@gmail.com> > > > > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > > > > > they are nice but i can't see a replacement for > > > > > s:validateForm. > > > > > > > > > > > > IMO s:validateForm is really a simple solution for > > > > > cross-field > > > > > > > > > > > validation, > > > > > > > > > > > > which is CDI based. > > > > > > > > > > > > > > > > > > > > > > > > Regards, > > > > > > > > > > > > THomas > > > > > > > > > > > > > > > > > > > > > > > > 2012/12/17 Karl Kild=E9n > > > > > > > > > > > > > > > > > > > > > > > > > Well these are the validators from omnifaces as p= er > > my > > > > > > previous > > > > > > > > > > > > > recommendation: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > - RequiredCheckboxValidator< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/RequiredCheckb= oxValidator.xhtml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateAll< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateAll.xh= tml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateAllOrNone< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateAllOrN= one.xhtml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateEqual< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateEqual.= xhtml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateOne< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateOne.xh= tml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateOneOrMore< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateOneOrM= ore.xhtml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateOneOrNone< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateOneOrN= one.xhtml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateOrder< > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateOrder.= xhtml > > > > > > > > > > > > > > > > > > > > > > > > > > > - validateUnique > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://showcase-omnifaces.rhcloud.com/showcase/validators/validateUnique= .xhtml > > > > > > > > > > > > > >Best > > > > > > > > > > > > > regards / Karl > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2012/12/17 Thomas Andraschko < > > > > andraschko.thomas@gmail.com> > > > > > > > > > > > > > > > > > > > > > > > > > > > PrimeFaces doesn't have such a component/utilit= y. > > > > > > > > > > > > > > Also AFAICS it's based on CDI, so IMO DeltaSpik= e > > is a > > > > > good > > > > > > > > place > > > > > > > > > > for > > > > > > > > > > > > it. > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2012/12/17 Jason Porter > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Dec 17, 2012 at 4:54 AM, Pete Muir < > > > > > > > pmuir@redhat.com > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 17 Dec 2012, at 08:55, Gerhard Petracek > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > hi karl, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > #1 apache myfaces (extval) doesn't > implement > > > jsr > > > > > 303 > > > > > > > > (e.g. > > > > > > > > > > > apache > > > > > > > > > > > > > > > > > bval implements it) > > > > > > > > > > > > > > > > > #2 there is no agreement that ds is only > > > backend > > > > > > > oriented > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > regards, > > > > > > > > > > > > > > > > > gerhard > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 2012/12/17 Karl Kild=E9n < > > karl.kilden@gmail.com> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> Hi Thomas, fellow user here. > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> BV is as you may know specified in > JSR-303. > > It > > > > has > > > > > > > great > > > > > > > > > > > > > > > > implementations by > > > > > > > > > > > > > > > > >> myfaces and hibernate that you can find > > > easily. > > > > > Thus > > > > > > > > this > > > > > > > > > > will > > > > > > > > > > > > not > > > > > > > > > > > > > > be > > > > > > > > > > > > > > > > >> implemented in deltaspike afaik. However > > > > providing > > > > > > > some > > > > > > > > > > common > > > > > > > > > > > > > > > > constraints > > > > > > > > > > > > > > > > >> beyond the specification sounds like a > good > > > > idea. > > > > > > Note > > > > > > > > > that > > > > > > > > > > in > > > > > > > > > > > > the > > > > > > > > > > > > > > > mean > > > > > > > > > > > > > > > > >> while @Email is almost trivial to > implement > > > > > yourself > > > > > > > if > > > > > > > > > you > > > > > > > > > > > > search > > > > > > > > > > > > > > it > > > > > > > > > > > > > > > a > > > > > > > > > > > > > > > > >> little. JSR-303 is highly extensible jus= t > > like > > > > > CDI. > > > > > > > The > > > > > > > > > > > > > > implementation > > > > > > > > > > > > > > > > you > > > > > > > > > > > > > > > > >> choose might have it as an extra already= . > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> For frontend extras I can't say I see an > > > obvious > > > > > > home > > > > > > > in > > > > > > > > > > > > > deltaspike > > > > > > > > > > > > > > > > >> (someone correct me if I am wrong about > > this). > > > > > But I > > > > > > > > think > > > > > > > > > > for > > > > > > > > > > > > now > > > > > > > > > > > > > > > > >> Deltaspike is more backend oriented. I > > > recommend > > > > > > > having > > > > > > > > a > > > > > > > > > > look > > > > > > > > > > > > at > > > > > > > > > > > > > > > > omnifaces > > > > > > > > > > > > > > > > >> that already provide several great custo= m > > > > > > > jsf-validators > > > > > > > > > and > > > > > > > > > > > has > > > > > > > > > > > > > an > > > > > > > > > > > > > > > open > > > > > > > > > > > > > > > > >> request for users to ask for additional > > ones. > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> best regards / Karl > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> 2012/12/16 Thomas Andraschko < > > > > > > > > andraschko.thomas@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >>> Hi, > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > >>> is there a roadmap available for all > > upcoming > > > > > > > features? > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > >>> Will there also be a BV module in the > > future? > > > > > Will > > > > > > it > > > > > > > > > also > > > > > > > > > > > > > include > > > > > > > > > > > > > > > some > > > > > > > > > > > > > > > > >>> commons constraints like Email? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hmm, I think this could be a good thing for= a > > > > > parallel > > > > > > > > > project > > > > > > > > > > to > > > > > > > > > > > > > > > > DeltaSpike actually - a library of BV > > constraints > > > > not > > > > > > > > branded > > > > > > > > > > by > > > > > > > > > > > a > > > > > > > > > > > > > > > specific > > > > > > > > > > > > > > > > impl. I've cc'd Emmanuel, spec lead for BV, > to > > > see > > > > if > > > > > > he > > > > > > > > has > > > > > > > > > > any > > > > > > > > > > > > > plans > > > > > > > > > > > > > > > for > > > > > > > > > > > > > > > > such a thing. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > >>> What about the Seam s:validateForm? IMO > > it's > > > a > > > > > > simple > > > > > > > > way > > > > > > > > > > for > > > > > > > > > > > > > cross > > > > > > > > > > > > > > > > field > > > > > > > > > > > > > > > > >>> validation. Will this be added in futur= e > > > > > releases? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > This is not actually a BV validator, but a > JSF > > > > > > > validator. I > > > > > > > > > > know > > > > > > > > > > > > Mark > > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > working on JSF stuff for DeltaSpike atm, > > perhaps > > > > this > > > > > > is > > > > > > > > > > > something > > > > > > > > > > > > > > Jason > > > > > > > > > > > > > > > > could add to that. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Is this something that belongs in DeltaSpike, > or > > > > should > > > > > > it > > > > > > > be > > > > > > > > > in > > > > > > > > > > a > > > > > > > > > > > > JSF > > > > > > > > > > > > > > > component library? I know RichFaces has > something > > > > very > > > > > > > > > similar, I > > > > > > > > > > > > > believe > > > > > > > > > > > > > > > PrimeFaces does as well (haven't looked for a > > > while) > > > > > and > > > > > > I > > > > > > > > have > > > > > > > > > > no > > > > > > > > > > > > idea > > > > > > > > > > > > > > > about other component libraries. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > >>> How can i contribue to DeltaSpike? I > could > > do > > > > > some > > > > > > > > > smaller > > > > > > > > > > > > tasks > > > > > > > > > > > > > > > > without > > > > > > > > > > > > > > > > >>> problems. > > > > > > > > > > > > > > > > >>> I also implemented constraints like > > > > > > > > > > > EqualsExpression("#{...}"). > > > > > > > > > > > > > > Maybe > > > > > > > > > > > > > > > > >> this > > > > > > > > > > > > > > > > >>> could be useful for other users, too. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > This page should help - > > > > > > > > > > > > > > > > > > > > > > > > > > > http://deltaspike.staging.apache.org/deltaspike/community.html > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > >>> Best regards, > > > > > > > > > > > > > > > > >>> Thomas > > > > > > > > > > > > > > > > >>> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > Jason Porter > > > > > > > > > > > > > > > http://lightguard-jp.blogspot.com > > > > > > > > > > > > > > > http://twitter.com/lightguardjp > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Software Engineer > > > > > > > > > > > > > > > Open Source Advocate > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > PGP key id: 926CCFF5 > > > > > > > > > > > > > > > PGP key available at: keyserver.net, > pgp.mit.edu > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Lincoln Baxter, III > > > > > > http://ocpsoft.org > > > > > > "Simpler is better." > > > > > > > > > > > > > > > > > > > > > --f46d04388ddf8f228404d8c3b8ff--