Will do. One more small question How do I send a message to the Comet Actor from another class? Can the CometActor be an object instead of a class? In the code
X ! messageToCometActor, what is X? I don't have a variable that holds the instance of the CometActor. On Thu, Nov 12, 2009 at 5:12 PM, David Pollak <feeder.of.the.be...@gmail.com > wrote: > Jack, > > The issues you're seeing are not Lift related. You are not using Actors > correctly. Please see Philipp Haller's preso on Actors: > http://lamp.epfl.ch/~phaller/doc/ScalaActors.pdf<http://lamp.epfl.ch/%7Ephaller/doc/ScalaActors.pdf> > > Please also look at the Actor chapters in Beginning Scala or Programming in > Scala. > > Thanks, > > David > > > On Wed, Nov 11, 2009 at 8:26 PM, Jack Widman <jack.wid...@gmail.com>wrote: > >> David, >> >> I have attached my code. It runs but does not behave as I intended it to. >> The code does a web search on the term "scala" and displays a list of URLs >> of the results. Next to each URL it says "Page Length : -1". A process is >> running in the background which takes each URL, goes out and gets the page >> and takes the length of the page. The length of that page is then supposed >> to immediately appear on the page next to that URL. I put the lengths on a >> queue, as they come in, and I have the Comet page poll the queue and display >> the results. It would probably be better to have the results send a message >> to the Comet class so the page is only re-rendered when there is a change >> but for now I am polling. >> >> I can see the lengths coming in and being put on the queue, but the Comet >> page is not getting them till they are all retrieved. (This takes way too >> long and nothing changes on the screen till its too late). I need them to >> appear as they come in. Occasionally I can see a length being retrieved and >> the Comet page finds it but even then it is not displayed until all the >> lengths are in. I know this is not very clear but I think it will be clear >> from the code. >> >> I also know there are a lot of places in the code which can be improved >> and I welcome all of your input but what I would love is to have these >> numbers appear on the page as they they are retrieved. I have been stumped >> by this for a while and I suspect that somebody who knows Lift well might >> see the problem right away. >> >> The class that retrieves the page lengths is called Calculator and the >> queue is called SourceQueue. The classes are pretty small so hopefully it >> will be clear what is going on. I want you to know I think it is incredible >> how responsive you and the group are and I look forward to using Lift in the >> future. >> >> Thanks so much. >> >> Jack >> >> >> On Tue, Nov 10, 2009 at 1:27 AM, David Pollak < >> feeder.of.the.be...@gmail.com> wrote: >> >>> >>> >>> On Mon, Nov 9, 2009 at 10:10 PM, Jack Widman <jack.wid...@gmail.com>wrote: >>> >>>> The only difference between your working code and mine is that mine has >>>> a process in the background that is always running and puts Foo objects on >>>> a >>>> queue whenever they are ready. Where can I start this long running process >>>> so that it doesn't interfere with the lowPriority method that takes things >>>> off the queue and rerenders the page. I tried starting the process in its >>>> own Actor that I start in localSetup but it seems somehow to be blocking >>>> the >>>> lowPriority method from doing its thing. >>>> >>> >>> I have no idea what this means... sorry. >>> >>> Please post actual runnable code and we can help you debug. >>> >>> >>>> >>>> On Sun, Nov 8, 2009 at 11:35 PM, David Pollak < >>>> feeder.of.the.be...@gmail.com> wrote: >>>> >>>>> Jack, >>>>> >>>>> I reproduced your code and it seems to work fine. I've enclosed a >>>>> working copy. >>>>> >>>>> Some comments about your code: >>>>> >>>>> - The foos variable and the foo variable may be getting confused in >>>>> the code... the render method may be rendering the same thing based on >>>>> the >>>>> unchanging foos variable. >>>>> - Doing null testing is a sign that you have logic errors in your >>>>> code. I strongly recommend using either Box or Option for everything >>>>> that >>>>> can logically not contain a value/reference. If you're bridging out >>>>> to Java >>>>> code and are expecting null from the Java code, write a small bridge >>>>> that >>>>> will wrapper the Java return values in Box/Option. >>>>> - You have a case class (Tick) that contains no parameters. Please >>>>> use a case object instead. >>>>> - Your Tick look is a spin loop. You fire a Tick message as part >>>>> of processing the Tick message. I would suggest that if you're >>>>> polling, >>>>> that you have a reasonable poll interval, otherwise you'll starve your >>>>> CPU. >>>>> Further, having reRender on each loop through means that you're >>>>> forcing a >>>>> lot of bytes over the wire rather than only doing a reRender on changed >>>>> values. >>>>> >>>>> Thanks, >>>>> >>>>> David >>>>> >>>>> On Sun, Nov 8, 2009 at 3:47 PM, Jack Widman <jack.wid...@gmail.com>wrote: >>>>> >>>>>> Sorry. Here it is: As I said, I know that when render is called, >>>>>> foo.getValue has the right value. But it does not show on the screen, >>>>>> unless >>>>>> I refresh the browser. >>>>>> >>>>>> package com.foo.comet >>>>>> >>>>>> import net.liftweb._ >>>>>> import http._ >>>>>> import js._ >>>>>> import JsCmds._ >>>>>> import net.liftweb.util._ >>>>>> import net.liftweb.http._ >>>>>> import _root_.scala.xml._ >>>>>> import scala.actors._ >>>>>> import com.authoritude.snippet._ >>>>>> import scala.collection.mutable.Queue >>>>>> import net.liftweb.http.SessionVar >>>>>> >>>>>> >>>>>> class MyComet extends CometActor { >>>>>> >>>>>> override def defaultPrefix = Full("auth") >>>>>> >>>>>> private var foos = FooManager.getFoos >>>>>> >>>>>> def createDisplay(foos:List[Foo]):NodeSeq = { >>>>>> <span id="go"><table> >>>>>> { >>>>>> for {foo <- foos} yield <tr><td>{foo.getValue}</td></tr> >>>>>> } >>>>>> >>>>>> </table></span> >>>>>> } >>>>>> >>>>>> def render = { bind("foo" -> createDisplay(foos)) } >>>>>> >>>>>> override def localSetup = { >>>>>> super.localSetup >>>>>> this ! Tick >>>>>> } >>>>>> >>>>>> var foo:Foo = null >>>>>> override def lowPriority = { >>>>>> case Tick => { >>>>>> foo=FooQueue.getLatest >>>>>> if (foo!=null && foo.getValue > -1) { >>>>>> blogs = FooManager.process(foo, foos) >>>>>> } else if (foo!=null){ >>>>>> foos = foos.remove((f:Foo)=>(f.id==foo.id)) >>>>>> } >>>>>> reRender(false) >>>>>> this ! Tick >>>>>> } >>>>>> } >>>>>> } >>>>>> >>>>>> case class Tick >>>>>> >>>>>> >>>>>> >>>>>> On Sun, Nov 8, 2009 at 5:31 AM, Timothy Perrett < >>>>>> timo...@getintheloop.eu> wrote: >>>>>> >>>>>>> >>>>>>> Without posting your code it's going to be tough to help you. >>>>>>> >>>>>>> Cheers, Tim >>>>>>> >>>>>>> Sent from my iPhone >>>>>>> >>>>>>> On 8 Nov 2009, at 08:14, jack <jack.wid...@gmail.com> wrote: >>>>>>> >>>>>>> > >>>>>>> > By the way, I know that when render is called, all the variables >>>>>>> have >>>>>>> > the right values. I just don't see it on the screen unless I >>>>>>> refresh >>>>>>> > it. >>>>>>> > >>>>>>> > On Nov 8, 3:12 am, jack <jack.wid...@gmail.com> wrote: >>>>>>> >> I have a CometActor. render is called when it is supposed to be >>>>>>> but I >>>>>>> >> don't see the changes. If I refresh the page at anytime, I do see >>>>>>> the >>>>>>> >> changes. Any idea what might cause this? >>>>>>> > > >>>>>>> > >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Jack Widman >>>>>> >>>>>> co-founder / cto, Authoritude, Inc. >>>>>> >>>>>> 203-641-9355 >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Lift, the simply functional web framework http://liftweb.net >>>>> Beginning Scala http://www.apress.com/book/view/1430219890 >>>>> Follow me: http://twitter.com/dpp >>>>> Surf the harmonics >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Jack Widman >>>> >>>> co-founder / cto, Authoritude, Inc. >>>> >>>> 203-641-9355 >>>> >>>> >>>> >>> >>> >>> -- >>> Lift, the simply functional web framework http://liftweb.net >>> Beginning Scala http://www.apress.com/book/view/1430219890 >>> Follow me: http://twitter.com/dpp >>> Surf the harmonics >>> >>> >>> >> >> >> >> >> >> > > > -- > Lift, the simply functional web framework http://liftweb.net > Beginning Scala http://www.apress.com/book/view/1430219890 > Follow me: http://twitter.com/dpp > Surf the harmonics > > > > -- Jack Widman co-founder / cto, Authoritude, Inc. 203-641-9355 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---