conmaster-l Mailing List for ConMaster Convention Management Software
Status: Beta
Brought to you by:
cyface
You can subscribe to this list here.
2000 |
Jan
(1) |
Feb
(6) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(8) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Tim W. <tl...@qw...> - 2002-07-15 14:37:08
|
I've released ConMaster5 Version .02 on the sourceforge page: http://sourceforge.net/project/showfiles.php?group_id=1148 Most things are pretty much working, but we've a long way to go as far as validation and bullet-proofing, as well as printing. Score Packets are not even close, and may not be for a while. On major advantage of the new version - an entire database export is 600K, whereas the same database in 4D was 6,000K. :) In fact, the entire release in .tar.gz format is only 662K. This includes the 2 complete DB exports, reams of core library documentation, and the whole application! It doesn't, of course, include MySQL, Apache, & PHP. :) Anyway, if you are feeling adventurous, download and install, or check out the "production" version at http://cyface.com/cm Thanks! Tim |
From: Tim W. <tl...@qw...> - 2002-07-12 00:19:42
|
Folks - I have revived the open-source ConMaster project. It became clear at Ben Con 2002 that the 4D version of ConMaster was dead. If Ben Con is to have working software, this project must succeed. After 2 years struggling with complex overkill technologies, I have decided to return to my original idea, that is to build this project with 100% free, open source products, notably PHP and MySQL. I have updated the SourceForge site (http://www.sourceforge.net/projects/conmaster) with the latest information. Having spent the last couple of weeks working on ConMaster in PHP & MySQL, I can say that it has been a pleasure, and I am delighted with how things are coming along. At this point, I _will_ complete the application in these technologies, and if someone wants to port it to .NET or whatever someday, more power to them. :) I'm sending out this letter to reinvite all of you to join me in developing this application, which I think will see even more use down the road, as conventions and game days become increasingly popular. I have put up a list of tasks on the SourceForge site, please feel free to grab one and go. :) There is a ConMaster release available on SourceForge, although the CVS stuff is far more recent. One of the news items on SourceForge describes roughly how to set up ConMaster to run on your PC. If you want to play with a recent copy of ConMaster-in-progress, browse over to http://cyface.com/conmaster . If you have any questions or comments, please let me know. Thanks! Tim White ConMaster Project Lead P.S. If you know any HTML/JavaScript developers who want to help, let me know! |
From: Tim W. <tl...@us...> - 2000-10-30 17:46:03
|
It looks like carmilla may have been hacked, so I have rebuilt her with RedHat 7.0 with all the latest security patches. I would also like to ask that folks use Secure Shell as opposed to telnet to connect, this will up our security a little. I'm not worried about things getting looked at as much as I am the host getting trashed due to careless hacking. You can find many fine free SSH clients at http://www.freessh.org. I recommend MindTerm, a multi-platform java-based SSH client that supports HTTP firewall tunneling. Thanks, Tim |
From: Tim W. <tl...@us...> - 2000-10-23 19:23:29
|
I have reformatted the docs in HTML, and heavily redefined the Data Model. Please check them out! http://sourceforge.net/docman/?group_id=1148 One of the main challenges of the data model is the many-to-many intersection entities that have composite primary keys (i.e. the primary key is split across two columns). I have no idea how to handle this in EJB - We may have to add a column that concatenates the keys together. I believe I have the history-across-conventions stuff handled now in the DD, but I am still seeking the best way to handle "transactions" - not in the DB sense, but in the "Here's $6 for these two events" sense. Historically, ConMaster has only held the current financial state, not each transaction. But, with the idea that we'll be supporting people registering themselves, I think it might pay to track each transaction. Not sure at what level it would be useful, or how to model it. My first thought would be to add a table like this: Transaction *********** Transaction_Id NUMBER pk Parent_Convention_Id NUMBER fk Parent_Person_Id NUMBER fk Type STRING Payment_Type STRING Amount REAL Credit_Card_Number NUMBER Credit_Card_Exp_Date NUMBER Check_Number NUMBER Date_Transacted TIMESTAMP Agent_Person_Id NUMBER fk The idea being that the cost of each event is tracked in Event and Person_Section (for overrides and varible cost events), and that the amount that they have paid is tracked in Transaction. The cost for their convention registration is tracked in Person_Convention. Also, since we are adding Items into the mix now, the cost of any items they have purchased is tracked in the Items table. Notes can be attached where needed, and the rest is calculated on the fly with bean functions. There will be security questions as to whether we store the CC#s or not, and certainly whether they can be viewed after they are entered. Typically, you can see the last 4 digits at the basic security levels. This allows you to do the "use the same cc as last time" sort of thing. Thanks, Tim |
From: Tim W. <tl...@us...> - 2000-10-18 18:41:45
|
Here's a direct URL to the area of the ConMaster SourceForge site that has the Design Docs. https://sourceforge.net/docman/?group_id=1148 You should log in first, and if you don't stay in SSL, you'll need to change that https to http. To navigate there, go to the ConMaster page, and then Project Documentation. Thanks, Tim |
From: Michael K. <nig...@ya...> - 2000-10-18 16:44:23
|
> 28 during day okay (going to Dan's party), 29 > hangover day. > Nov 4 probably bad, Nov 5 okay up til 3 and after 4 I can do either of these. > Nov 18 good during day I can't make this one. Mike __________________________________________________ Do You Yahoo!? Yahoo! Messenger - Talk while you surf! It's FREE. http://im.yahoo.com/ |
From: Michael K. <nig...@ya...> - 2000-10-18 16:38:26
|
Tim, I'll take a look at the design docs this evening and let you know what I think. Mike --- Tim White <ti...@cy...> wrote: > OK - > > I know you may not have heard from me for a while, > but we are finally > ready to go on ConMaster5. > > I have updated the SourceForge site with the > high-level design > document, and the first (very rough) detailed data > design documents, as > well as many helpful news items. > > Please check it out! > > http://sourceforge.net/projects/conmaster/ > > If you don't yet have a SourceForge account, sign > up for one and email > me your id, so I can add you to the group. > > I am looking for feedback on the design documents. > > I also need to schedule a meeting to talk about the > data design. I'm > trying to keep the meetings focused on a particular > topic, and the data > design needs help! Serious help! > > I'd like to have at least 2-4 hours, so that means > weekend probably. > Let me know what works for you - if you aren't > interested in the data > design, that's cool! You don't have to attend every > meeting. I have a > lot of experience with DD, so I will be there, but > beyond that it's up > to you if you are interested. > > Thanks! > > Tim > _______________________________________________ > Conmaster-l mailing list > Con...@li... > http://lists.sourceforge.net/mailman/listinfo/conmaster-l > > > __________________________________________________ Do You Yahoo!? Yahoo! Messenger - Talk while you surf! It's FREE. http://im.yahoo.com/ |
From: Jeff B. <je...@el...> - 2000-10-18 03:53:17
|
Yo Tim: My sourceforge account is eltoro72. I haven't yet found the docs you mentioned on the site, but I have barely started poking around. I'll get them read soon. (Work bores me). As for meetings: this weekend bad 28 during day okay (going to Dan's party), 29 hangover day. Nov 4 probably bad, Nov 5 okay up til 3 and after 4 Nov 11 and 12 bad Nov 18 good during day If you need dates further out, let me know. Feedback coming soon, I hope. Jeff Tim White wrote: > OK - I know that many of you may not have heard from me for a while, and > I apologize. I've been trying to work with some Open Source folks to > get the server software I would like to use to a point where it's > usable! > > Now that it is, I've solidified the architecture for the new ConMaster5. > > I've written up some high-level design documents, and placed them on the > ConMaster SourceForge page: > > http://sourceforge.net/projects/conmaster > > If you don't have a SourceForge account yet, make yourself one on their > site there (it's free of course), and let me know what your ID is so I > can add you to the project. > > The documents are under the "Project Documentation" area. > > I am looking for feedback on the documents - so let's discuss. > > Also, I'd like to schedule a meeting soon to codify the data model. It > needs some serious help. If you aren't interested in the data model > portion, no worries, you don't have to come to every meeting. I'm > pretty experienced at DD, so I'll be there, but beyond that who knows! > > If you are looking for something to do right away, you can start > brushing up on/learning your Java and EJB. I've listed info and > references about the tools and technologies we'll be using in the master > design doc. > > Once the Data Model is clean, we can code the Entity Beans, and from > there the Session Beans and beyond. So the sooner we get the Data Model > ready, the sooner we can go. Let me know if you are interested in the > DD meeting, and if so, when works best for you. > > Let's go and try and build momentum here! > > Thanks, > > Tim > _______________________________________________ > Conmaster-l mailing list > Con...@li... > http://lists.sourceforge.net/mailman/listinfo/conmaster-l |
From: Tim W. <tl...@us...> - 2000-10-17 14:00:32
|
OK - I know that many of you may not have heard from me for a while, and I apologize. I've been trying to work with some Open Source folks to get the server software I would like to use to a point where it's usable! Now that it is, I've solidified the architecture for the new ConMaster5. I've written up some high-level design documents, and placed them on the ConMaster SourceForge page: http://sourceforge.net/projects/conmaster If you don't have a SourceForge account yet, make yourself one on their site there (it's free of course), and let me know what your ID is so I can add you to the project. The documents are under the "Project Documentation" area. I am looking for feedback on the documents - so let's discuss. Also, I'd like to schedule a meeting soon to codify the data model. It needs some serious help. If you aren't interested in the data model portion, no worries, you don't have to come to every meeting. I'm pretty experienced at DD, so I'll be there, but beyond that who knows! If you are looking for something to do right away, you can start brushing up on/learning your Java and EJB. I've listed info and references about the tools and technologies we'll be using in the master design doc. Once the Data Model is clean, we can code the Entity Beans, and from there the Session Beans and beyond. So the sooner we get the Data Model ready, the sooner we can go. Let me know if you are interested in the DD meeting, and if so, when works best for you. Let's go and try and build momentum here! Thanks, Tim |
From: Tim W. <ti...@cy...> - 2000-10-17 03:34:46
|
OK - I know you may not have heard from me for a while, but we are finally ready to go on ConMaster5. I have updated the SourceForge site with the high-level design document, and the first (very rough) detailed data design documents, as well as many helpful news items. Please check it out! http://sourceforge.net/projects/conmaster/ If you don't yet have a SourceForge account, sign up for one and email me your id, so I can add you to the group. I am looking for feedback on the design documents. I also need to schedule a meeting to talk about the data design. I'm trying to keep the meetings focused on a particular topic, and the data design needs help! Serious help! I'd like to have at least 2-4 hours, so that means weekend probably. Let me know what works for you - if you aren't interested in the data design, that's cool! You don't have to attend every meeting. I have a lot of experience with DD, so I will be there, but beyond that it's up to you if you are interested. Thanks! Tim |
From: Michael K. <mk...@ho...> - 2000-02-02 05:38:56
|
My point was that you make a frame that contains essentially pure content and have that be the JSP pane, while the surrounding panes contain pure "fluff". That way the "pretty people" don't screw with the code and the JSP can resolve itself to handling pure interface. - mike ----- Original Message ----- From: Tim White <tl...@us...> To: <con...@li...> Sent: Tuesday, February 01, 2000 10:04 AM Subject: Re: [Conmaster-l] JSP vs. WebMacro Review > Michael Kenyon wrote: > > > > I'd like to point out that the they're missing Template Problem #4, which is > > the inverse of their stated premise. > > > > Their stated premise is that JSPs tempt you to embed Java code directly into > > the page, which is EXACTLY what it is that we want to do. > > Heh - you missed the point of that one I think. The point is that the > layout of web pages is HTML. Graphic designers like to edit HTML with > FrontPage. FrontPage screws up embedded code. Designers don't want to > know java - they really don't want to know HTML. This goes back to my > 'easy to customize the look and feel' point. You have folks who are > good at the graphics and layout and folks who are good at the code. > Don't force them to do each other's job - it doesn't work (I've been > there). Even for jack-of-all-trades folks like me, a clear separation > makes it easier to find problems, and change them in a central place. I > like to use FrontPage too. > > Would you rather change a single class, or two dozen individual web > pages? > > Tim > > _______________________________________________ > Conmaster-l mailing list > Con...@li... > http://lists.sourceforge.net/mailman/listinfo/conmaster-l > |
From: Michael K. <mk...@ho...> - 2000-02-02 05:37:17
|
Ok. Whenever, gives me some time to handle other con stuff. - mike ----- Original Message ----- From: Tim White <tl...@us...> To: <con...@li...> Sent: Tuesday, February 01, 2000 11:16 AM Subject: Re: [Conmaster-l] Added Code > Michael Kenyon wrote: > > > Any questions? > > You must be joking. Clear as a bell. >;) > > I won't get a chance to read through all of this for a while today, when > I do, I'll let you know... > > Tim > > _______________________________________________ > Conmaster-l mailing list > Con...@li... > http://lists.sourceforge.net/mailman/listinfo/conmaster-l > |
From: Tim W. <tl...@us...> - 2000-02-01 18:18:35
|
Michael Kenyon wrote: > Any questions? You must be joking. Clear as a bell. >;) I won't get a chance to read through all of this for a while today, when I do, I'll let you know... Tim |
From: Tim W. <tl...@us...> - 2000-02-01 17:06:57
|
Michael Kenyon wrote: > > I'd like to point out that the they're missing Template Problem #4, which is > the inverse of their stated premise. > > Their stated premise is that JSPs tempt you to embed Java code directly into > the page, which is EXACTLY what it is that we want to do. Heh - you missed the point of that one I think. The point is that the layout of web pages is HTML. Graphic designers like to edit HTML with FrontPage. FrontPage screws up embedded code. Designers don't want to know java - they really don't want to know HTML. This goes back to my 'easy to customize the look and feel' point. You have folks who are good at the graphics and layout and folks who are good at the code. Don't force them to do each other's job - it doesn't work (I've been there). Even for jack-of-all-trades folks like me, a clear separation makes it easier to find problems, and change them in a central place. I like to use FrontPage too. Would you rather change a single class, or two dozen individual web pages? Tim |
From: Michael K. <mk...@ho...> - 2000-02-01 05:03:47
|
I added a bunch of code. The following describes what was added. Tim, the code needs the Sun XML parser to be installed (available for free from sunsite). It would also help if we could get $CVSROOT/java into the classpath variable in the global profile and a $CVSROOT/bin directory where we can source control scripts (builds, doc runs, etc). Package xml: This is code to manipulate XML. xml.XMLUtil - This class is a beefed up version of one Jeff and I are familiar with. It runs off of the Sun parser, not the IBM one. It provides the following functionality: * Read XML(from file, resource, or stream) * Write XML(to string) * Create a new XML document. * Wrap an existing node with another XML document (ie, search and replace a node in a "template" for the passed in node). * Determine if a node has a child of a given name. * Change the ownership on a node to a different document. * The coolest one. It allows you to on loading replace an XML node with a class object of your choice. Contained objects are also substituted, so that you can have an entire XML document "morph" into a business-specific object which you can manipulate and then write back out as XML with 0 intervention. Package conf: Utilitizes the last ability of xml.XMLUtil to provide a way to manipulate configuration information in terms of XML. conf.Configuration - Inferface depicting some piece of configuration information. conf. Provides the general interface to dealing with configuration info. conf.ConfigurationNode - An implementation of Configuration that interprets a XML node as a piece of configuration info. Uses an attribute to define its name and value. conf.ConfigurationLeaf - A configuration node that enforces that it has no children and interprets its text children as its "value" as opposed to an attribute. conf.ConfigurationDecorator - A parent of "wrapper" classes that each manipulate or add to how a piece of Configuration works. conf.ConfigurationRoot - A decorator which defines its node as the root of all configuration information in the hierarchy. It does not have a name per se, nor does it count in the configuration path (see below). conf.ConfigurationFile - Manipulates configuration files. Each instance of this class can be keyed to read in any number of configuration files either by their resource names or their file locations. These files are each parsed and turned into a hierarchy of objects implementing the conf.Configuration interface. Files with common elements are "merged" together, while those with differences are tacked on to make an entire forest of this nodes (with an invisible common root). The most common way to use this class is to load one or more configuration files and then to ask for certain configuration parameters. For example, after reading in a configuration file: <CONF name="characters"> <CONF name="Lazurus the BDF"> <CONF name="stats"> <LEAF name="Str">18</LEAF> <LEAF name="Dex">18</LEAF> <LEAF name="Con">18</LEAF> <LEAF name="Int">6</LEAF> <LEAF name="Wis">6</LEAF> <LEAF name="Chr">6</LEAF> </CONF> </CONF> </CONF> We could ask what "characters.Lazurus the BDF.stats.Str" was and we'd get 18 back as a result. The datatype package provides a way in which we can force the return type of this result to come back to us as a type of our choosing. Similarly, we can create a derived type of ConfigurationDecorator called Stat which maps to the element named <STAT>. Then we can add functionality to that class such as the automatic calculation of bonuses for that stat, etc. Such a configuration file would then look like: <CONF name="characters"> <CONF name="Lazurus the BDF"> <CONF name="stats"> <STAT name="Str">18</STAT> <STAT name="Dex">18</STAT> <STAT name="Con">18</STAT> <STAT name="Int">6</STAT> <STAT name="Wis">6</STAT> <STAT name="Chr">6</STAT> </CONF> </CONF> </CONF> Package datatype: Used to define how configuration nodes map to Java class types. You can add a datatype that will convert a Java object to a value storable in XML and retrieve that value from the same. datatype.DataType - Basic interface for being a datatype. You need to have your class implement this if you are providing a data type object. datatype.DataTypeFactory - Loads a mapping of names of datatypes to the classes that implement them. Ex "Number" maps to "datatype.NumberDataType" and produces the appropriate data type when asked for. datatype.DateDataType - Converts data to/from the Java data format. datatype.DefaultDataType - Converts all data as strings. The default. datatype.NumberDataType - Handles any number in arbitrary precision. Package util - A couple of odd classes that could be useful, but are not currently directly so. util.RecursiveList - Defines a List in terms of the LISP definition "A list is a pair of an object and a list". This definition provides incredible utility in an incredibly small number of cases. The next class is the only one I can think of at the moment. util.Command - Defines a command as "A command is a directive and some number of arguments." This is implemented as a recursive list. The next version of conf.Confiuration has the capability of taking a Command and attempting to execute it or defering its execution down to appropriately named children. For example, in if the command "characters "Lazurus the BDF" stats Str + 2" was issued to the configuration file, it would pass that command to the "invisible root" of the configuration forest and the command would trickle down till it reached the Str node which would then increment its value by two and return. Package data - Contains two things. First, it's the current holding directory for properties files (not detailed here) and secondly, its the location of some classes that manipulate databases. Its still very much a work in progress. The following is a brief indication of the idea. Let me know what you think. When performing a select on the database (whatever that might be) the results set is "morphed" into a collection of "records" objects. These records object each represent one row in some table somewhere. There are two versions of this record object. The first is used if we want static representations of data. It loads itself from the results and tosses them. The second maintains a listing of every other Record object that exists and is interested in the same piece of data. As you update one instance of that record, it updates all other instances that are querying the same data. I'm not at all sure we need the intensity of the second approach, but its fully possible. Each record caches the database values and returns them. It maps from a common use name (ie, "Full Name") to a database column and table name "CON_GEEKS.FULL_NAME". So, you would say, myRecord.get( "Full Name" ) and it would return you the value of the CON_GEEKS.FULL_NAME field in the row of the table it represents. If a set is done, it automaticly commits that change to the database, thus never requiring the coder to speak SQL directly (I know that makes you ansy Tim :) ). For performance reasons, it handles doing multiple simultaneous updates. You can then derive off objects that represent each individual table if you want and we can return the appropriate derived object based off of the table queried. For example, .... public class Person extends Record { public void setFullName( String name ) { super.set( "Full Name", name ); } public String getFullName( ) { return super.get( "Full Name" ); } } This should almost completely hide the database while still keeping all data in sync with it. In layman's terms, its the poor-man's alternative to a OODB. Finally, Package Modules - This package contains all the classes needed to write "plug-ins" for ConMaster. There are a couple of key concepts to define: * Role - A role is a string that defines a set of functionality the component implements. The role is often the name of an interface the class implements. You can query for a component by its role so that you can have one object that implements multiple roles. An example of a role in ConMaster would be "Registration". * Name - The name of the component is a display name. It could be significantly different than any role that the module supports. * Contingency - An object implementing one role may require that something that implements another role exist in order for it to do its job. For example, "Registration" may require that "Event" be present to do its job. If there is no "Event" plug-in, we don't want to run the application, and we should exit gracefully. * Fuzzy Contingency - Often modules could "optionally" use a role if it were available, but don't have to have it to run. This is a fuzzy contigency on that role. Modules should be initialized in a certain order so that all modules are initialized after the modules they are contigent upon. Currently, the system doesn't do this. Anyone who wants to write a digraph capable of performing a topological sort, I can give you the algorithms and point you in the right direction, but as I currently don't think we'll need this, I haven't implemented it. * Relevance - Just as you can have one plug-in implement multiple roles, you can also have one role implemented by multiple plug-ins. For each role that a component implements there is a certain relevance attached. This is a numeric appraisal of when you'd want to use this object as opposed to other objects that implement this interface. For example, if you had a "Curly" plug-in that implemented the "Stooge" interface and a "Generic Stooge" plug-in that also implemented the "Stooge" interface, you'd want to use the "Curly" plug-in more likely because its more Stoogerific. Therefore, the "Curly" plug-in has a higher relevance attached to its "Stooge" role than the "Generic Stooge" plug-in does. If you request a "Stooge", you will always get "Curly" rather than "Generic Stooge", even if they are both installed and running. Any component does have the option of defering the execution of any task asked of it to the next less relevant implementor of its interface. This means that you can implement "special-case" plug-ins which have a high relevance and have them defer most of their execution down to a more generic, lower relevance plug-in. This is a great way to distribute bug fixes and filters to the standard plug-ins. Modules.Component - This class is the interface which represents a plug in. See below for more details. Modules.Components - An all-static class which is used to manipulate the entire collection of loaded components. It represents a static database of loaded modules and will retrieve any at will. See AbstractComponent for a full description of its use. Modules.ComponentLoader - Specialized class loader that does some funky stuff to deal with loading components from resources and files on demand. Modules.AbstractComponent - This is the class you'd likely derive from if you were writting a module for ConMaster. You simply derive from this class and pass in certain parameters to this class' constructor specific to your particular module. Each method you add to your class after that point becomes a "task" which your plug-in can be asked to perform. For example, public interface Stooge { public void pokeInEye( Stooge who ); } public class LarryComp extends AbstractComponent implements Stooge { String[] roles = { "Larry", "Stooge" }; int[] relevant = { 100, 50 }; String[] deps = { "Curly", "Moe" }; public LarryComp() { super( "Larry Component", Arrays.asList( roles ), relevant, Arrays.asList( deps ), new Vector() ); } public void pokeInEye( Stooge who ) { ... } } You could then somewhere else in the code do the following to retrieve a node and perform the poke in eye task on Moe. public void curlyPokesMoeInEye() { Component moe = Components.getLoader().getForRole( "Moe" ); Component curly = Components.getLoader().getForRole( "Curly" ); curly.performTask( "pokeInEye", moe ); } In this code, we retrieve the modules that are most relevant at being curly and moe (hopefully they are the CurlyComp and the MoeComp). We then ask the curly component to perform some task for us. This task is to poke someone in the eye. We pass the moe component (because we believe it to implement Stooge) in as a parameter to that task. The performTask() method on a component takes from 0-6 parameters. Any more than that, and you have to create a List of them before making the call. This is somewhat simplfied as the performTask method can throw two exceptions in about 53 different ways, but you get the gist. Any questions? - mike |
From: Michael K. <mk...@ho...> - 2000-02-01 02:40:31
|
I'd like to point out that the they're missing Template Problem #4, which is the inverse of their stated premise. Their stated premise is that JSPs tempt you to embed Java code directly into the page, which is EXACTLY what it is that we want to do. Any choice which does not allow us to do this is a waste IMHO, as it does not field the problem for which we are making a technologic decision. I believe that if want your doing is trying to make a website pretty, the author is completely correct. If you're trying to place an application on the web strictly server-side, I think the author is full of it. In short, all the authors points are indisputable, but the audience is different. -- mike ----- Original Message ----- From: Tim White <tl...@us...> To: <con...@ma...> Sent: Monday, January 31, 2000 3:56 PM Subject: [Conmaster-l] JSP vs. WebMacro Review > In our continual quest for a web architecture, here is an article that > compares JSP to Macro pages. > > http://www.servlets.com/soapbox/problems-jsp.html > > Tim > > _______________________________________________ > Conmaster-l mailing list > Con...@li... > http://lists.sourceforge.net/mailman/listinfo/conmaster-l > |
From: Tim W. <tl...@us...> - 2000-01-31 22:58:31
|
In our continual quest for a web architecture, here is an article that compares JSP to Macro pages. http://www.servlets.com/soapbox/problems-jsp.html Tim |