2004-11-09 Kirk Haines <khaines@enigo.com>
	* src/DynamicElements.rb, src/Form.rb, src/Tag.rb: A binding that is
		not one of action, item, list, or key can now be used to insert
		dynamic attributes into a generated tag.  This is a 1/2 step.  The other
		1/2, which is not yet complete, will change handling of attributes on
		tags so that they are treated as Associations, like in a binding.  If the
		value of an attribute starts with an @ character, it will be a PathAssociation,
		otherwise it will be a LiteralAssociation.
	*	src/TemplateParser.rb: - is now a valid character in attribute names.
	*	src/Application.rb: Somewhere along the line Application was edited
		so that it will no longer descend into dot dirs when looking for
		components.  Also changed it so that it won't even try to descend
		into dirs with a lowercase letter as the first character.
		
2004-10-08 Kirk Haines <khaines@enigo.com>
	* src/Component.rb: Added a couple aliases for pageNamed,
		componentNamed and component_named.
	* src/Email.rb: New Iowa class.  This is a component subclass intended
		to be used for components that represent emails.  Use them to make
		it very easy for your application to send email.  This is usable, but
		not complete as there will be MIME support builtin so that one can
		trivially build multipart MIME emails.
		
2004-09-22 Kirk Haines <khaines@enigo.com>
	*	src/Session.rb: Added a notes() accessor that provides access to a
		hash that persists with the session.  This can be used for storing
		data that is supposed to be accessible throughout the application
		without having to explicitly pass data from object to object.
		
	*	Happy birthday to Xander Ryan Haines, who would have been 6 years
		old today.

2004-09-13 Kirk Haines <khaines@enigo.com>
	*	mod_iowa.rb: Fixed a bug with the translation handler not returning
		an integer in all cases.

2004-08-18 Kirk Haines <khaines@enigo.com>
	*	iowa_webrick.rb: The code will now check for the existence of the
		docroot and the cgiroot before attempting to use them.  If the docroot
		directory does not exist, it is set to nil, and if the cgiroot does not
		exist, the CGI handler is not mounted.  If neither directory exists,
		WEBrick + Iowa will still serve Iowa content happily.
	*	src/Application.rb: Fixed a bug with the .bnd file handling.

2004-08-16 Kirk Haines <khaines@enigo.com>
	*	iowa_webrick.rb, src/HTTPServer.rb: Revamped iowa_webrick.rb completely.
		It is not backwards compatible with the first version, but the changes
		completely streamline using Iowa with webrick.  One now uses a startup
		script that is identical to what one would use with a traditional
		standalone Iowa app running in conjuction with Apache or FCGI, except
		that one requires 'iowa_webrick' instead of 'iowa'.
	*	install.rb: Added a line for iowa_webrick.rb.
	*	src/ISAAC.rb: Cleaned it up a little bit.  ISAAC.rb is now available as
		a seperate library, too.
	*	README-WEBRICK: Updated the instructions to explain how to convert
		the iowa_webrick.cnf usage from the last release to the current, more
		streamlined variety.
		
2004-08-15 Kirk Haines <khaines@enigo.com>
	*	src/Application.rb: Finished adding support for seperating the bindings
		into .bnd files.  Also made it so that one can include comment lines
		and can have multiple binding blocks in a file, for easier visual
		organization.
		
2004-08-11 Kirk Haines <khaines@enigo.com>
	*	src/Session.rb: Fixed a bug with inline content generation.
	*	src/Session.rb, src/Application.rb: made it so that age based expiration
		can easily be setup in the subclasses and/or controlled by code, but that
		size based expiration is still the default.

2004-08-10 Kirk Haines <khaines@enigo.com>
	*	src/Session.rb, src/LRUCache.rb: Enhanced the inline content generation
		so that the content so generated is tied to the page it was generated
		for.  It will persist until the page is purged from the cache, and will
		be purged with the page.
	*	src/LRUCache.rb: The LRU cache was a simple cache with a fixed size.
		It can now also be used as a cache with a dynamic size where cache
		items are expired by age.  The cache still has a hard maximum limit
		on size, but within this hard limit, the actual size of the cache will
		vary depending on the age of the content.  i.e. one might want to
		allow the session cache to keep sessions for an hour since it was
		last used, but to only allow a maximum of 50 sessions, regardless
		of age.  If there were less than 50 sessions, any session with an
		age of more than an hour would be fair game to be expired.  If the
		session count were to exceed 50, on the other hand, the oldest
		sessions, regardless of age, would be expired until the session
		count was at 50.
2004-08-08 Kirk Haines <khaines@enigo.com>
	*	src/Session.rb: Added capability, based on some code from
		David Naseby, for Iowa to generate content such as images inline
		and return a URL that can be used to access this generated content.
		
2004-08-07 Kirk Haines <khaines@enigo.com>
	* iowa_webrick.rb, src/HTTPServlet.rb, src/WEBrickServlet.rb: Iowa can
		now be used in conjunction with WEBrick.  These three files provide
		a WEBrick HTTPServlet that can also return Iowa generated content
		in addition to the regular static and CGI content types that WEBrick
		supports.  It could also be used with other WEBrick servlets, as well.

2004-08-04 Kirk Haines <khaines@enigo.com>
	*	src/Request.rb: Added support for multipart/form-encoded data and
		file uploads.  Uploaded files get passed into the Iowa program within
		Iowa::FileData objects.
		
	*	src/Form.rb:  Fixed a couple of small bugs that were being excited by
		the multipart/form-data stuff.
		
	*	iowa.rb: Fixed the main issue that prevented Iowa from running under
		Windows.

2004-05-20 Kirk Haines <khaines@enigo.com>
	*	iowa.rb: Leaving all of the threads at the same priority meant that
		the main thread got more timeslices than it needed, while the thread(s)
		building content were getting robbed of time that they could use.
		Content handling threads now have higher priority.  Simple tests show
		somewhere around a 25% increase in throughput from this one change.
		
2004-05-17 Kirk Haines <khaines@enigo.com>
	*	Uh, everything: Bad me.  Bad.  Somewhere I dropped the habbit of
		recording changes for a few months.  There have been a bunch of them
		all through the codebase to address bugs and to expand functionality.
		
2004-02-08 Kirk Haines <khaines@enigo.com>
	*	src/TemplateParser.rb: Made a change to the parsing of a template to
		deliver a small performance enhancement.  We no longer use make use
		of post_match(), instead keeping an index of where we are inthe parsing
		of the data and performing our matches on a slice of the string.  This
		seems to eliminate some copying and moving of data in memory and
		delivers a small but noticable difference in parsing speed of big, ugly
		files.
		
2004-02-07 Kirk Haines <khaines@enigo.com>
	*	src/Application.rb: The hardcoded default application had bugs that
		were preventing it from being parsed correctly.
		
2004-02-05 Kirk Haines <khaines@enigo.com>
	*	src/Context.rb; src/Form.rb; src/TemplateParser.rb: Finally added
		radioboxes to the supported input field types.  It is about time!
		
2004-02-04 Kirk Haines <khaines@enigo.com>
	*	src/Application.rb; src/Client.rb; src/Component.rb; src/Element.rb:
		A few 1.8.x warning cleanups.  Added significant new functionality
		that lets the docroot contain subdirectories that have components
		within them, as well.  The naming of the subdirectories creates the
		class hierarchy of the components.  Also set it up so that all user
		defined components go under the Iowa::Applications::Content_Classes
		hierarchy.  I was concerned about potential collisions of user defined
		classes with Iowa internals with everything happening at the
		Iowa::Application level.
	*	mod_iowa.rb: Cleaned up a couple 1.8.x warnings.
		
2004-02-03 Kirk Haines <khaines@enigo.com>
	*	src/Session.rb; src/LRUCache.rb: trivial spacing cleanup.
	*	examples/url_mapping/*:  Added this code.  Implements
		URL mapping.
	*	examples/url_mapping/Main.iwa: There was gross CPU
		cycle wasting error in this.  Fixed it.
		
2004-01-29 Kirk Haines <khaines@enigo.com>
	*	src/Component.rb; rc/Context.rb: Misc bugfixes
	
2004-01-25 Kirk Haines <khaines@enigo.com>
	*	src/BindingsParser.rb: Added a bit of clarifying commentary.
	
2004-01-23 Kirk Haines <khaines@enigo.com>
	*	src/Application.rb; src/Component.rb; src/Session.rb:
		Changed reloadModified so that it has two selectable modes of
		operation.  Instead of scanning the mtimes of every file in the
		docroot every time a request is handled, the default mode of
		operation now only scans a single named file.  This is 'singular'
		mode.  The old scan everything mode is 'plural' mode and is
		still supported, as well.  Added method to Application to enable
		changing of modes, and added code in Session and Component
		so that, if running in singular mode, Components become
		responsible for telling the application to check for changes in
		them prior to handling the request or response.  Overall, this
		should be faster when an application has a lot of files in it.
	*	src/Application.rb: changed defaultScript() so that is a file named
		DefaultScriptFile.iwa exists in the Iowa docroot, that file will be
		used for the default script file instead of using the very basic
		hardcoded one.  If the file does not exist, fall back to the very
		basic hardcoded one.  The purpose of this is to allow one to
		provide a default that provides some set of more advanced
		services to the templates.  For example, one might setup a default
		script file that imports header and footer components, provides some
		methods for reporting current time, checks for a cookie and doesn't
		show the content unless the cookie exists, etc....
			 
2004-01-22 Kirk Haines <khaines@enigo.com>
	*	ToDo: More additions.
	*	iowa.cgi: Updated so that it works with the current Iowa library
		and added better explanatory comments.
	*	iowa.rbx: Mostly just added comments explaining what this is.
	*	src/Client.rb: Added comments for rdoc's usage. Also fixed
		initialize() so that it works without passing an Apache::Request
		to it, and added code so that printHeaders() prints all headers
		received from the servlet in the case where the execution
		environment is not mod_ruby. 
	*	src/Request.rb: Fixed initialize() so that it works without passing
		and Apache::Request to it.
	*	ChangeLog: Revised/fixed entries from the past week or so
		after realizing that they weren't following the right format. Duh.
	*	VERSIONS: Started entering the major changes that have occured
		since 0.15 was released.
				
2004-01-21 Kirk Haines <khaines@enigo.com>
	*	LICENSE: Added myself to the copyright notice.
	*	README: Rewrote much of the content to reflect where Iowa is
		at and what it does right now, versus two years ago.
	*	ToDo: Added a bunch of my current ToDo items, generally for
		enhancing the general capabilities of Iowa.
	
2004-01-14 Kirk Haines <khaines@enigo.com>
	*	examples/application_stats/: Basic but full functioning widget, now.
		Lets one see app activity, contents of session and page caches, etc...
	*	src/Application.rb; src/Sessiong.rb: Concurrent with the above, added
		a set of changes to make all of the above information available.

2004-01-12 Kirk Haines <khaines@enigo.com>
	*	For some reason, I quit updating this file last year.  Not Smart.
		In that time there have been a bunch of bug fixes, the LRUCache class
		has been fixed (it was not properly clearing it's old values, resulting
		in a bad memory leak), database connection pool added, some unit tests
		written, and a bunch of other things that I am forgetting right now.
	*	examples/application_stats/: Added ApplicationStats and SessionsStats
		to encapsulate keeping/returning usage statistics for application and sessions.

2003-03-06 Kirk Haines <khaines@enigo.com>
	*	src/Tag.rb: Changed value quote from ' to " since
		CGI::escapeHTML escapes double quotes, but not single.
	*	src/DbPool.rb: Added begin/ensure clauses to getConnection
		block handling to make sure that the connection is always
		freed, even if there is an error in the block.

2003-02-23 Kirk Haines <khaines@enigo.com>

	*	A moment of silence for Xander Ryan Haines, who died
		4 years ago today at the age of 5 months, of complications
		from strep pneumo meningitis.

	*	iowa.rb: Bug fixes to the improved logging.

	*	iowa.rb: Iowa applets now take a config file that
		defines the socket to connect to and logging options.

	*	src/Application.rb: Logging/exception bug fixes.

	*	src/Session.rb: Logging/exception bug fixes.

	*	mod_iowa.rb: Bug fixes

	*	src/Client.rb: Logging/exception bug fixes.

2003-02-18 Kirk Haines <khaines@enigo.com>

	*	install.rb: Added lines to install the Apache module.

2003-02-11 Kirk Haines <khaines@enigo.com>

	*	iowa.rb: Added code to support TCP sockets in addition to
		Unix sockets.

	*	src/Client.rb: Added code to support TCP sockets in addition
		to Unix sockets.

	*	ToDo: Added line item about framesets.  Removed item about TCP
		sockets.  Edited logging item.

2003-02-10 Kirk Haines <khaines@enigo.com>

	*	ToDo: A simple log of things that I'd like to do.

2003-02-05 Kirk Haines <khaines@enigo.com>

	*	src/ISAAC.rb: Added some basic documentation.

	*	tests/TC_ISAAC.rb: An initial test suite for the ISAAC random
		number generator.

	*	test/TC_Tag.rb: An initial test suite for the Tag class.

2002-11-10 Kirk Haines <khaines@enigo.com>

	*	src/Application.rb: Changed the randomSession method to utilize
		ISAAC generated random numbers plus current time, including usecs,
		to make the session ID _extremely_ unlikely not to be unique.

	*	src/Context.rb: Changes to accomodate new session ID + changed
		the format of the sessionID, requestID, and actionID in the URL
		so that it's not quite so aestetically unpleasing.

2002-11-10 Kirk Haines <khaines@enigo.com>

	*	src/Client.rb: Added a couple of lines to make sure that
		Pragma: no-cache is set.

	*	src/ISAAC.rb: A basic implementation of ISAAC.

2002-11-7 Kirk Haines <khaines@enigo.com>

	*	iowa.rb: Removed a diagnostic print statement that got into the
		committed code.

	*	src/Form.rb: Made changes so that the Form processing code can
		access the form attributes stored in the Iowa::Request object that
		the Context object holds.

	*	src/Request.rb: Added ability to retrieve POST or PUT data
		from mod_ruby's $stdin, parse out the key/value pairs, and stuff
		them into the params attribute of the Request object.  Stuff the
		original data into @content.

2002-11-3 Kirk Haines <khaines@enigo.com>

	*	src/Client.rb: added untainting of the socket path variable when
		initializing the object.

	*	mod_iowa.rb: Added this file.  It is a mod_ruby handler to dispatch
		web server requests to an Iowa application daemon.  This is the first
		draft.  It passes some basic tests, but probably still has bugs.

	*	src/Request.rb: Fixed problem where, in non mod_ruby execution
		environment, @args was receiving a hash instead of a String.
		@args now contains a string regardless of execution environment.
		Added a @params atribute to the Request object that always contains
		a Hash of CGI parameters.

2002-10-15 Kirk Haines <khaines@enigo.com>

	*	src/Context.rb: Fixed URL format so that various ids are seperated
		by '__' instead of '/'.

2002-09-23 Kirk Haines <khaines@enigo.com>

	*	iowa.rb: Made changes so that the code uses the Iowa::Request class.

	*	src/Request.rb: Bug fixes.

	*	src/Client.rb: Bug fixes.

	*	src/Context.rb: Minor changes so that it works with Iowa::Request.

	*	iowa.rbx: Skeleton of a mod_ruby program to invoke an Iowa app.

2002-09-21 Kirk Haines <khaines@enigo.com>

	*	src/Request.rb: Added code to allow an Iowa::Request to be populated
		with data even when created within a normal CGI environment.

	*	src/Client.rb: Library that encapsulates the communications tasks
		between the Iowa client and the Iowa server.

2002-09-19 Kirk Haines <khaines@enigo.com>

	*	src/Request.rb: A serializeable container for most of the data
		from an Apache::Request object; mimics Apache::Request's API.

2002-09-16 Kirk Haines <khaines@enigo.com>

	*	src/DbPool.rb: A database connection pool for Ruby

	*	tests/TC_DbPool.rb: A Test::Unit test set for DbPool

2002-08-22 Kirk Haines <khaines@enigo.com>

	*	iowa.rb: Added basic rdoc style documentation

	*	iowa.rb: Initialization now calls Dir.getwd in order to explicitly
	  determine the current cwd

	*	iowa.rb: Added startDaemon to do common daemonization tasks

	*	utils/: New directory to store misc Iowa related utility items

	*	utils/iowa_apps: Added an rc script for stopping and starting
	  Iowa apps.

	*	src/DynamicElements.rb: Added basic rdoc style documentation

	*	src/Element.rb: Added tiny bit of basic rdoc style documentation

2002-08-21 Kirk Haines <khaines@enigo.com>

	*	src/Component.rb: Added basic rdoc style documentation

2002-08-20 Kirk Haines <khaines@enigo.com>

	*	src/TemplateParser.rb: Add basic rdoc compatible documentation

	*	src/TemplateParser.rb: Use CGI::unescapeHTML to decode the
	  attribute values within a tag

	*	src/Tag.rb: Add basic rdoc compatible documentation

	*	src/Tag.rb: Uses CGI::escapeHTML to encode attribute values
	  within a tag

	*	src/Session.rb: Add basic rdoc compatible documentation

	*	src/Session.rb: Add accessor to allow an app to go through its
	  session to get at the context object

	*	src/PageStore.rb: Add basic rdoc compatible documentation

2002-08-19 Kirk Haines <khaines@enigo.com>

	*	src/Application.rb: Add basic rdoc compatible documentation

	*	src/Application.rb: Regexp to replace \cM characters with newlines

	*	src/BindingsParser.rb: Add basic rdoc compatible documentation

	*	src/BindingsParser.rb: Regexp to trim trailing whitespace from
	  binding values

2002-06-14  Dave Thomas  <Dave@Thomases.com>

	*	various: Fix up some warnings when running with -d

2002-06-13  Dave Thomas  <Dave@Thomases.com>

	*	src/DynamicElements.rb: Add <unless> tag (opposite of <if>)

	*	install.rb (File): Use File.install rather than File.cp

	*	Application.rb: Handle mtimes for both .iwa and .html files
	

