Hi Steve,

Avi's away on holiday at the moment but I can jump in and answer some of your questions (though he know the innards way better than I do).

>On 28/07/01 at 5:35 AM Steve Tuckner wrote:
>I have been poking around in the internals of IOWA (on and off) for a
>couple of weeks and I have a few questions about it.
>
>1. Is it still an active project? I would be happy to contribute to it
>once I have a real good sense of its internal architecture. I have not
>worked with WebObjects but did wade through some of their docs.

Yes, it is very much still an active project.  We are testing the current version and figuring out what features we'd like to add.  Also, Avi was working on a Java version so we now need to back-port some of those features back.  He is now working to implement a common library in C++ to improve speed and allow bindings in Java, Ruby, etc. to re-use the same library.  Please dig through the system and either post here or email us if you have any questions.

>2. Are sub-components implemented? if so how does one have do one. An
>example might be a calender view that displays a month with events inside
>of a table.

Yup.  You just create an .html file with the component in it.  I started writing up an example but then I realized Avi's already got one.  If you look in the examples/subdemo/ directory of the Iowa archive you'll see Edit is an example of a simple sub-component.

>3. I was trying to understand how the viewGuest link in guestbook works?
>Who calls that function and with what block?

Down near the end of the Main.html file, you will find the following:

<a oid="viewGuest">@guest.last, @guest.first</a>

This defines a dynamic anchor (because it has an oid attribute).  In the case of an anchor tag, the default is to create a link that calls the method name indicated in the oid attribute.  The code inside the viewPage method:

 1. creates a new Page object based on the file Guest.html
 2. sets the guest property of the new page based on the currently selected guest (note that the binding for the "guests" list indicates that during each iteration, the current item should be stored in the "guest" property - this context is active when the link is clicked, so "guest" will point to the correct item no matter which link is clicked)
 3. yields the new page which causes that page to be displayed

>4. How and where are the URL's mapped to real things?

Mmmm... have a look at src/Context.rb in the Iowa distro.  A context object is created in Iowa.rb when a connection is received.  The URL is broken down as indicated in my next answer.  

>5. The link to each guest is
>http://192.168.4.105/iowa/guestbook/ab2KAfGHxU1E/b/1.7.2.3 How does a
>person break that down? I assume the first item after guest book is some
>sort of session identifier.

/iowa = mapped by the web server to run Iowa
/guestbook = name of Iowa application (given with Iowa.run('guestbook') line)
/ab2KAfGHxU1E/b/1.7.2.3  = context (or session) identifier

Obviously no person is actually supposed to break it down and I suspect it may end up using Cookies at some point (or rather, allow the option of using cookies) and POST forms when possible...

>6. Can a person use parameters with IOWA (ie.
>http://192.168.4.105/iowa/guestbook?parm=value)? I see they are parsed but
>not where they are used if at all?

Umm... I can't remember if you are able to parse that information manually or not... but that's sort of the wrong way of looking at things in general anyway.  I guess I can see the possibility of wanting to enter the application with some initial information...

But, once you're actually in the Iowa application, you shouldn't ever be worrying about the URLs at all.  In a sense it's unfortunate that the browser even displays them because they're just ugly and unnecessary.  As a developer, if you want to pass information, you just create the necessary forms and Page object attributes and pass the data around.  You can use real objects, so you aren't limited to strings.

You may need to totally forget everything you know about web developing. :)   When Avi first started having me test Iowa I had some difficulty wrapping my head around the different way of approaching things but it grows on you.  If you have some specific reason you want to do this, please feel free to post some more details and I'll look into it.

>That's enough for now. Thanks for any help

No problem, hope it makes sense (and that I'm not wrong in anything I said :) ).  Avi will likely be checking his mail occasionaly while he's away so I'm sure he'll let me know if I've missed anything.

In the meantime, let me know if you have any other questions.

Julian