<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 <val> (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 <val> 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 <obj> parsing actually broke the handling of property constructions like "$pub.rooms"; this has been fixed. <li>bug fixed in parsing of <val>; 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><obj> now matches things like "clock.description" (i.e., property specs that don't start with # or $) <li><obj> 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>