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

Reply via email to