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
-~----------~----~----~----~------~----~------~--~---

Reply via email to