Re: [Zope] Re: Zope Foundation Update

2005-07-26 Thread Andreas Jung



--On 26. Juli 2005 22:40:18 +0200 Alexander Limi <[EMAIL PROTECTED]> wrote:


They did the work on our behalf, and most excellently executed the
worldwide registration of the mark. The trademarks were transferred fully
to the
Plone Foundation as agreed.


So any idea why the WIPO database tell us a different story?

-aj

pgpwQ0eQtakmt.pgp
Description: PGP signature
___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )


[Zope] Re: Zope Foundation Update

2005-07-26 Thread Alexander Limi
(Sorry about the lateness of this post, a combination of interesting SMTP  
blocks + Zope mailing list policies made this message not come through the  
first time around, which was the 20th of July. I discovered this today  
while browsing the archives.)


On Wed, 20 Jul 2005 01:07:25 +0200, Rob Page <[EMAIL PROTECTED]> wrote:


As an aside, the ZEA has also registered the Plone logo
as a trademark.  It is not our business, but came as a
surprise to us, that the Plone Foundation is not the
owner of the Plone trademark.


This is wrong.

In the early days of the Foundation, we had no proper legal representation  
and asked ZEA to represent us while setting up the legal entity for the

Foundation.

Plone Foundation therefore asked ZEA to assist us with their trademark  
experts to register the Plone trademark worldwide. This is perfectly clear  
from the publicly available Plone Foundation board meeting minutes.


They did the work on our behalf, and most excellently executed the  
worldwide registration of the mark. The trademarks were transferred fully  
to the

Plone Foundation as agreed.

As a result, Plone Foundation owns the worldwide trademark for Plone.

-- Alexander Limi
   Vice President
   Plone Foundation

___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
http://mail.zope.org/mailman/listinfo/zope-announce

http://mail.zope.org/mailman/listinfo/zope-dev )


Re: [Zope] Traceback Lines for Send Mail Error

2005-07-26 Thread Dieter Maurer
Asad Habib wrote at 2005-7-25 15:19 -0400:
> ...
>socket.gethostname() is not
>returning the full canonical name of the machine.

"gethostname" is not required to return the FQDN (Fully Qualified Domain Name).
This is not your problem.

But "gethostbyname(gethostname())" should be able to resolve
whatever "gethostname()" returns into an IP address.


If you already told us the platform you are using, then I missed
this information (or forgot it).
If you work under *nix, you may add an entry to "/etc/hosts"
that assigns an IP address to the value "gethostname()" returns.

I cannot help you much when you work under some variety of Windows.
But, I know, Windows knows a "hosts" file as well.
Maybe, the same approach works there, too.

-- 
Dieter
___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )


Re: [Zope] How to display unicode character given its code

2005-07-26 Thread Dieter Maurer
Itai Tavor wrote at 2005-7-26 11:20 +1000:
> ...
>Couldn't get it to work, though... not sure why: unicode('\u2013')  
>returns u'\\u2013', which is useless.

I know why (now, that you report the problem).

  '...' introduces a non unicode string in which "\u" is not recognized.
  "\u" is only recognized in unicode strings.
  They are introduced by "u'...'".

Thus, instead of "unicode('\u2013').encode('utf-8')", I should
have written "u'\u2013'.encode('utf-8')".

-- 
Dieter
___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )


Re: [Zope] Running more than one instance on windows often block each other

2005-07-26 Thread Tim Peters
[Sune Brøndum Wøller]
> Thanks for the pointer. I have been debugging
> select_trigger.py, and has some more info:
>
> The problem is that the call a.accept() sometimes hangs.
> Apparently a.bind(self.address) allows us to bind to
> a port that another zope instance already is bound to.
>
> The code creates the server socket a, and the client socket w,
> and gets the client socket r by connecting w to a. Then it closes a.
> a goes out of scope when __init__ terminates, and is probably garbage
> collected at some point.

Unless you're using a very old Python, `a` is collected before the
call returns (where "the call" means the call of the function in which
`a` is a local variable).  Very old Pythons had an idiotic __del__
method attached to their Windows socket wrapper, which inhibited
timely gc.

> I tried moving the code to the following standalone script, and I can 
> reproduce
> the error with that. In the original code w is kept as an instance variable, 
> and
> r is passed to asyncore.dispatcher.__init__  and probably kept there.

Yes, the socket bound to `r` also gets bound to `self.socket` by this call:

asyncore.dispatcher.__init__ (self, r)

> I simulate that by returning them, then the caller of socktest can keep them
> around.
>
> I try to call socktest from different processes A and B (two pythons):
> (w,r = socktest())
> The call in A gets port 1. The second call, in B, either blocks, or takes
> over port 1 (I see the second process taking over the port in a port 
> scanner.)

Sorry, I can't reproduce this -- but you didn't give a test program,
just an isolated function, and I'm not sure what you did with it.  I
called that function in an infinite loop, appending the return value
to a global list, with a short (< 0.1 second) sleep between
iterations, and closed the returned sockets fifty iterations after
they were created.  Ran that loop in two processes.  No hangs, or any
other oddities, for some minutes.  It did _eventually_ hang-- and both
processes at the same time --with netstat showing more than 4000
sockets hanging around in TIME_WAIT state then.  I assume I bashed
into some internal Windows socket resource limit there, which Windows
didn't handle gracefully.  Attaching to the processes under the MSVC 6
debugger, they were hung inside the MS socket libraries.  Repeated
this several times (everything appeared to work fine until > 4000
sockets were sitting in TIME_WAIT, and then both processes hung at
approximately the same time).

Concretely:

sofar = []
try:
while 1:
print '.',
stuff = socktest()  # calling your function
sofar.append(stuff)
time.sleep(random.random()/10)
if len(sofar) == 50:
tup = sofar.pop(0)
w, r = tup
msg = str(random.randrange(100))
w.send(msg)
msg2 = r.recv(100)
assert msg == msg2, (msg, msg2)
for s in tup:
s.close()
except KeyboardInterrupt:
for tup in sofar:
for s in tup:
s.close()

Note that there's also a bit of code there to verify that the
connected sockets can communicate correctly; the `assert` never
triggered.

You haven't said which versions of Windows or Python you're using.  I
was using XP Pro SP2 and Python 2.3.5.  Don't know whether either
matters.

It was certainly the case when I ran it that your

> print port

statement needed to display ports less than 1 at times, meaning that the

> a.bind((host, port))

did raise an exception at times.  It never printed a port number less
than 19997 for me.  Did you ever see it print a port number less than
1?

> a.bind in B does not raise socket.error: (10048, 'Address already in use') as
> expected, when the server socket in A is closed, even though the port is used 
> by
> the client socket r in A.

I'm not sure what that's saying, but could be it's an illusion.  For example,

>>> import socket
>>> s = socket.socket()
>>> s.bind(('localhost', 1))
>>> s.listen(2)
>>> a1 = socket.socket()
>>> a2 = socket.socket()
>>> a1.connect(('localhost', 1))
>>> a2.connect(('localhost', 1))
>>> b1 = s.accept()
>>> b2 = s.accept()
>>> b1[0].getsockname()
('127.0.0.1', 1)
>>> b2[0].getsockname()
('127.0.0.1', 1)
>>>

That is, it's normal for the `r` in

> r, addr = a.accept()

to repeat port numbers across multiple `accept()` calls, and indeed to
duplicate the port number from the `bind` call.  This always confused
me (from way back in my Unix days -- it's not "a Windows thing"), and
maybe it's not what you're talking about anyway.

> If I remove a.close(), and keep a around (by passing it to the caller), a.bind
> works as expected - it raises socket.error: (10048, 'Address already in use').

As above, I'm seeing `bind` raise exceptions regardless.

> But in the litterature on sockets, I read it should be okay to close the 
> server
> socket and keep using the client sockets.
> 
> So, is this a

[Zope] Re: Running more than one instance on windows often block each other

2005-07-26 Thread Sune B. Woeller

Tim Peters wrote:

[Sune B. Woeller]


...
I can see (with the excellent (and free) 'Process
Explorer' from sysinternals) that the python
processes always opens port 1, and connects by
that port to themselves on another port (for
instance 2550).


 
[Dieter Maurer]



You can find the relevant code in
"ZServer.medusa.thread.select_trigger.trigger.__init__"

In principle, the code should try all sockets between
"1" down to "19950" and fail only when none of them
could be bound to...



Thanks for the pointer. I have been debugging
select_trigger.py, and has some more info:

The problem is that the call a.accept() sometimes hangs.
Apparently a.bind(self.address) allows us to bind to
a port that another zope instance already is bound to.

The code creates the server socket a, and the client socket w,
and gets the client socket r by connecting w to a. Then it closes a.
a goes out of scope when __init__ terminates, and is probably garbage collected 
at some point.


I tried moving the code to the following standalone script, and I can reproduce 
the error with that. In the original code w is kept as an instance variable, and 
r is passed to asyncore.dispatcher.__init__  and probably kept there. I simulate 
that by returning them, then the caller of socktest can keep them around.


I try to call socktest from different processes A and B (two pythons):
(w,r = socktest())
The call in A gets port 1. The second call, in B, either blocks, or takes 
over port 1 (I see the second process taking over the port in a port scanner.)


a.bind in B does not raise socket.error: (10048, 'Address already in use') as 
expected, when the server socket in A is closed, even though the port is used by 
the client socket r in A.


If I remove a.close(), and keep a around (by passing it to the caller), a.bind 
works as expected - it raises socket.error: (10048, 'Address already in use').


But in the litterature on sockets, I read it should be okay to close the server 
socket and keep using the client sockets.


So, is this a possible bug in bind() ?


I have tested the new code from Tim Peters, it apparently works, ports are given 
out by windows.
But could the same problem with bind occur here, since a is closed (and garbage 
collected) ? (far less chance for that since we do not specify port numbers, I 
know).


I tried getting a pair of sockets with Tim's code, and then trying to bind a 
third socket to the same port as a/r. And I got the same problem as above.



Sune

+
import socket, errno

class BindError(Exception):
pass


def socktest():
"""blabla
"""

address = ('127.9.9.9', 1)

a = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
w = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

# set TCP_NODELAY to true to avoid buffering
w.setsockopt(socket.IPPROTO_TCP, 1, 1)

# tricky: get a pair of connected sockets
host='127.0.0.1'
port=1

while 1:
print port
try:
a.bind((host, port))
break
except:
if port <= 19950:
raise BindError, 'Cannot bind trigger!'
port=port - 1

a.listen (1)
w.setblocking (0)
try:
w.connect ((host, port))
except:
pass
r, addr = a.accept()
a.close()
w.setblocking (1)

#return (a, w, r)
return (w, r)
#return w

+





Yup.  ZODB has what looks like a copy/paste of this code, in
ZEO/zrpc/trigger.py.  I didn't realize where it came from originally
until you pointed out the Medusa code here.

Anyway, it so happens I rewrote ZEO's copy a few weeks ago, in ZODB
3.4.  The Windows part is much simpler there now.  I don't know why
the original might fail in the way Sune reported, but perhaps the
rewritten version would not.

Before:

# tricky: get a pair of connected sockets
host='127.0.0.1'
port=1
while 1:
try:
self.address=(host, port)
a.bind(self.address)
break
except:
if port <= 19950:
raise BindError, 'Cannot bind trigger!'
port=port - 1

a.listen (1)

w.setblocking (0)
try:
w.connect (self.address)
except:
pass
r, addr = a.accept()
a.close()
w.setblocking (1)
self.trigger = w

After:

# Specifying port 0 tells Windows to pick a port for us.
a.bind(("127.0.0.1", 0))
connect_address = a.getsockname()  # assigned (host, port) pair
a.listen(1)
w.connect(connect_address)
r, addr = a.accept()  # r becomes asyncore's (self.)socket
a.close()
self.trigger = w
___
Zope maillist 

RE: [Zope] cpu performance zope/zeo

2005-07-26 Thread John Snowdon
We're using dual cpu (not dual core) 64bit AMD Opteron (Sun Fire V20's)
based systems and are VERY impressed with their performance; our python
benchmarks show dual Opteron 250 systems outperforming dual twin-core
Xeon 3.6GHz with the same code. Almost everything we run is ZEO based
and hosted over 2 or more boxes (7 or 8 in the case of our biggest
system). We couldn't be happier with the combination of Opteron and ZEO.

We benchmarked 64bit Opteron, 64Bit UltraSparc III, 32bit Xeon and 64bit
Xeon for our applications. Opteron trounces them all in day to day use.

Sun's dual core Opteron offerings are coming out VERY soon. So that will
make the V20 a 4-way system, and the V40 an 8-way system!

As a guide, our standard spec for a ZEO hosted Zope server is 2 x
Opteron 250/252, 4Gb, dual Gbit NIC, dual 10krpm SCSI drives in RAID1
(the main ZEO backend server is a similar spec but utilising a big SATA
array in RAID50). We've found we can host 6 or so big sites (resident
seize of 250mb or more) on each node and still get excellent performance
by duplicating across several nodes. We have ZEO served sessions and use
Pound to load balance across the pool without any stickyness - meaning
on each page access users will (potentially) go to a new box - resulting
in much finer grained balancing and use of resources.

Performance is *excellent*.

-John

 John Snowdon - IT Support Specialist
-==-
 School of Medical Education Development 
 Faculty of Medical Sciences Computing
 University of Newcastle

>-Original Message-
>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On 
>Behalf Of Srdan Zagorac
>Sent: 26 July 2005 06:27
>To: zope@zope.org
>Subject: [Zope] cpu performance zope/zeo
>
>
>Hi
>
>I need  a suggestion / advice regarding the  CPU options for the best  
>ZOPE and ZEO performance. eg 32 vs 64 bits architecture,  
>single vs dual 
>core, hyper threading.
>Is there any bechmarks already posted on the web??
>
>Thanks
>
>-- 
>-
>Srdan Zagorac
>Software Developer / Webmaster / DB Administrator
>Bioengineering Institute
>University of Auckland 
>email: [EMAIL PROTECTED]
>url: http://www.bioeng.auckland.ac.nz
>ph: +64 9 373 7599 ext. 82046
>fax: +64 9 367 7157
>-
>
>___
>Zope maillist  -  Zope@zope.org
>http://mail.zope.org/mailman/listinfo/zope
>**   No cross posts or HTML encoding!  **
>(Related lists - 
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope-dev )
>
___
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists -
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope-dev )