got it. I was mixing metaphors. On Thu, Nov 12, 2009 at 5:41 PM, David Pollak <feeder.of.the.be...@gmail.com > wrote:
> > > On Thu, Nov 12, 2009 at 2:25 PM, Jack Widman <jack.wid...@gmail.com>wrote: > >> Is it that I am putting things on a Queue from within an the Calculator >> Actor and having the CometActor retrieve them from the Queue? Is that the >> problem? I will read up on actors but it would help if you could tell me >> (if only briefly) what you saw about my actor code that is wrong. >> > > The act method in an actor sets up the receive/react loop. It is not a > "background thread" in and of itself. Actors are not "background threads" > they are things that process messages sent to them with the ! method. You > set up the message handling in the receive/react loop. > > Further, mixing method calls and Actor message handling is wicked dangerous > (especially without synchronized blocks). Choose either a traditional > threading model or an Actor-based model, but not both. > > >> Thanks. >> >> >> >> 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 >> >> >> > > > -- > 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 -~----------~----~----~----~------~----~------~--~---