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-t...@mcs.anl.gov [mailto:owner-ag-t...@mcs.anl.gov] On Behalf > Of Susanne Lefvert > Sent: June 22, 2004 5:54 PM > To: Rob King > Cc: ag-t...@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:lefv...@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-t...@mcs.anl.gov [mailto:owner-ag-t...@mcs.anl.gov] On > > Behalf > > > Of Susanne Lefvert > > > Sent: June 17, 2004 4:06 PM > > > To: Rob King > > > Cc: ag-t...@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 > > >