> I don't suppose anyone has already done anything like
> this in Python? If not, any suggestions to go about
> it?
I made a bit of a start once. The win32com.shell module should be a good
place to start...
Mark.
From Bill@ipathhq.com Mon Apr 23 18:48:38 2001
From: Bill@ipathhq.com (Bill Seitz)
Date: Mon, 23 Apr 2001 13:48:38 -0400
Subject: [python-win32] catching odbc errors in Python/ASP pages
Message-ID: <8210C9D2F4E1074181EFD72335211A970C4295@dc0.nyc.ipathhq.com>
This is a multi-part message in MIME format.
------_=_NextPart_001_01C0CC1D.A03DBDD8
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Having an implementation problem, ASP pages failing when rolled out to
production server, when they worked fine on dev machine and on staging
server. Trying to track down problem....
I'm re-using code for generic ODBC interaction that some other people
gave me. (Basically just have a single class of database-handling code,
everything else is just in simple Python within the ASP page.) It all
works fine when there's no error. But the error handling never does
much. You have to test for a non-null value on an error message string
param, rather than doing a "try" on a raised exception (the "except:"
clause in a given method sets the param value, then does a "return", not
a "raise"). And, there never seems to a value for that error param. So I
can't every catch anything. I just see the problem at the end result,
like when I try to loop over a resultSet.
In an effort to catch the problem at its source (is it when the
connection gets created? when the cursor gets created?), and get the
detailed error message right there, I tried removing the exception
handling completely from the database class, but then I just end up
getting an empty page back from the server, rather than an error
message.
I'm using a current ActiveState Python install, and the generic/base
PythonWin ODBC module. Under Win2K, talking to MsSQL2k.
Are there any tricks, best-practices, etc. for handling exceptions in
this environment? (Or in general: I don't have a lot of experience
catching exceptions, and my books are pre-Python-v2, so don't cover the
new model...).
thx
------_=_NextPart_001_01C0CC1D.A03DBDD8
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
catching odbc errors in Python/ASP pages
Having an implementation problem, ASP pages failing =
when rolled out to production server, when they worked fine on dev =
machine and on staging server. Trying to track down =
problem....
I'm re-using code for generic ODBC interaction that =
some other people gave me. (Basically just have a single class of =
database-handling code, everything else is just in simple Python within =
the ASP page.) It all works fine when there's no error. But the error =
handling never does much. You have to test for a non-null value on an =
error message string param, rather than doing a "try" on a =
raised exception (the "except:" clause in a given method sets =
the param value, then does a "return", not a =
"raise"). And, there never seems to a value for that error =
param. So I can't every catch anything. I just see the problem at the =
end result, like when I try to loop over a resultSet.
In an effort to catch the problem at its source (is it =
when the connection gets created? when the cursor gets created?), and =
get the detailed error message right there, I tried removing the =
exception handling completely from the database class, but then I just =
end up getting an empty page back from the server, rather than an error =
message.
I'm using a current ActiveState Python install, and =
the generic/base PythonWin ODBC module. Under Win2K, talking to =
MsSQL2k.
Are there any tricks, best-practices, etc. for =
handling exceptions in this environment? (Or in general: I don't have a =
lot of experience catching exceptions, and my books are pre-Python-v2, =
so don't cover the new model...).
thx
------_=_NextPart_001_01C0CC1D.A03DBDD8--
From Bill@ipathhq.com Mon Apr 23 19:10:57 2001
From: Bill@ipathhq.com (Bill Seitz)
Date: Mon, 23 Apr 2001 14:10:57 -0400
Subject: [python-win32] catching odbc errors in Python/ASP pages
Message-ID: <8210C9D2F4E1074181EFD72335211A97206C6A@dc0.nyc.ipathhq.com>
This is a multi-part message in MIME format.
------_=_NextPart_001_01C0CC20.BE8F2684
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Argh, 2 key points I should have mentioned in original post:
- dang code seems to work fine when run interactively from within
PythonWin debugger on server.
- other python-powered ASP pages work fine, so there's not some basic
install-config problem
-----Original Message-----
From: Bill Seitz=20
Sent: Monday, April 23, 2001 1:49 PM
To: python-win32@python.org
Subject: [python-win32] catching odbc errors in Python/ASP pages
Having an implementation problem, ASP pages failing when rolled out to
production server, when they worked fine on dev machine and on staging
server. Trying to track down problem....
I'm re-using code for generic ODBC interaction that some other people
gave me. (Basically just have a single class of database-handling code,
everything else is just in simple Python within the ASP page.) It all
works fine when there's no error. But the error handling never does
much. You have to test for a non-null value on an error message string
param, rather than doing a "try" on a raised exception (the "except:"
clause in a given method sets the param value, then does a "return", not
a "raise"). And, there never seems to a value for that error param. So I
can't every catch anything. I just see the problem at the end result,
like when I try to loop over a resultSet.
In an effort to catch the problem at its source (is it when the
connection gets created? when the cursor gets created?), and get the
detailed error message right there, I tried removing the exception
handling completely from the database class, but then I just end up
getting an empty page back from the server, rather than an error
message.
I'm using a current ActiveState Python install, and the generic/base
PythonWin ODBC module. Under Win2K, talking to MsSQL2k.
Are there any tricks, best-practices, etc. for handling exceptions in
this environment? (Or in general: I don't have a lot of experience
catching exceptions, and my books are pre-Python-v2, so don't cover the
new model...).
thx=20
------_=_NextPart_001_01C0CC20.BE8F2684
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
RE: [python-win32] catching odbc errors in Python/ASP =
pages
Argh, 2 key points I should have mentioned in original =
post:
- dang code seems to work fine when run interactively =
from within PythonWin debugger on server.
- other python-powered ASP pages work fine, so =
there's not some basic install-config problem
-----Original Message-----
From: Bill Seitz
Sent: Monday, April 23, 2001 1:49 PM
To: python-win32@python.org
Subject: [python-win32] catching odbc errors in =
Python/ASP pages
Having an implementation problem, ASP pages failing =
when rolled out to production server, when they worked fine on dev =
machine and on staging server. Trying to track down =
problem....
I'm re-using code for generic ODBC interaction that =
some other people gave me. (Basically just have a single class of =
database-handling code, everything else is just in simple Python within =
the ASP page.) It all works fine when there's no error. But the error =
handling never does much. You have to test for a non-null value on an =
error message string param, rather than doing a "try" on a =
raised exception (the "except:" clause in a given method sets =
the param value, then does a "return", not a =
"raise"). And, there never seems to a value for that error =
param. So I can't every catch anything. I just see the problem at the =
end result, like when I try to loop over a resultSet.
In an effort to catch the problem at its source (is it =
when the connection gets created? when the cursor gets created?), and =
get the detailed error message right there, I tried removing the =
exception handling completely from the database class, but then I just =
end up getting an empty page back from the server, rather than an error =
message.
I'm using a current ActiveState Python install, and =
the generic/base PythonWin ODBC module. Under Win2K, talking to =
MsSQL2k.
Are there any tricks, best-practices, etc. for =
handling exceptions in this environment? (Or in general: I don't have a =
lot of experience catching exceptions, and my books are pre-Python-v2, =
so don't cover the new model...).
thx
------_=_NextPart_001_01C0CC20.BE8F2684--
From Peteris_Martinsons@swh-t.lv Mon Apr 23 19:20:51 2001
From: Peteris_Martinsons@swh-t.lv (Peteris_Martinsons@swh-t.lv)
Date: Mon, 23 Apr 2001 10:20:51 -0800
Subject: [python-win32] win32all examples
Message-ID:
Does anybody knows any simple GUI examples of pythonwin? I have looked at
the demos that come along the pythonwin, but there are no examples of
window creation and the like. Pythonwin IDE itself is not so good as
example, because it uses resources and the like.
So far I have made a window with a menu, and have stuck on creating a
toolbar with pictures from external bitmaps. It simply pops up "illegal
operation" and thats all.
It would be good to have some more or less simple examples of real window
creation, like the ones that come with wxWindows.
Peeteris
From Peteris_Martinsons@swh-t.lv Mon Apr 23 19:52:36 2001
From: Peteris_Martinsons@swh-t.lv (Peteris_Martinsons@swh-t.lv)
Date: Mon, 23 Apr 2001 10:52:36 -0800
Subject: [python-win32] Vb GUI from python
Message-ID:
Most probably it is a weird idea. Just wonder, maybe someone has tried to
build a GUI, dispatching objects in vb runtime dlls? Like using VB dlls for
interactively building windows, using COM calls?
Peteris
From shae@webwitches.com Mon Apr 23 20:15:01 2001
From: shae@webwitches.com (Shae Erisson)
Date: Mon, 23 Apr 2001 22:15:01 +0300
Subject: [python-win32] Vb GUI from python
In-Reply-To:
References:
Message-ID: <20010423221501D.shae@webwitches.com>
From: Peteris_Martinsons@swh-t.lv
Subject: [python-win32] Vb GUI from python
Date: Mon, 23 Apr 2001 10:52:36 -0800
> Most probably it is a weird idea. Just wonder, maybe someone has tried to
> build a GUI, dispatching objects in vb runtime dlls? Like using VB dlls for
> interactively building windows, using COM calls?
I think it's a great idea, I'd like to use it.
----
Shae Matijs Erisson - http://www.webwitches.com/~shae/
From Peteris_Martinsons@swh-t.lv Mon Apr 23 21:54:34 2001
From: Peteris_Martinsons@swh-t.lv (Peteris_Martinsons@swh-t.lv)
Date: Mon, 23 Apr 2001 12:54:34 -0800
Subject: [python-win32] Vb GUI from python
Message-ID:
I don't know the details, because I don't know much about COM. Simply - if
there is a wrapper for Tk, the same could be possible for Vb. The result -
developing GUI in VB without purchasing it from M$ :)
Maybe make interface similar to Tk.
Theoretically, if it is possible to use ADO and DAO in Python, why not VB
GUI?
Any opinions?
Maybe someone can take this idea and implement. It can cause BOOM of using
Python on win32.
Peteris Martinsons
From baked@attglobal.net Mon Apr 23 22:08:58 2001
From: baked@attglobal.net (Paul Baker)
Date: Mon, 23 Apr 2001 14:08:58 -0700
Subject: [python-win32] Vb GUI from python
In-Reply-To:
Message-ID: <5.0.2.1.2.20010423140219.00a89dc0@pop5.attglobal.net>
At 12:54 4/23/2001 -0800, Peteris_Martinsons@swh-t.lv wrote:
>I don't know the details, because I don't know much about COM. Simply - if
>there is a wrapper for Tk, the same could be possible for Vb. The result -
>developing GUI in VB without purchasing it from M$ :)
>Maybe make interface similar to Tk.
>Theoretically, if it is possible to use ADO and DAO in Python, why not VB
>GUI?
>
>Any opinions?
>
>Maybe someone can take this idea and implement. It can cause BOOM of using
>Python on win32.
Isn't this all described in the book by Mark Hammond and Andy Robinson,
"Python Programming on Win32" from O'Reilley & Assoc.? Specifically,
Chapter 7, titled "Building a GUI with COM". Since Python is COM
compatible you could use all of MS's COM based ui tools to build your user
interface. Just look as the MSDN and substitute Python for VBScript.
Paul
From Peteris_Martinsons@swh-t.lv Mon Apr 23 22:21:12 2001
From: Peteris_Martinsons@swh-t.lv (Peteris_Martinsons@swh-t.lv)
Date: Mon, 23 Apr 2001 13:21:12 -0800
Subject: [python-win32] Vb GUI from python
Message-ID:
Maybe it is, but when talking about GUI options for Python, nobody mentions
it along with Tk, wxPython, PyQt, PythonWin etc. There are descriptions how
to interface VB with Python, but not how to build GUI in VB without using
MS IDE, at least as fa as I understand.
Peteris
From baked@attglobal.net Mon Apr 23 22:40:56 2001
From: baked@attglobal.net (Paul Baker)
Date: Mon, 23 Apr 2001 14:40:56 -0700
Subject: [python-win32] Vb GUI from python
In-Reply-To:
Message-ID: <5.0.2.1.2.20010423143255.00a89dc0@pop5.attglobal.net>
I think you pretty much have to buy VB to build a VB interface. I guess a
COM UI tool would be kind of cool but it would be a lot of work if you
wanted it to be truly flexible.
Hmmm, Is this something that there would be a lot of demand for? How would
you like to see it work? Why not make up a Python script that would show
how you would like to see it work (assume you had it already working in
your ideal form).
What about Microsoft's HTA (HTML Applications) interface that just uses the
IE DOM and VBScript, does that not give you enough GUI control using HTML
and IE?
This could be a fun project. Are we re-inventing the wheel, has anyone
else done this or anything similar?
Is this still a Python-win32 specific thread? If not let's move it off
line and not post it to the listserv.
Paul
At 13:21 4/23/2001 -0800, Peteris_Martinsons@swh-t.lv wrote:
>Maybe it is, but when talking about GUI options for Python, nobody mentions
>it along with Tk, wxPython, PyQt, PythonWin etc. There are descriptions how
>to interface VB with Python, but not how to build GUI in VB without using
>MS IDE, at least as fa as I understand.
>
>Peteris
>
>
>_______________________________________________
>Python-win32 mailing list
>Python-win32@python.org
>http://mail.python.org/mailman/listinfo/python-win32
From Peteris_Martinsons@swh-t.lv Mon Apr 23 23:06:57 2001
From: Peteris_Martinsons@swh-t.lv (Peteris_Martinsons@swh-t.lv)
Date: Mon, 23 Apr 2001 14:06:57 -0800
Subject: [python-win32] Vb GUI from python
Message-ID:
Not the UI builder, but simply way to build a GUI using vb runtime dlls. I
hope to hear an opinion from people more competent than me - is such a
thing possible?
I'll try to do it, the only obstacle is I don't know where to start :) -
that is, where and how a VB application starts.
A demand is always for the simple to learn and powerful in use (and free),
and, especially, well documented. That's more or less common for Python and
VB (except for price).
Offtopic concerns depend on whether this is a list for PythonWin or Python
on Windows. As there is not too much activity, it could be an appropriate
place to discuss.
Peteris
From tla@research.nj.nec.com Tue Apr 24 05:37:26 2001
From: tla@research.nj.nec.com (Tom Adelman)
Date: Tue, 24 Apr 2001 00:37:26 -0400
Subject: [python-win32] COM problems
Message-ID: <3.0.1.32.20010424003726.012197d8@mail.nj.nec.com>
I was quite excited when I finally looked up what COM was supposed to do,
but have been falling flat in my attempts to use it. It seems like a great
idea; do people generally have success with this for non-MS products?
I've been struggling for quite some time now trying to get Python COM to do
some simple tasks with a program called SigmaPlot. I can get things
working in VB but not Python. I'm using Windows NT, Python 1.5.2, win32all
build 136, and am trying to run SigmaPlot 6.1 as a client. I convinced my
boss to upgrade SigmaPlot just so I could hook it up to Python, and then he
was going to start using Python once I did this. So far I'm nowhere and
could really use some help -- any suggestions would be useful, I'm
completely stuck.
Here's an example:
In VB (only the last two lines are really of interest here -- the other
lines work in both languages):
Dim sp As Object
Set sp = CreateObject("SigmaPlot.Application.1")
sp.Visible = True
sp.Notebooks.Add
sp.ActiveDocument.NotebookItems(2).DataTable.Cell(0, 0) = 5.2
sp.ActiveDocument.NotebookItems.Add (2)
TemplatePage = "Bar Chart for Slide"
sp.ActiveDocument.CurrentPageItem.ApplyPageTemplate (TemplatePage)
Yet in Python, this doesn't work and I get a traceback:
from win32com.client import Dispatch
sp = Dispatch("SigmaPlot.Application")
sp.Visible = 1
sp.Notebooks.Add
sp.ActiveDocument.NotebookItems(2).DataTable.Cell(0,0, 5.2)
sp.ActiveDocument.NotebookItems.Add(2)
TemplatePage = "Bar Chart for Slide"
sp.ActiveDocument.CurrentPageItem.ApplyPageTemplate(TemplatePage)
Traceback (innermost last):
File "", line 1, in ?
File "D:\PythonCode\testSP10.py", line 53, in ?
sp.ActiveDocument.CurrentPageItem.ApplyPageTemplate(TemplatePage)
File "D:\Program Files\python\win32com\client\dynamic.py", line 394, in
__getattr__
raise pythoncom.com_error, details
com_error: (-2147352567, 'Exception occurred.', (65535, 'SigmaPlot 6.1',
'No template name supplied.', None, 0, 0), None)
If you know what's wrong at this point, no need to read further (althoug
please tell me). Otherwise, here are some possibly relevent clues:
1) My guess is that PythonCOM is sending the command "ApplyPageTemplate"
without the parameter, and then when SigmaPlots gets this it balks and says
it needs the parameter. This is consistent with the line
"sp.Notebooks.Add" working but "sp.Notebooks.Add()" not working.
2) I've tried an analgous tests for Excel (a few examples from _Python
Programming on Win32_) and everything seems to work for Excel.
3) Early binding doesn't get started (for SigmaPlot, it works for Excel),
even though I've run MakePy, and even if I start the above script with
gencache.EnsureModule('{6E73CA05-CE63-11CF-B59C-0000929132CE}', 0, 1, 0)
I'm a bit confused by all of this, but I've tried to trace it through the
modules:
The line in the function __WrapDispatch in win32com\client\__init__:
Typeinfo = dispatch.GetTypeInfo()
raises an exception, which then results in a dynamic dispatch.
Explicitely, the exception is (found by reraising it).
File "D:\Program Files\Python\win32com\client\__init__.py", line 28, in
__WrapDispatch
typeinfo = dispatch.GetTypeInfo()
com_error: (-2147467263, 'Not implemented', None, None)
Maybe this is happening because pythoncom.connect was supposed to work and
it doesn't. It raises the exception:
Traceback (innermost last):
File "", line 1, in ?
File "D:\PythonCode\testSP12.py", line 12, in ?
sp = win32com.client.Dispatch("SigmaPlot.Application")
File "D:\Program Files\Python\win32com\client\__init__.py", line 97, in
Dispatch
dispatch, userName =
dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "D:\Program Files\Python\win32com\client\dynamic.py", line 84, in
_GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "D:\Program Files\Python\win32com\client\dynamic.py", line 70, in
_GetGoodDispatch
IDispatch = pythoncom.connect(IDispatch)
com_error: (-2147221021, 'Operation unavailable', None, None)
At this point I'm completely lost. I've spent many hours on this, and
although I would really like to get it running, I'm about to give up. If
you've gotten this far, I really appriciate your taking the time to read my
ramblings and guesses. And any help would be greatly appriciated.
Thanks,
Tom
TA16@cornell.edu
From MarkH@ActiveState.com Tue Apr 24 06:09:54 2001
From: MarkH@ActiveState.com (Mark Hammond)
Date: Tue, 24 Apr 2001 15:09:54 +1000
Subject: [python-win32] COM problems
In-Reply-To: <3.0.1.32.20010424003726.012197d8@mail.nj.nec.com>
Message-ID:
> 1) My guess is that PythonCOM is sending the command "ApplyPageTemplate"
> without the parameter, and then when SigmaPlots gets this it
> balks and says
> it needs the parameter. This is consistent with the line
> "sp.Notebooks.Add" working but "sp.Notebooks.Add()" not working.
Can you post the complete traceback of the failure.
> 3) Early binding doesn't get started (for SigmaPlot, it works for Excel),
> even though I've run MakePy, and even if I start the above script with
> gencache.EnsureModule('{6E73CA05-CE63-11CF-B59C-0000929132CE}', 0, 1, 0)
> I'm a bit confused by all of this, but I've tried to trace it through the
> modules:
You should still be able to use it. I have covered this a few places
before. You use "gencache.EnsureModule()" to get the generated module, then
you can use the class named in the generated file.
Try a google search for EnsureModule().
Mark.
From Alexandre.Fayolle@logilab.fr Tue Apr 24 08:16:29 2001
From: Alexandre.Fayolle@logilab.fr (Alexandre Fayolle)
Date: Tue, 24 Apr 2001 09:16:29 +0200 (CEST)
Subject: [python-win32] Vb GUI from python
In-Reply-To: <5.0.2.1.2.20010423140219.00a89dc0@pop5.attglobal.net>
Message-ID:
On Mon, 23 Apr 2001, Paul Baker wrote:
> Isn't this all described in the book by Mark Hammond and Andy Robinson,
> "Python Programming on Win32" from O'Reilley & Assoc.? Specifically,
> Chapter 7, titled "Building a GUI with COM".
No, this chapter actually explains how to build a VB client to a Python
COM server.
Alexandre Fayolle
--
http://www.logilab.com
Narval is the first software agent available as free software (GPL).
LOGILAB, Paris (France).
From tla@research.nj.nec.com Tue Apr 24 20:02:45 2001
From: tla@research.nj.nec.com (Tom Adelman)
Date: Tue, 24 Apr 2001 15:02:45 -0400
Subject: [python-win32] COM problems
In-Reply-To:
References: <3.0.1.32.20010424003726.012197d8@mail.nj.nec.com>
Message-ID: <3.0.1.32.20010424150245.01452cc0@mail.nj.nec.com>
I've included gencache.EnsureModule appropriately and now seem to have
early binding, although my basic problem still presists (i.e. I can't seem
to pass parameters to certain functions). Now the program looks like (only
the last line here is really important):
import win32com.client
mod =
win32com.client.gencache.EnsureModule('{6E73CA05-CE63-11CF-B59C-0000929132CE
}', 0, 1, 0)
sp = mod.Application()
sp.Visible = 1
nb = sp.Notebooks.Add
nb = mod.Notebook(nb)
sp.ActiveDocument.NotebookItems(2).DataTable.Cell(0,0, 5.2)
gp = sp.ActiveDocument.NotebookItems.Add(mod.constants.CT_GRAPHICPAGE)
gp = mod.GraphItem(gp)
TemplatePage = "Bar Chart for Slide"
x = sp.ActiveDocument.CurrentPageItem.ApplyPageTemplate(TemplatePage)
And running this produces:
Traceback (innermost last):
File "", line 1, in ?
File "D:\PythonCode\testSP21.py", line 19, in ?
x = sp.ActiveDocument.CurrentPageItem.ApplyPageTemplate(TemplatePage)
File "D:\Program Files\python\win32com\client\dynamic.py", line 429, in
__getattr__
raise pythoncom.com_error, details
com_error: (-2147352567, 'Exception occurred.', (65535, 'SigmaPlot 6.1',
'No template name supplied.', None, 0, 0), None)
or I can make the last line go through the gencache module:
x = gp.ApplyPageTemplate(vTemplateName=TemplatePage)
to get:
Traceback (innermost last):
File "", line 1, in ?
File "D:\PythonCode\testSP21.py", line 17, in ?
gp.ApplyPageTemplate(TemplatePage)
File "D:\Program
Files\python\win32com\gen_py\6E73CA05-CE63-11CF-B59C-0000929132CEx0x1x0.py",
line 1696, in ApplyPageTemplate
return self._oleobj_.InvokeTypes(0x9c6, LCID, 1, (11, 0), ((12, 0),
(12, 16)),vTemplateName, vTemplateFileName)
com_error: (-2147352573, 'Member not found.', None, None)
>> 1) My guess is that PythonCOM is sending the command "ApplyPageTemplate"
>> without the parameter, and then when SigmaPlots gets this it
>> balks and says
>> it needs the parameter. This is consistent with the line
>> "sp.Notebooks.Add" working but "sp.Notebooks.Add()" not working.
>
>Can you post the complete traceback of the failure.
>
If instead of sp.Notebooks.Add in the above I run
sp.Notebooks.Add()
I get
Traceback (innermost last):
File "", line 1, in ?
File "D:\PythonCode\testSP21.py", line 7, in ?
nb = sp.Notebooks.Add()
File "D:\Program Files\python\win32com\client\dynamic.py", line 150, in
__call__
return
self._get_good_object_(apply(self._oleobj_.Invoke,allArgs),self._olerepr_.de
faultDispatchName,None)
com_error: (-2147352573, 'Member not found.', None, None)
What I find particularly weird with the above is that if I type this in
interactively and watch SigmaPlot, as soon as I type in the
"sp.Notebooks.Add(", and before I type ")", I get a new notebook
appearing. Then when I type ")", I get another notebook and the
traceback.
Tom
TA16@cornell.edu