[AG-TECH] Shared app Gotchas

Susanne Lefvert lefvert at mcs.anl.gov
Wed Jun 23 13:43:33 CDT 2004


That is a great idea! Thank you very much.

Cheers,

Susanne


On Wed, 23 Jun 2004, Rob King wrote:

> 	Thank you very much!
> 
> 	That cleared things right up!
> 
> 	Since I seem to be running into all the problems I can, I've started
> a page on the Access Grid Wiki devoted to shared app 'gotchas'.  I'll try to
> put up situations that I encounter that have been hard to debug and might be
> common there.  It would be great if any other shared app developers out
> there could put up some of their experiences too
> 
> 	The page is at:
> 
> 	
> http://www-unix.mcs.anl.gov/fl/research/accessgrid/wiki/moin.cgi/SharedAppGo
> tchas?action=show
> 
> 	Hopefully we can grow this, and make life easier for those who come
> after us.
> 
> 	Cheers,
> 
> 	Rob King
> 
> 
> -----Original Message-----
> From: owner-ag-tech at mcs.anl.gov [mailto:owner-ag-tech at mcs.anl.gov] On Behalf
> Of Susanne Lefvert
> Sent: June 22, 2004 5:54 PM
> To: Rob King
> Cc: ag-tech at mcs.anl.gov
> Subject: ***SPAM*** Re: [AG-TECH] Shared app callback problem
> 
> 
> Rob,
> 
> You seem to have a newer version of wxPython installed so I have not 
> actually tried running the code. However, when calling ui components 
> outside of the main ui thread (as you do from your ag event callback) you 
> should use wxPostEvent or wxCallAfter to make sure things are working 
> properly. You can find a good example of wxPostEvent here: 
> http://wiki.wxpython.org/index.cgi/LongRunningTasks. I have been 
> using wxCallAfter so examples of that are in existing shared apps. 
> 
> Regards,
>  
> Susanne
>  
> 
> On Tue, 22 Jun 2004, Rob King wrote:
> 
> > 	Thanks again Susanne,
> > 
> > 	After looking at the shared question tool code it made much more
> > sense.  I finally got the console apps up and running and it has been a
> > great help in debugging so far.
> > 	 I've finally narrowed down the problem I've been having.  It would
> > seem as though there is some problem with creating an instance of a
> wxPython
> > widget from within a shared app event call-back.  Even when using the same
> > code for object creation, when instantiated from within a call-back the
> > object locks up (even though traces in the __init__ seem to indicate it
> > initializes fine).  I think it might be some sort of funky threading
> > conflict between AGTK, and wxPython...
> > 
> > 	Below I have included the code of a really small shared app that
> > exhibits this behaviour.  To try it, simply paste the code into a .py
> file,
> > replace appUrl with an application session (though I'll keep the current
> one
> > up, so it *should* work as is), and run it from the command line.
> > 	If running one instance, pressing the new note button should pop up
> > a yellow tooltip that can be moved with the mouse.  To see the problem run
> > two instances (on the same or different computers...shouldn't matter).
> > Pressing the new note button will work as it should in the app where the
> > button was pressed.  A yellow tooltip will also pop up on the receiving
> end,
> > but the widget will lock up, so when mousing over you get an hour glass,
> and
> > you cannot move the tooltip anymore.
> > 
> > 	Hopefully someone will be able to help me figure this one out, as
> > this same problem has been plaguing me over the past month+.  
> > 
> > 	Thanks in advance!
> > 
> > 	-rob king
> > 	
> > 
> > 
> > 
> > ###########################Start code##################################
> > 
> > 
> > from wxPython.wx import *
> > import AccessGrid.SharedAppClient
> > from AccessGrid.Toolkit import CmdlineApplication
> > 
> > class StickyBoard(wxApp):
> >     def __init__( self, appUrl, debugMode = 1, logFile = None):
> >         self.appURL = appUrl
> >         
> > 
> >         # Create shared application client
> >         self.sharedAppClient =
> > AccessGrid.SharedAppClient.SharedAppClient("StickyBoard")
> >         self.log = self.sharedAppClient.InitLogging(debugMode, logFile)
> > 
> >         self.app = CmdlineApplication.instance()
> >         self.app.Initialize("Sticky Board")
> > 
> >         # Connect to shared application service.
> >         self.sharedAppClient.Join(appUrl)
> > 
> >         wxApp.__init__(self, False)
> > 
> > 
> >     def OnInit(self):
> >         self.Control = StickyBoardControl(self)
> >         self.SetTopWindow(self.Control)
> >         self.Control.Show(1)
> >         self.sharedAppClient.RegisterEventCallback("note",
> > self.Control.noteCB )
> >         return 1
> > 
> > 
> > 
> > class StickyBoardControl(wxFrame):
> >     def __init__(self, parent):
> >         kwds =
> >
> {"style":wxCAPTION|wxMINIMIZE_BOX|wxCLOSE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER,
> > "size":(120, 120), "pos":(0,0)}
> > 
> >         wxFrame.__init__(self, *(None, -1, ""), **kwds)
> > 
> >         self.parent = parent
> >         self.notes = []
> > 
> >         self.button = wxButton(self, -1, "New Note")
> >         self.Bind(EVT_BUTTON, self.newSticky, self.button)
> > 
> >         box = wxBoxSizer(wxVERTICAL)
> >         box.Add((0, 0))
> >         box.Add(self.button, 0, wxALIGN_CENTER|wxALL, 15)
> >         self.SetAutoLayout(True)
> >         self.SetSizer(box)
> > 
> >     def noteCB(self, event):
> >         senderId = event.data
> >         if senderId == self.parent.sharedAppClient.GetPublicId():
> >             self.parent.log.debug("Ignoring edit message from myself ")
> >         else:
> >             self.parent.log.debug( "adding note" )
> >             self.note = Note(self, wxSIMPLE_BORDER)
> > 
> >     def newSticky(self, event=None):
> >         self.note = Note(self, wxSIMPLE_BORDER)
> >         publicID = self.parent.sharedAppClient.GetPublicId()
> >         self.parent.sharedAppClient.SendEvent("note", (publicID))
> > 
> > 
> > 
> > 
> > class Note(wxPopupWindow):
> >     def __init__(self, parent, style, text = None, pos = None):
> > 
> >         self.parent = parent
> > 
> >         wxPopupWindow.__init__(self, parent, style)
> > 
> >         self.SetBackgroundColour("GOLDENROD")
> > 
> >         self.SetSize((50,50))
> > 
> >         self.Bind(EVT_LEFT_DOWN, self.OnMouseLeftDown)
> >         self.Bind(EVT_MOTION, self.OnMouseMotion)
> >         self.Bind(EVT_LEFT_UP, self.OnMouseLeftUp)
> > 
> >         self.Show(1)
> > 
> >     def OnMouseLeftDown(self, evt):
> >         self.ldPos =
> evt.GetEventObject().ClientToScreen(evt.GetPosition())
> >         self.wPos = self.ClientToScreen((0,0))
> >         self.CaptureMouse()
> > 
> >     def OnMouseMotion(self, evt):
> >         if evt.Dragging() and evt.LeftIsDown():
> >             dPos = evt.GetEventObject().ClientToScreen(evt.GetPosition())
> >             nPos = (self.wPos.x + (dPos.x - self.ldPos.x),
> >                     self.wPos.y + (dPos.y - self.ldPos.y))
> >             self.Move(nPos)
> > 
> >     def OnMouseLeftUp(self, evt):
> >         self.ReleaseMouse()
> > 
> > 
> > 
> > if __name__ == "__main__":
> > 
> >     from AccessGrid.Toolkit import CmdlineApplication
> >     app = CmdlineApplication.instance()
> >     app.Initialize("Sticky Board")
> > 
> >     # Url from app properties dialog in venue client.  Change these!
> >     appUrl = 'https://vv2.mcs.anl.gov:9000/119'
> >     debugMode = 1
> > 
> >     stickyBoard = StickyBoard(appUrl, debugMode, None)
> >     stickyBoard.MainLoop()
> > 
> > 
> > #############################end code####################################
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > -----Original Message-----
> > From: Susanne Lefvert [mailto:lefvert at mcs.anl.gov] 
> > Sent: June 21, 2004 3:12 PM
> > To: Rob King
> > Subject: RE: [AG-TECH] Errors silenced?
> > 
> > 
> > Hello Rob,
> > 
> > I have tried to answer your questions below. 
> > 
> > Regards,
> > 
> > Susanne
> > 
> > On Mon, 21 Jun 2004, Rob King wrote:
> > 
> > > 	Hmmm... I think I must be missing something here...
> > > 
> > > 	I tried putting this in a file (test.py):
> > > 
> > > from AccessGrid.Toolkit import CmdlineApplication
> > > app = CmdlineApplication.instance()
> > > app.Initialize("Sticky Board") 
> > > appUrl = 'https://vv2.mcs.anl.gov:9000/208'	
> > > 
> > > And ran it, but nothing happened.  It just ran through and ended.
> > > I also tried with app.Initialize("StickyBoard.py"), and that did nothing
> > as
> > > well.
> > > 
> > > So a few questions:
> > > Should <appName> be the name registered in the venue client, or the
> > > filename?
> > 
> > 
> > You can set <appName> to whatever you want, I used "SharedQuestionTool".
> > 
> > 
> > > Should the code above be a standalone app run from a command prompt, or
> > > should the code be incorporated into my shared app code somehow?
> > > I looked in the toolkit.py sourcecode, and I can't find where it
> actually
> > > runs the app, or takes in the appURL... am I looking at this wrong?
> > 
> > 
> > You can see an example of how I am using the code in
> > /AccessGrid/sharedapps/SharedQuestionTool/SharedQuestionTool.py
> > 
> > 
> > > 
> > > I also took a look at the AccessGrid/tools/VenueApp.py file, and from
> what
> > I
> > > could interpret, it seems to create an application session on the server
> > but
> > > doesn't run the application locally.  Again I may be mistaken though.
> > 
> > 
> > That's correct. You can use that code if you want to get access to an 
> > application url without having to open the application session properties 
> > dialog in the Venue Client. 
> > 
> > 
> > > 
> > > 	Hopefully you can help me with this!
> > > 
> > > 	Thanks a lot,
> > > 
> > > 	Rob king
> > > 
> > > -----Original Message-----
> > > From: owner-ag-tech at mcs.anl.gov [mailto:owner-ag-tech at mcs.anl.gov] On
> > Behalf
> > > Of Susanne Lefvert
> > > Sent: June 17, 2004 4:06 PM
> > > To: Rob King
> > > Cc: ag-tech at mcs.anl.gov
> > > Subject: Re: [AG-TECH] Errors silenced?
> > > 
> > > 
> > > Hello Rob,
> > > 
> > > I am glad to hear that you are working on a shared application for the
> AG 
> > > and would like to help you with your logging issue.  Apparently, log
> files
> > 
> > > for shared apps are not created properly and we are working to get that 
> > > fixed.  In the mean time, you can use following code to test your app 
> > > outside of the venue client:
> > > 
> > > from AccessGrid.Toolkit import CmdlineApplication
> > > app = CmdlineApplication.instance()
> > > app.Initialize("<appName>") 
> > > 
> > > # Url from app properties dialog in venue client (the 'Location 
> > > # URL' field in the dialog that shows up when you right click the 
> > > # application session you want to use and select 'Properties').
> > > appUrl = 'https://<host>:<port>/....'
> > > 
> > > This will print errors to the console and create a log <appName>.log
> file 
> > > where you are running your application.  Also, 
> > > AccessGrid/tools/VenueApp.py in cvs shows you how to create an 
> > > application session in the venue without using the venue client.
> 
> > > 
> > > Hope this helps,
> > > 
> > > Susanne
> > > 
> > >   
> > > 
> > > 
> > > 
> > > On Thu, 17 Jun 2004, Rob King wrote:
> > > 
> > > >             Hello Everyone,
> > > > 
> > > >  
> > > > 
> > > >             I am working on developing a shared application right now,
> > but
> > > > have been having some problems.  I could probably figure them out, but
> > it
> > > > seems as though the errors are being suppressed somewhere.  It's
> > happened
> > > in
> > > > a couple of places so far, and problems become difficult to debug.  I
> > have
> > > > debug logging mode on, but when it gets to an error, it doesn't log
> it,
> > it
> > > > just stops.  Is there some way to coax the error messages into a log
> or
> > > even
> > > > the debug console?  My current method of putting a debug log statement
> > > every
> > > > couple lines of code has only met with limited success ;)
> > > > 
> > > >             Hope someone can help!
> > > > 
> > > >  
> > > > 
> > > >             -rob king
> > > > 
> > > > 
> > > 
> > > 
> > > __________ NOD32 1.772 (20040524) Information __________
> > > 
> > > This message was checked by NOD32 Antivirus System.
> > > http://www.nod32.com
> > > 
> > > 
> > > 
> > 
> > __________ NOD32 1.772 (20040524) Information __________
> > 
> > This message was checked by NOD32 Antivirus System.
> > http://www.nod32.com
> > 
> > 
> > 
> 
> 
> __________ NOD32 1.772 (20040524) Information __________
> 
> This message was checked by NOD32 Antivirus System.
> http://www.nod32.com
> 
> 
> 




More information about the ag-tech mailing list