<html><head><title>
POO: What's New
</title></head><body><center><h1>
What's New with POO?
</h1>
</center>

<p><strong>September 15, 1998: Version 1.0b10 </strong><br>
<ul>
<li>modified <a href="poosock.py">poosock.py</a> to work with brain-damaged Win95 Telnet client
<li>also made it more responsive to "shutdown" command (boots
players before saving database, instead of after)
<li>also made it break a previous connection, if you log into the same account a second time
</ul>

<p><strong>April 24, 1998: Version 1.0b9 </strong><br>
<ul>
<li>removed spurious include of "regexp" in
	<a href="poosock.py">poosock.py</a>
</ul>

<p><strong>April 20, 1998: Version 1.0b8 </strong><br>
<ul>
<li>updated <a href="poo.py">poo.py</a> to work under Python 1.5
(should still work under Python 1.4, I believe).
<li>moved to new home on
<a href="http://www.strout.net/">www.strout.net</a>
</ul>

<p><strong>October 24, 1997: Version 1.0b7 </strong><br>
<ul>
<li>updated <a href="poo.py">poo.py</a> to fix a crashing bug
involving the custom editor feature; also changed the show()
function such that the room to receive the general message is
now the location of the object specified by the broadcast
parameter (a key to the 'parties') list
<li>updated <a href="poosock.py">poosock.py</a> to fix a simple
error which could cause a crash if a certain login string is received
</ul>
<i>(Whew! Nearing a final release now!)</i>

<p><strong>August 14, 1997: Version 1.0b6 </strong><br>
<ul>
<li>updated <a href="poo.py">poo.py</a> to prevent crashes during
saves (unpickleable types are now set to None upon saving)
<li>updated <a href="poodirect.py">poodirect.py</a> to add a "Set
Treasury Amount" option
<li>significantly improved socket handling in 
<a href="poosock.py">poosock.py</a>
<li>added a <a href="credits.html">POO Credits</a> page in a 
feeble attempt to give attribution to the many POO contributors
</ul>

<p><strong>August 3, 1997: Version 1.0b5 </strong><br>
<ul>
<li>updated <a href="poo.py">poo.py</a> to enable Users to receive 
update() calls
<li>updated <a href="poodirect.py">poodirect.py</a> to add a "Read
commands from file" option
</ul>

<p><strong>August 2, 1997: Version 1.0b4 </strong><br>
<ul>
<li>updated <a href="msg.py">msg.py</a> to handle "doesn't", "isn't", etc.
<li>updated <a href="poo.py">poo.py</a> to fix a bug or two with custom editors
<li>added <a href="lib/editors">$pub.editors</a> to the <a href="lib/index.html">library</a>
<li>made <a href="poosock.py">poosock.py</a> more robust to network problems
</ul>

<p><strong>June 29, 1997: Version 1.0b3 </strong><br>
<ul>
<li>updated <a href="bootstrap.txt">bootstrap.txt</a>: cleared 'x' bit
	on most functions, fixing a security hole pointed out by
	Jeff Epler; also made $thing.broadcast more robust
<li>updated <a href="poo.py">poo.py</a> to make show() handle strings
	in the 'parties' dictionary, and to make getCmdDef() return
	all defined commands when passed a null string for 'verb'
	(also at Jeff's suggestion)
<li>fixed a bug in <a href="msg.py">msg.py</a> that caused it to fail
	on exceptional verbs like "is"
</ul>

<p><strong>June 28, 1997 </strong><br>
<ul>
<li>started <a href="listserv.html">POO mailing lists</a>
</ul>

<p><strong>June 10, 1997: Version 1.0b2</strong><br>
<ul>
<li>changed <a href="poo.py">poo.py</a> to fix a bug with permission
	checking (especially noticable on directories), and to properly
	set permissions within startEdit()
<li>updated <a href="tostr.py">tostr.py</a> to work with tuples
<li>fixed the <a href="poo.dat">poo.dat</a> and 
<a href="bootstrap.txt">bootstrap.txt</a> files to set $dir.immobile = 0,
so that users can make their directories immobile if they wish
</ul>

<p><strong>June 5, 1997</strong><br>
<ul>
<li>added the <b><a href="lib/index.html">POO Library</a></b>
	of objects & functions
<li><b><a href="http://starship.skyport.net/~jstrout/">Starship POO</a>
	is now open!!!</b>
</ul>

<p><strong>May 21, 1997: Version 1.0b1</strong><br>
<ul>
<li>reworked the code for the build-in editor; added support for
	alternate editors and post-edit callbacks
<li>fixed a bug that allowed anyone to override an inherited property
<li>added support for parsing "components" (e.g., "Bob's hat")
<li>began an extensive revision of the 
	<a href="pooref.html">POO Programmer's Reference Manual</a>
</ul>
This is the first developer release of <strong>POO version 1.0</strong>.
I'm declaring a feature freeze at this point; no new features will be 
added, and existing features will not be significantly changed, until
all bugs have been discovered and fixed.  At this point, the core
database needs a bit of work as well to take advantage of the latest
features.  Finally, note that <b>Althor is gone</b>; many thanks to
Zack Roadhouse for making it available as long as he could.  With the
loss of Althor, both the beta-test POO server and the POO mailing list
are temporarily out of commission.  Arrangements are being made for a
new host -- please stay tuned!


<p><strong>April 30, 1997: Version 0.9.3</strong><br>
Updates to <a href="poo.py">poo.py</a> effect the following:
<ul>
<li>functions now have the following built-in global variables:
	"super", "caller", "user", and "permHolder"
<li>errors in an update() function are now reported to the object's
	owner; and if errors persist, its .wantsUpdates is set to 0
<li>a bug was fixed in the calling of an object's update() function
</ul>


<p><strong>April 28, 1997: Version 0.9.2.3</strong><br>
Fixed yet another bug in parsing of &lt;val&gt; (sigh).
Fix involves update to 
<a href="pooparse.py">pooparse.py</a> and
<a href="qsplit.py">qsplit.py</a>.  Hopefully, all is well with
the parser now!

<p><strong>April 16, 1997: Version 0.9.2.2</strong><br>
A minor bug fix (typo correction) in 
<a href="pooparse.py">pooparse.py</a>.

<p><strong>April 14, 1997: Version 0.9.2.1</strong><br>
Oops -- there remained a bug in the handling of &lt;val&gt; when
quotes were involved.  This is now fixed (in 
<a href="pooparse.py">pooparse.py</a>).

<p><strong>April 13, 1997: Version 0.9.2</strong><br>
More bug fixes, this time in
<a href="poohelp2html.py">poohelp2html.py</a>, as well as
<a href="pooparse.py">pooparse.py</a> and
<a href="poosock.py">poosock.py</a>:
<ul>
<li>previous fix to &lt;obj&gt; parsing actually broke the handling
of property constructions like "$pub.rooms"; this has been fixed.
<li>bug fixed in parsing of &lt;val&gt;; now properly handles
lists enclosed with square brackets or parentheses.
<li>misc. changes to <a href="poosock.py">poosock.py</a> should
eliminate some (hopefully all!) potential crashes.
<li><a href="poohelp2html.py">poohelp2html.py</a> now correctly
handles keywords surrounded by punctuation.
</ul>

<p><strong>March 29, 1997: Version 0.9.1</strong><br>
A number of bug fixes in <a href="poo.py">poo.py</a> and
<a href="pooparse.py">pooparse.py</a>:
<ul>
<li>&lt;obj&gt; now matches things like "clock.description"
	(i.e., property specs that don't start with # or $)
<li>&lt;obj&gt; now handles object names that contain spaces,
	dashes, etc. (but must still start with a letter or number)
<li>function errors are now reported with the name of the function
	where they occurred, rather than the calling function
<li>"it" is supported once again (e.g., "look at staff", "get it")
<li>an error message in the transfer() built-in function has been
	corrected
</ul>

<p><strong>March 29, 1997: Version 0.9.0</strong><br>
I'm very close to declaring a feature freeze for version 1.0.
A new module (<a href="msg.py">msg.py</a>) has been contributed by
Amit Patel, and a new function (<tt>show()</tt>) has been added
which uses it to simplify output messages.  Another new module
(<a href="marksub.py">marksub.py</a>) has also been added; it
adds <b>markup codes</b> for things like bold, italics, etc. for
clients that support it.  (See help on @markup for details.)
The <a href="http://althor.netspace.org/~jstrout/">Althor server</a>
will be rebuild from scratch using the new code and core database.

<p><strong>March 24, 1997</strong><br>
The POO parser system has been completely redone, and is significantly
more sophisticated.  Functions are no longer directly invoked as
commands; instead, a special command structure (created with @cmd and
deleted with @delcmd) is used to define command syntax, and indirectly
invoke the appropriate function.  This is a very powerful and flexible
mechanism, and it also makes error-trapping easier.  In addition,
functions now have an "x" flag; if it is set to 0, then the function
cannot be invoked from Python code, but only directly by a command.
<p>
I've also significantly enhanced and fixed up the core database (and
the bootstrap file from which it is generated).  As soon as I get Amit's
messaging system rolled in, POO will begin to stabilize at last.

<p><strong>March 2, 1997</strong><br>
The <a href="http://althor.netspace.org/~jstrout/">Althor POO test 
site</a> has resulted in rapid changes to numerous to enumerate.
Today, the POO source files have been updated, a clean new core
database has been posted (along with its 
<a href="bootstrap.txt">bootstrap file</a>), and an
<a href="implementors.txt">Implementor's Guide</a> has been added.
POO is starting to stabilize, but further changes are expected as
testing continues.

<p><strong>February 9, 1997</strong><br>
A beta-test server has been found which will be available through May.
The site is 
<a href="telnet://althor.netspace.org:4000">althor.netspace.org 4000</a>.
Thanks to Zack Roadhouse, the kind system administrator, POO is making
progress once again.  Several minor bugs have been fixed, the core
database has been expanded, and a <a href="builders.html">Builder's
Guide</a> has been written.

<P><strong>December 13, 1996</strong><br>
A bug which was harmless under Python 1.4b3 made itself known under 1.4 
(final).  For its efforts, it has been eradicated.  The change involved a 
couple lines in the Prop class of <a href="poo.py">poo.py</a>.

<P><strong>October 1</strong><br>
All output to players is now routed through an <tt>Outfix</tt> class, 
which fixes line endings and performs word wrap on long lines.  The
line-ending fix was sorely needed for some telnet clients.  The changes 
are in <a href="poo.py">poo.py</a> and <a href="poosock.py">poosock.py</a>.

<P><strong>September 26</strong><br>
A security hole was discovered and reported by Ka-Ping Yee.  The hole 
allowed users (with programming privileges) to gain access to the 
standard <tt>__builtins__</tt> via the <tt>string</tt> module, from which 
one can wreak all sorts of mischief.  This hole and others of the same 
genre have now been eliminated by an update to <a href="poo.py">poo.py</a>.

<P><strong>September 20</strong><br>
A bug was discovered in <a href="poo.py">poo.py</a>.  For some reason,
it didn't show up under Python 1.3, but in 1.4b3 it became apparent.  
There is also a cosmetic problem with the prompt when using poodirect 
under MacPython 1.4b3; this will hopefully be fixed soon.

<P><strong>August 20</strong><br>
Main programs now display a <a href="connect.txt">connect.txt</a> file 
when you connect.  The core $login routine also attempts to display a 
poofiles:welcome.txt message when you successfully log in.  A 
$wiz.@opassword command has been added to set other character's 
passwords, and the output of poosock is now a neatly formatted log file.

<P><strong>August 19</strong><br>
A new <a href="poovsmoo.html">page detailing the differences between POO
and MOO</a> has been added.  The verb search path has been inverted.
Support for "@" has been added (gets converted to "at_"), and
out-of-character commands have been renamed appropriately.  (In
particular, be sure to now use <tt>@ex</tt> instead of <tt>ex</tt>.) The
programmer flag is now enforced.  Functions $login and $logout are now
called (if they exist) when a player connects or disconnects.  A
restricted open() function has been added; it can only access files
within a "poofiles" subdirectory.
<P>
User functions have been divided into several base objects: $user, $builder,
$coder, and $wiz, each subclassed from the previous one (in that order).
The get functions (on $user and $container) have been updated, and <tt>@ex</tt>
has been substantially improved.

<P><strong>August 16</strong><br>
The implementation of properties has been changed to plug a serious 
security hole.  This changes the structure of the database; if you have 
an old database you want to keep, <a href="mailto:joe@strout.net">ask 
me</a> for a conversion program.  It does not change the appearance or 
use of POO commands, however.

<P><strong>August 14</strong><br>
The parsing of '$' has been changed: $thing is now translated to 
"gObjlist[0].thing".  gObjlist no longer contains any string keys or 
duplicate values, and new $ references can be added simply by adding 
properties to #0.  A poo.gUpdate() routine has been added, which updates 
objects in a gUpdateList.  Objects have a CheckUpdate() method which 
should be called when a User connects or disconnects; this method adds or 
removes them from gUpdateList, as appropriate.  To demonstrate updating 
objects, the widget now worbles every thirty seconds or so.

<P><strong>August 13</strong><br>
Various bug fixes to the security routines have been implemented.  Most 
importantly, the parser was bypassing the security, allowing users to 
read or execute properties specified in their command.  New functions 
getperm and setperm (see the online help) have been added.  $user has 
been moved into the "Void" (a storehouse for generic ancestors), and the 
game is now tested with Tim (a wizard) and Lancelot (a normal user).
Other enhancements to the database: see $user.delprop, $user.look, 
$place.predesc, and $place.postdesc.  Passwords are now encrypted.
Functions whose owner is set to <b>None</b> are executed with the
permissions of the caller.

<P><strong>August 12</strong><br>
As a quick improvement, I've changed POO's output method.  Users (or 
their functions) can now use the normal Python "print" command, and its 
output will be properly routed to the user, whether they are connected 
via poodirect.py or Telnet to poosock.py.  An annoying side-effect is 
that the prompt no longer appears in the right place for network users, 
but I think we can cope with this later.  Within a function, 
"caller.tell('spam')" is now equivalent to "print 'spam'".
<P>
Also, Trevor Clarke has provided support for allowing and banning certain 
host/domains in poosock.py.
<P>
Moreover, I've tentatively finished protection for both reading and
writing properties (including functions).  And functions execute with the
permissions of their owner, as in MOO.  Much testing is needed, however.

<P><strong>August 11</strong><br>
I've begun implementing permissions on objects and properties.  Properties
are now stored via a small class structure, which keeps an owner and
permission bits in addition to a value.  Permission checks for adding and
modifying properties should be fully implemented; checks for reading
properties are not yet complete.  The core database has been converted to
the new property format.  A "delete" function has been added to completely
destroy an object.

<P><strong>August 10</strong><br>
The MOO parser has been mostly duplicated, causing rather drastic changes
in the way functions are used as verbs.  Verbs now accept a single argument,
a CmdRec; if this argument is named "cmd" in the function definition, then
its fields (caller, dobj, etc.) are automatically copied into local variables
of the same name for easy reference within the function.  For examples,
list self.edit, self.look, $exit.call, etc.  Also, since objects are now
searched for appropriate verbs, the player's "call" method has been removed,
and objects' callroutines have been renamed to simply "call."
<P>
I've also added a help system, written mostly by Trevor Clarke.  The help
database is still rather small (of course!), but it does explain the basic
object-creation commands.  I'll try to keep that up to date if syntax 
changes any further (though I don't expect to change much now).

<P><strong>August 9</strong><br>
I've started changing certain POO names and functions to follow MOO 
conventions.  In particular, "container" is now called "location".
I'm also moving certain functionality (e.g., keeping track 
of object locations) from the game methods to the engine itself.  Also in 
this update are various minor improvements, such as a ".da" editor 
command to delete all lines.

<P><strong>August 8</strong><br>
I've implemented security measures.  User commands and functions now 
execute in a restricted environment, and have access only to modules and 
functions explicitly provided by the engine.  This should make it much 
harder to hack into a host system via a POO server.
<P>
I've also added somewhat better argument parsing; in particular, quoted 
strings now get parsed as a single argument.  (Try <strong>say "This is 
cool"</strong> for an example.)  As a side-effect, you now have to quote 
the function definition when using the <strong>newfunc</strong> command.
<P>
While I was at it, I added a <strong>set</strong> command as a more 
convenient way to set properties.  For example, you could use: 
<strong>set breakfast.desc "Spam, spam, spam, spam, eggs, and 
spam."</strong> to set the description of an object called "breakfast".

<p><hr>
<address>
http://www.strout.net/python/poo/whatsnew.html
<br>Last Updated:
9/15/98
. . . . . . <a href="http://www.strout.net/info/personal/">Joe Strout</a>
</address>
</body></html>