Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Ed Singleton
On 24/11/05, Kent Johnson <[EMAIL PROTECTED]> wrote:
> Ed Singleton wrote:
> > Is it feasible to change a program's source code whilst it is running
> > without having to restart the program?  Is it feasible to get a
> > program to change it's own source code while it is running?
>
> You can change a class while it is running.
> >
> > For example, if you have a web server such as CherryPy that will
> > (hopefully) be running for months at a time and you want to be able to
> > change classes without having to restart the server.  Or if you want
> > to allow users of the site to edit a class through the web and see the
> > changes to the site immediately?
>
> The auto-restart feature of CherryPy might do this for you. Also if the 
> changes to the site are to a template such as Cheetah, those usually 
> autoreload.
> >
> > Can a python program change a class, change all the objects already
> > created by that class and save the modified class definition, so that
> > if the program were restarted it would return to exactly the same
> > state? (assuming all objects were saved to a database or somesuch).
>
> You can have persistent objects using for example SQLObject or ZODB,
> >
> > Does anyone have any good links to implementations of this?  I assume
> > someone's already done it before.
>
> It sounds like maybe you come from a background in Smalltalk, or maybe you 
> should look at Smalltalk. In Smalltalk the whole environment is dynamic and 
> can be saved and restored easily.
Just had a quick look at Smalltalk, and at first glance the overview
of the ideas behind it seems amazing, but the language seems quite
ugly, and it seems to be very IDE led.

> For Python, I think you will do better if you narrow your requirements. 
> Python is very dynamic - classes can be changed at runtime, or reloaded if 
> you are careful - and there are several good ways to persist state. If you 
> can be more specific about what you really need there may be a solution for 
> you.

What I want to do seems quite simple to me in concept, but is seeming
more and more as if it would be hard to implement.

I want to create a small simple CMS for my website.  Users will be
able to add and edit basic pages.  Pages can have sub-pages (no need
for folders cause a folder and an index.html can be unified into one
concept).

Users will also be able to create new types of pages, maybe a
PressReleasePage for example.  PressReleases would be based on a
normal page but might have extra attributes such as Author, Abstract
or DateToBeReleased.

This immediately seemed to me to be a case for classes.  You provide a
way for a user to create a new class by subclassing the page class
(from their point of view probably through adding a few new fields to
a form).  Later if they change their mind they can edit the class by
adding or removing attributes.

However it doesn't really seem that Python is suited to this.  Indeed
it doesn't really seem that Python is suited to a persistent
environment.  Having a program running for a long time (months) is
possible certainly, but it seems to be fighting against the language
rather than working with it.

Ed
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Ed Singleton
On 24/11/05, Alan Gauld <[EMAIL PROTECTED]> wrote:
> There are many ways of doing this, few of them very nice IMHO.
>
> > without having to restart the program?  Is it feasible to get a
> > program to change it's own source code while it is running?
>
> Yes, you can overwrite an existing module then call reload
> from within the program.
>
> > For example, if you have a web server such as CherryPy that will
> > (hopefully) be running for months at a time and you want to be able to
> > change classes without having to restart the server.
>
> Yes that would be feasible., preferrably in response to an admin
> page where you could fill in a list of modules to be reloaded...
> But you neeed to be very careful not to break any of the interfaces,
> the Liskov Substitution Principle must be strictly observed.
>
> > to allow users of the site to edit a class through the web and
> > see the changes to the site immediately?
>
> Extremely dangerous but the same principle would apply,
> simply load the existing module into an editor pane then save
> the modified version and reload it.
>
> > Can a python program change a class,
>
> Yes as above.
>
> > change all the objects already created by that class
>
> Trickier and potentially involves some low level poking that
> should not be encouraged IMHO! :-)

> > and save the modified class definition, so that
> > if the program were restarted it would return to exactly the same
> > state? (assuming all objects were saved to a database or somesuch).
>
> If the LSP is adhered to its feasible but I don't intend to try any
> such thing! It would be full of pitfalls and an almosyt certain recipe
> for reliability problems that would be impossible to find.
> Self modifying code sounds like a good idea but there is a very
> good reason why its almost never used in production software!

Well, self-modifying isn't inherently necessary.  What I guess I
really need is persistent classes as well as persistent objects.

I always tend to think of classes as templates for objects rather than
factories.  In my mind, object methods are just calls to the class
which are evaluated every time they are called.  Objects should be
strict instances of classes that can't be modified except for the
values of their attributes.

I think I can actually achieve this to some degree by doing:

Class Page(object):
def print(self):
printPage(self)

And have all my methods call functions (passing on parameters as
necessary).  That way if I change a function, it will be changed for
every instance of every object of that class.

And couldn't I write a function that would add functions or attributes
to classes and objects?

def addAttribute(class, attribute, starting value):
# add it to the class
# iterate through all objects already created by the class
# add attribute to object

Am I trying to use the wrong language for this?  I love Python but I
seem to keep coming up against lots of practical issues with it and I
really don't want to bother with practical issues.  I just want to
define the behaviours I want without having to bother with how the
computer is actually going to handle them.

I guess it's very much a "I don't care how it works!" attitude, which
is probably a corollary to "premature optimisation is the root of all
evil".  Ignore all issues of memory and speed and create something
highly abstract that allows you to define your solution.  Then work
down from there and start worrying about speed and memory and
practical issues later (or hopefully never).

Ed
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Kent Johnson
Ed Singleton wrote:

> I think I can actually achieve this to some degree by doing:
> 
> Class Page(object):
> def print(self):
> printPage(self)
> 
> And have all my methods call functions (passing on parameters as
> necessary).  That way if I change a function, it will be changed for
> every instance of every object of that class.

Yes, that will work. You can change the definition of a class method at runtime.

> 
> And couldn't I write a function that would add functions or attributes
> to classes and objects?
> 
> def addAttribute(class, attribute, starting value):
> # add it to the class
> # iterate through all objects already created by the class
> # add attribute to object

Yes, you can add attributes to classes and objects.

Did you look at this recipe?
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/160164

The MetaInstanceTracker metaclass gives an easy way for classes to keep track 
of their instances. The MetaAutoReloader metaclass uses MetaInstanceTracker to 
update class definitions when a module is reloaded.
> 
> Am I trying to use the wrong language for this?  I love Python but I
> seem to keep coming up against lots of practical issues with it and I
> really don't want to bother with practical issues.  I just want to
> define the behaviours I want without having to bother with how the
> computer is actually going to handle them.

That seems rather idealistic!
> 
> I guess it's very much a "I don't care how it works!" attitude, which
> is probably a corollary to "premature optimisation is the root of all
> evil".  Ignore all issues of memory and speed and create something
> highly abstract that allows you to define your solution.  Then work
> down from there and start worrying about speed and memory and
> practical issues later (or hopefully never).

I still think you are shooting for too high a level of abstraction. 

Kent
-- 
http://www.kentsjohnson.com

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Kent Johnson
Ed Singleton wrote:
> On 24/11/05, Kent Johnson <[EMAIL PROTECTED]> wrote:
>> It sounds like maybe you come from a background in Smalltalk, or
>> maybe you should look at Smalltalk. In Smalltalk the whole
>> environment is dynamic and can be saved and restored easily.> 
> 
> Just had a quick look at Smalltalk, and at first glance the overview
> of the ideas behind it seems amazing, but the language seems quite
> ugly, and it seems to be very IDE led.

I guess the language grows on you, it certainly has some strong supporters. It 
is very oriented to a single comprehensive environment. I think this is one 
reason it never became generally popular. But it also is what gives the 
language its extreme malleability. It does do what you want - it allows you to 
change objects and classes dynamically at run-time and save the state of the 
system at any time. The down side is that all interaction with the system is 
from within.
 
>>For Python, I think you will do better if you narrow your requirements. 
>>Python is very dynamic - classes can be changed at runtime, or reloaded if 
>>you are careful - and there are several good ways to persist state. If you 
>>can be more specific about what you really need there may be a solution for 
>>you.
> 
> 
> What I want to do seems quite simple to me in concept, but is seeming
> more and more as if it would be hard to implement.
> 
> I want to create a small simple CMS for my website.  Users will be
> able to add and edit basic pages.  Pages can have sub-pages (no need
> for folders cause a folder and an index.html can be unified into one
> concept).

Have you looked at Plone and PyLucid?
http://plone.org/
http://www.pylucid.org/
 
> Indeed
> it doesn't really seem that Python is suited to a persistent
> environment.  Having a program running for a long time (months) is
> possible certainly, but it seems to be fighting against the language
> rather than working with it.

Python provides mechanisms for persistence but not a way to persist the entire 
environment. You have to design and build your program to support persistence. 
Long-running Python programs are certainly possible.

PS Please reply on list.

Kent
-- 
http://www.kentsjohnson.com

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Ismael Garrido
Ed Singleton wrote:

>I want to create a small simple CMS for my website.  Users will be
>able to add and edit basic pages.  Pages can have sub-pages (no need
>for folders cause a folder and an index.html can be unified into one
>concept).
>
>Users will also be able to create new types of pages, maybe a
>PressReleasePage for example.  PressReleases would be based on a
>normal page but might have extra attributes such as Author, Abstract
>or DateToBeReleased.
>
>  
>
Store the fields in a database, make a factory class that gets those 
fields and generates a page accordingly.

I agree with Kent, what you're trying seems way too abstract.

Ismael
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Ed Singleton
On 25/11/05, Ismael Garrido <[EMAIL PROTECTED]> wrote:
> Ed Singleton wrote:
>
> >I want to create a small simple CMS for my website.  Users will be
> >able to add and edit basic pages.  Pages can have sub-pages (no need
> >for folders cause a folder and an index.html can be unified into one
> >concept).
> >
> >Users will also be able to create new types of pages, maybe a
> >PressReleasePage for example.  PressReleases would be based on a
> >normal page but might have extra attributes such as Author, Abstract
> >or DateToBeReleased.
> >
> >
> >
> Store the fields in a database, make a factory class that gets those
> fields and generates a page accordingly.
>
> I agree with Kent, what you're trying seems way too abstract.

Weirdly, I'd just realised that SQLObject does most of what I'm
thinking about.  It allows you to update a class and that will affect
all the objects already instantiated.  It has class persistence in
that it will rebuild the class on startup from the columns in your
table so your 'live' changes will be there after you restart the
server.  Though all that is only for the data in the class.

Each method could just contain a call to a function (as I mentioned
above) all the functions could be contained in a module, which would
make it easy to update them as it appears to be easy enough to reload
a module.

The only thing you wouldn't really be able to do is add or remove
methods, which I guess is fine for the moment.

The only thing I'm not sure of is whether SQLObject can store
properties (as in managed attributes) which I need to do for the
'inherit from parent' attribute that I mentioned is a previous thread:

class Page(object):

   def __init__(self, parent):
   self.__header = None
   self.parent = parent

   def getheader(self):
   if not self._header and self.parent:
   return self.parent.header
   else:
   return self.__header

   def setheader(self, header):
   self.__header = header

   header = property(getheader, setheader)
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] lil help please - updated (fwd)

2005-11-25 Thread Chris or Leslie Smith
| I think I would split this into three phases:
| - collect the data into groups of HFR
| - process each group by rearranging, renumbering, reporting errors
| - output the processed groups
| 
| One potential problem is to resynchronize to the next group when
| there is a sequence error. If there is always a blank line between
| groups it is easy. Otherwise maybe just assume an H is the start of a
| group.   
| 

Hmm...so Alan could first split the data on the "|H" values. These *should* 
contain an |F and and |R, so the next step would be to break these HFR groups 
into pieces and check to see that all the pieces are there, and perhaps if not, 
printing those to an error file for review.

Alan, regarding the extraction of the parentheticals, what have you tried? One 
suggestion for this aspect is to get rid of the line breaks in the |H chunk and 
then you won't have the problem of a broken parenthetical. For example,

##
>>> multiLines = '''This (as you
... can see) is multilined.'''
>>> multiLines.splitlines()
['This (as you', 'can see) is multilined.']
>>> ' '.join(multiLines.splitlines())
'This (as you can see) is multilined.'
>>> # the above is one line and much easier to handle now.
##

How are you reading the data in from the file?

/c
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Kent Johnson
Ed Singleton wrote:
> Weirdly, I'd just realised that SQLObject does most of what I'm
> thinking about. 

Ahhh. (sigh of relief :-)

Kent

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] lil help please - updated (fwd) (Chris or Leslie Smith)

2005-11-25 Thread Alan
Smile and Kent

The logic is so good so far. However, How do we move the (...) in |H to
end of |R and before next |H

Much respect
AD

Exceptional team:
I like and I agree with your all logic (I have no choice! Smile you are
more advanced than me)

Kent said: 
I think I would split this into three phases:
- collect the data into groups of HFR
- process each group by rearranging, renumbering, reporting errors
- output the processed groups

One potential problem is to resynchronize to the next group when there
is a sequence error. If there is always a blank line between groups it
is easy. Otherwise maybe just assume an H is the start of a group.

And Smile addressed Kent's concern by saying:

Hmm...so Alan could first split the data on the "|H" values. These
*should* contain an |F and and |R, so the next step would be to break
these HFR groups into pieces and check to see that all the pieces are
there, and perhaps if not, printing those to an error file for review.


Alan, regarding the extraction of the parentheticals, what have you
tried? One suggestion for this aspect is to get rid of the line breaks
in the |H chunk and then you won't have the problem of a broken
parenthetical. For example,

##
>>> multiLines = '''This (as you
... can see) is multilined.'''
>>> multiLines.splitlines()
['This (as you', 'can see) is multilined.']
>>> ' '.join(multiLines.splitlines())
'This (as you can see) is multilined.'
>>> # the above is one line and much easier to handle now.
##

>How are you reading the data in from the file?

I use the 150 line python I do not mind emailing it directly so I do not
confuse these cleaning tasks - you just say yes

Much respect
AD



---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.778 / Virus Database: 525 - Release Date: 10/15/2004
 

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Alan Gauld
> Just had a quick look at Smalltalk, and at first glance the overview
> of the ideas behind it seems amazing, but the language seems quite
> ugly, and it seems to be very IDE led.

Adherents will defend its simplicity but I confess I strugglred for 
a long time with SmallTalk before learning to love it :-) And yes 
it is IDE led although the IDE can be 'removed' when deploying 
applications. But much depends on the implementation, my favourite 
for PCs is Dolphin SmallTalk from ObjectArts. Its not a traditional 
SmallTalk (ala Xerox SmallTalk 80) but very much one for the '90's

> This immediately seemed to me to be a case for classes.  
> You provide a way for a user to create a new class by 
> subclassing the page class (from their point of view 
> probably through adding a few new fields to
> a form).  

That might be part of the problem, if you think of a class in terms 
of its data attributes then that is nearly always the wrong starting 
point. Classes express behaviour, the data is only there to support 
the behaviour. Thats why methods are polymorphic but not attributes.

So you think of a class having an interface and users extending 
or modifying the behaviour, not the data. If you follow that route
you might find you don't need to write self modifying code, 
you simply load new classes with a common interface into an 
existing hook structure.

> However it doesn't really seem that Python is suited to this.  Indeed
> it doesn't really seem that Python is suited to a persistent
> environment.  

What makes you think that? Most persistent environments 
(ie long running server processs) are written in C/C++ (or 
maybe Java nowadays) which are far less dynamic than Python.

> Having a program running for a long time (months) is
> possible certainly, but it seems to be fighting against the language

Not at all, at least no more than in languages like C which require 
recoding, recompiling, stopping and then restarting the server to 
make changes. Thats why a simple framework with loadable 
modules it usally preferred to self modifying code!

Alan G
Author of the learn to program web tutor
http://www.freenetpages.co.uk/hp/alan.gauld



___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Alan Gauld



Hi Ed,
 
This is a longish response because you are 
raising some 
very interesting (and deep) issues from a 
computer science 
point of view.
 
> Well, self-modifying isn't inherently 
necessary.  What I guess I> really need is persistent classes as 
well as persistent objects.
Python classes can be persistent just like 
any other object, 
theres nothing intrinsically different between a class object 
and any other kind of object (except that classes as objects 
are kind of mind bending as a concept!)
 
> I always tend to think of classes as 
templates for objects rather 
> than factories.  
 
They are both.
 
> In my mind, object methods are just 
calls to the class which 
> are evaluated every time they are 
called.  
 
The methjods are function attributes of a 
class which are selected 
by the class dispatch mechanism in response 
to messages sent to 
instances. In Python that means the 
getattr() methods look up 
the right method in response to receipt of 
a message.
 
> Objects should be strict instances of 
classes that can't be 
> modified except for the values of 
their attributes.
 
Attributes in a pure OOP language include 
both the contained data 
and functions. In other workds methods can 
be added/removed and 
modified as well as the data. In fact many 
would argue that the 
internal data not only cannot be modified 
externally but should not 
even be seen - the Data Hiding school of 
thought.> Class Page(object):>    def 
print(self):>     
printPage(self)
What does that gain you?
> And have all my methods call functions (passing on parameters 
as> necessary).  That way if I change a function, it will be changed 
for> every instance of every object of that class.
You mean like this:
 
>>> class C:...   
def m(self): print 'm'...>>> def f(o): print 'other 
m'...>>> c = C()>>> c.m()m>>> C.m 
= f>>> c.m()other m>>>
 
> And couldn't I write a function that 
would add functions or attributes> to classes and 
objects?
Of course, just like I did 
there.
 
> Am I trying to use the wrong language 
for this?  I love Python but I> seem to keep coming up against lots 
of practical issues with it 
 
Python is a pretty good language for this 
kind of thing, 
its just that this kind of thing is intrinsically difficult. 

The only lanuages I know of which 
are better than Python 
at it are Lisp and Smalltalk (and even 
Smalltalk 
has some limitations compared to Python). 
Do you have 
experience of a language which is more flexible in this regard? 
I'm curious because you seem to assume that its almost 
normal to be able to do these things, 
whereas in my 
experience its usually impossible rather 
than just difficult...
 
> define the behaviours I want without 
having to bother with how the> computer is actually going to handle 
them.
Believe it or not thats been the holy grail 
of language 
designers since the days of COBOL - The Common Business 
Oriented Language - which allowed business people to 
write theitr own programmes in 
"standard, everyday English", 

like:
 
PROGRAM ID - HELLO
 
PROCEDURE DIVISION
   MAIN-LINE-MODULE
   MOVE 0 TO COUNTER
   OPEN 
INPUT IN-FILE
   
PERFORM READ IN-FILE UNTIL END-OF-FILE = "YES"
   ADD 1 
TO COUNTER
   
DISPLAY "LINE NUMBER ", COUNTER
   CLOSE 
IN-FILE
   STOP 
RUN.
 
At the time it was considered revolutionary 
and programmers 
trembled at the prospect of instant 
redundancy. As it happened 
your average businessman found COBOL about 
as readable as pigin 
English! But that hasn't stopped us 
trying...
 
One thing we have discovered is that the 
more natural the 
language seems to get the less flexible the language gets. 
Python is the closest I've seen yet to a general purpose 
language that is truly readable, 
but thats still a long 
way from being plain English! But I digress 
:-)
 
Basically I just wonder what your 
background is that you 
seem to expect these kind of dynamic facilities? I'd certainly
be interested in investigating it further.
 
Alan GAuthor of the learn to program 
web tutorhttp://www.freenetpages.co.uk/hp/alan.gauld
 
 
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] lil help please - updated (fwd) (Chris or Leslie Smith)

2005-11-25 Thread Alan
Thanks Getting Simpler

I tested the below on python command line, it is very cool

1. So, how do we translate its re.compile into python?
2. them how to move it to at the end of |R and before next |H

3. I can almost remove all numbers (delete 0-9) and start new numbering

##
>>> multiLines = '''This (as you
... can see) is multilined.'''
>>> multiLines.splitlines()
['This (as you', 'can see) is multilined.']
>>> ' '.join(multiLines.splitlines())
'This (as you can see) is multilined.'
>>> # the above is one line and much easier to handle now.
##


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.778 / Virus Database: 525 - Release Date: 10/15/2004
 

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] TRULY NEWBIE - MENTOR NEEDED (fwd)

2005-11-25 Thread Danny Yoo



-- Forwarded message --
Date: Fri, 25 Nov 2005 08:59:30 -0400
From: mike donato <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: Re: [Tutor] TRULY NEWBIE - MENTOR NEEDED

Dan, what I meant was that the program does not run. Why?
Thanks



From: Danny Yoo <[EMAIL PROTECTED]>
To: mike donato <[EMAIL PROTECTED]>
CC: tutor@python.org
Subject: Re: [Tutor] TRULY NEWBIE - MENTOR NEEDED
Date: Tue, 22 Nov 2005 14:46:14 -0800 (PST)



On Tue, 22 Nov 2005, mike donato wrote:

> Greetings, I am new student to programming and am experimenting with
> PYTHON.  From what I have read, seems to be a very versatile language.
> In the following excercise I am getting an error
>
> class String(str, Object):

[class definition cut]
>
> Traceback (most recent call last):
>   File "", line 11, in -toplevel-
> class String(str, Object):
> NameError: name 'Object' is not defined


Hi Mike,

The error is true: Python doesn't know of any class named 'Object'.  What
you may be looking for is the 'object' class (lowercase 'o').

Good luck!



_
FREE pop-up blocking with the new MSN Toolbar - get it now!
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/

#
# This file contains the Python code from Program 4.5 of
# "Data Structures and Algorithms
# with Object-Oriented Design Patterns in Python"
# by Bruno R. Preiss.
#
# Copyright (c) 2003 by Bruno R. Preiss, P.Eng.  All rights reserved.
#
# http://www.brpreiss.com/books/opus7/programs/pgm04_05.txt
#
class Array(object):

   def __len__(self):
   return len(self._data)

   def setLength(self, value):
   if len(self._data) != value:
   newData = [ None for i in xrange(value) ]
   m = min(len(self._data), value)
   for i in xrange(m):
   newData[i] = self._data[i]
   self._data = newData

   length = property(
   fget = lambda self: self.__len__(),
   fset = lambda self, value: self.setLength(value))

   # ...


___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Modifying Source Code while Program is Running

2005-11-25 Thread Kent Johnson
Ed Singleton wrote:
> Can a python program change a class, change all the objects already
> created by that class and save the modified class definition, so that
> if the program were restarted it would return to exactly the same
> state? (assuming all objects were saved to a database or somesuch).

I asked on comp.lang.python about persisting classes. David Wahler posted an 
interesting solution. You can read the thread here:
http://groups.google.com/group/comp.lang.python/browse_thread/thread/10a03f094303a91c/7d65bd344d4e0063?hl=en#7d65bd344d4e0063

(David's reply hasn't appeared on Google as I post this but it should be there 
eventually...)

Kent
-- 
http://www.kentsjohnson.com

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] TRULY NEWBIE - MENTOR NEEDED (fwd)

2005-11-25 Thread Danny Yoo

> Dan, what I meant was that the program does not run. Why?


Hi Mike,

We don't have enough information.  I have to ask more questions to have a
better idea what's going on.  Also, please send your replies to the tutor
list: don't send them to me directly.

What do expect to see when your program runs?  Are there other programs
that you've run that do things?  What do you mean when the program doesn't
run?  What are you doing to "run" the program?


The class definition that you're showing us looks bizarre as a first
program example.  If you're really starting from scratch, I'd recommend
starting with an easier tutorial.

If you're starting from scratch, you may want to go through one of the
tutorials in:

   http://wiki.python.org/moin/BeginnersGuide/NonProgrammers

I have no familiarity with the book you quote, but from the web site:

http://www.brpreiss.com/books/opus7/

and from the statement in the foward here:

http://www.brpreiss.com/books/opus7/

the author explicitely says that the book's audience is experienced
programmers!  It won't go out of it's way to talk about issues that affect
beginner programmers, because that book expects you to already know basic
Python programming.  That is why I'm encouraging you to look at another
tutorial from the Non Programmers section.


Good luck to you!

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] TRULY NEWBIE - MENTOR NEEDED (fwd)

2005-11-25 Thread Danny Yoo


> I have no familiarity with the book you quote, but from the web site:
>
> http://www.brpreiss.com/books/opus7/
>
> and from the statement in the foward here:
>
> http://www.brpreiss.com/books/opus7/

Gaaa, stupid HTML frames... *grin*  Sorry, that second URL was supposed
to be:

http://www.brpreiss.com/books/opus7/html/page22.html#SECTION00140

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


[Tutor] how to read a non english text file

2005-11-25 Thread enas khalil
hello everyone   still my question about if i could read and process  a non english language text file using python    
		 Yahoo! Music Unlimited - Access over 1 million songs. Try it free.___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] how to read a non english text file

2005-11-25 Thread Kent Johnson
enas khalil wrote:
> hello everyone
> still my question about if i could read and process  a non english 
> language text file using python

To read the file use
import codecs
data = codecs.open('myfile.txt', 'r', 'cp1256').read()

This will give you a Unicode string in data. I don't know how to use NLTK to 
tag this, I hope this will get you started.

Kent

-- 
http://www.kentsjohnson.com

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Trouble with classes - Pypeg again

2005-11-25 Thread Kent Johnson
->Terry<- wrote:
> -BEGIN PGP SIGNED MESSAGE-
> Hash: SHA1
> 
> 
> Ok, I've got my peg game roughed out and I'm having
> problems.
> 
> The new code is at:
> 
> http://members.socket.net/~tvbare/pypeg/new_pypeg.py>
> 
> I'm confused as to why. The whole OO picture
> has my head reeling, but I thought I had some
> grasp of the basics. Now I'm not so sure. d:^)

Terry,

I can see you're struggling with the OO parts of this program. I'll try to 
help...

Classes group state (instance variables) and behaviour (methods). When 
designing the classes for a program, look for state and behaviour that belong 
together - groups of functions that act on common data.

In your case, I think the fundamental object is a hole. A hole has a location 
and it may or may not contain a peg. Those are it's state. A hole has 
behaviour, in the OO sense, anyway - there are things you want to do with a 
hole. You can draw it, ask it if it has a peg in it, ask it if a mouse click 
falls inside it.

So what would this look like?

class Hole(object):
  # Load peg image. This is a class attribute, not an instance attribute
  pegImage = pygame.image.load('peg.png')

  def __init__(self, location):
self.location = location
self.hasPeg = False

  def draw(self, screen):
''' A hole knows how to draw itself. '''
if self.hasPeg:
  screen.blit(Hole.peg, self.location)  # Blit it.

  def isClicked(self, click):
return self.location[0] <= click[0] <= self.location[0] + 19 \
and self.location[1] <= click[1] <= self.location[1] + 19


OK, that looks like a pretty handy Hole. 

Notice that this Hole doesn't really correspond very well to what we call a 
hole in the real world. Real holes have locations and they may contain pegs, 
but they don't know how to do anything. That's OK. In the program, any 
functions that use the state of a hole belong in the Hole class.

What else do we need? Well, we need some place to put a bunch of Holes and do 
stuff with the collection, like draw them all and hit test them all. This 
sounds like another class, let's call it Board. The state of a board is just 
the list of Holes it contains. The behaviours of a Board are to draw itself, to 
find which Hole a click falls on (if any), to check for valid moves and to 
perform the moves by changing the state of its Holes. That's a lot, I'll just 
start it:

class Board(object):
  # Load board image
  boardImage = pygame.image.load('board.png').convert_alpha()

  def __init__(self):
# create a list of Holes
holeCoords = [[141, 41],
[114, 91], [164, 91],
[91, 141], [141, 141], [191, 141],
[64, 191], [114, 191], [164, 191], [214, 191],
[41, 241], [91, 241], [141, 241], [191, 241], [241,241]]
holes = [ Hole(coords) for coord in holeCoords ]

  def draw(self, screen):
screen.blit(Board.boardImage, (0, 0))# Blit the board
for hole in self.holes:
  hole.draw(screen)
pygame.display.update() # Refresh display.

See how Board lets the Holes take care of drawing themselves? The Hole is a 
useful abstraction - from the outside we don't have to worry about how it 
works, we can just use it.

continuing with class Board...

  def getClick(self, click):
''' Find which Hole was clicked, if any '''
for hole in self.holes:
  if hole.isClicked(click):
return hole
return None

Again, see the division of labor? The Board is just a container, it just works 
with Holes from the outside, it is the Hole that knows whether a click is in it 
or not.

Notice how simple and self-contained each method is. This is another hallmark 
of good OO design. The methods that operate on data are in the same class as 
the data. Each class has a simple job to do; working together they get a 
complicated job done.

I hope this helps; obviously there are many more methods to write in Board, and 
you will still have some kind of top-level driver that creates a board and runs 
a game; maybe you will discover that a Game class is useful for creating a 
Board, getting moves and running the game, or maybe a standalone function or 
two will do the job just fine.

Kent

PS I haven't tested any of this!

___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] how to read a non english text file

2005-11-25 Thread Basem Narmok
enas khalil wrote:

>hello everyone 
>  still my question about if i could read and process  a non english language 
> text file using python 
>  
>
Hi Enas,
I think you mean Arabic language, yes of course you can, and I think you 
should see the Duali project:
http://www.arabeyes.org/project.php?proj=Duali

Duali is a simple Arabic spell checker written in Python, Duali will be 
a good start if you are interested in Arabic language, It will be hard 
if you are a newbie but try and see the code you will learn a lot.
you can see a screenshot for Duali running at : 
http://art.arabeyes.org/duali/duali_0_1_1
What you need to learn is Unicode with Python, Duali is a very good example.

Good Luck

Basem Narmok
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] lil help please - updated (fwd)

2005-11-25 Thread Chris or Leslie Smith
| The logic is so good so far. However, How do we move the (...) in |H
| to end of |R and before next |H

Maybe you are thinking too literally about the moving of the parenthetical item 
from the |H to the end of the |R.  Let's say you have the 3 chunks of 
information in variables h, f, and r:

###
>>> h='This (you see) is the header.'
>>> f='The Book'
>>> r='cool'
###

If you could break h apart into 3 pieces, the "This ", the "(you see)", and " 
is the header." and call them h1, h2, and h3 then you could add h1 and h3 back 
together (that's your new value of h) and add h2 to r as your new r:

###
>>> h1='This '
>>> h2='(you see)'
>>> h3=' is the header'
>>> h=h1+h3
>>> r=r+'\n'+h2  #the \n puts the parenthetical on a new line
>>> print h
This  is the header
>>> print r
cool
(you see)
###

(There's a double space left over at the place where the h1 and h3 were joined 
which is something you might want to fix before you add them back together. The 
string method ".strip() is nice for getting rid of leading and trailing space 
on a string. Here's an example:

###
>>> print s
   space before and after is gone  
>>> print s.strip()
space before and after is gone
###
)

What would help maintain the spirit of the tutor list is if you would ask 
specific questions about problems that you are having getting the script to do 
what you you want or clarifications about how something is suppose to work. 
Right now you have a task that is defined but you are asking general questions 
about designing the program, not specific questions about the *python* related 
problems. 

Rather than sending or posting the script you have, why not just post the 
specific problems you are running into? 

Thanks,
/c
___
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor