Обсуждение: web-based front end development
Hi. There is interest at work in doing some fairly simple inventory
control using a database. We've already got Postgres up and running
(for obvious reasons) and I was wondering if anyone had suggestions
for a good approach to app development for brower-based user
interfaces.
There are other applications which would be of interest, so something
with some growth potential would be helpful.
We have a bit of expertise in Java servlets, etc, so that is one
option via the jdbc interface.
Are there any options which are particularly "approachable" which
would allow newbies to get something working if they have some
existing code to look at?
TIA
- Thomas
--
Thomas Lockhart lockhart@alumni.caltech.edu
South Pasadena, California
Thomas - I'd suggest you have a look at the Zope system (www.zope.org). It's a through-the-web development environment, designed for ease of partitioning the development and maintanence of web-based apps. One could think of it as a cross of Cold Fusion and PHP on steroids. It's actively being developed in an Open Source way, with Digitial Creations, Inc. as lead developers (only fair, it's their code they donated to us all). The partitioning allows you to write the SQL parts (as ZSQL methods), and have someone else use them in a 'blackbox' fashion to design the app. using DTML, the Zope HTML scripting language. It's relatively easy to extend this to having 'content' people do just that, content. Not an HTML tag in sight (for them). At first glance, it may look a little heavyweight for 'simple' app., but we all know that those simple apps grow, and you never get a chance to rewrite from scratch untill you have too. Now the bad news. The current beta has lots of nice new features, but in the process of adding some of them (better concurrency, and a new implementation of their transaction system), all the database adaptors broke. They still work fine for the current stable, 1.10.2, however. It's just that there are major features (ZClasses, XML support) in the beta that could affect fundamental design decisions for any app you'd start now. I think it'd be a major win for both systems to have such a core member of the PostgreSQL development using Zope. Give me 'till Monday and I'll see if I can't get the ZPyGreSQLDA (ow, painful name!) working acceptably with Zope 2.0. (I need it anyway, even if you don't go with Zope) Ross -- Ross J. Reedstrom, Ph.D., <reedstrm@rice.edu> NSBRI Research Scientist/Programmer Computer and Information Technology Institute Rice University, 6100 S. Main St., Houston, TX 77005
On Thu, 29 Jul 1999, Thomas Lockhart wrote:
> Hi. There is interest at work in doing some fairly simple inventory
> control using a database. We've already got Postgres up and running
> (for obvious reasons) and I was wondering if anyone had suggestions
> for a good approach to app development for brower-based user
> interfaces.
>
> There are other applications which would be of interest, so something
> with some growth potential would be helpful.
>
> We have a bit of expertise in Java servlets, etc, so that is one
> option via the jdbc interface.
>
> Are there any options which are particularly "approachable" which
> would allow newbies to get something working if they have some
> existing code to look at?
Dmitry was working on something like that; I couldn't wait and wrote
one in C. His is in perl. Handles inventory, invoice printing (one at a
time on demand), special prices and a few other minor things. Probably
could use to be cleaned up some tho. This one runs with Apache, but one
day I'll probably rewrite it to use my micro-webserver so a full web
server wouldn't be a requirement.
Vince.
--
==========================================================================
Vince Vielhaber -- KA8CSH email: vev@michvhf.com flame-mail: /dev/null # include <std/disclaimers.h>
TEAM-OS2 Online Campground Directory http://www.camping-usa.com Online Giftshop Superstore
http://www.cloudninegifts.com
==========================================================================
Thomas Lockhart wrote: > (for obvious reasons) and I was wondering if anyone had suggestions > for a good approach to app development for brower-based user > interfaces. > There are other applications which would be of interest, so something > with some growth potential would be helpful. > Are there any options which are particularly "approachable" which > would allow newbies to get something working if they have some > existing code to look at? My recommendation is AOLserver 3. If you know any tcl, you can deal with AOLserver's tcl. AOLserver is a complete, lightweight, multithreaded, industrial-strength, open source powerhouse of a web server, available from www.aolserver.com. There are many examples available. AOL runs their www.aol.com and www.digitalcity.com sites on AOLserver -- this thing is a performance beast! Postgres is well supported under the older 2.3 series and the newer 3.0 series. 2.3 is not open source, though. In fact, AOLserver's support of Postgres is why I got started with PostgreSQL in the first place -- the seamless db connectivity was just too tempting. Database connections are pooled and throttled, so that only as many backends as your server can support can be loaded at any time. Connection threads share pooled connections -- a new backend is not spawned for each an every page request -- AOLserver was the first web server with this capability, BTW. AOLserver will cooexist with other web servers on the same box -- you can have it listen to any port you desire, on any interface. AOLserver allows embedded tcl inside HTML pages -- and the tcl has complete run of the database. For administration, a telnet control port is available that allows execution of operating system commands, tcl commands, and direct entry of SQL -- like having its own psql built-in. Version 3 is currently at beta 2, but development is heavy. And, AOL is using this for their highest traffic sites. The interactive development community site is at aolserver.lcs.mit.edu, and is run by the guys behind ArsDigita (the best known of whom is Philip Greenspun, Mr. Database-backed-website himself.). Their ArsDigita Community System (ACS) is written for the 2.3 server, but is chock full of example code that runs backed by Oracle, although an effort is underway to port over to PostgreSQL. The learning curve is surprising shallow, with any experienced programmer taking maybe a day or so to get up to speed on AOLserver's dialect of tk-less tcl. I have run this system for over two years, and it works very well. For more information on Greenspun's philosophy and on AOLserver itself, check out the book "Philip and Alex's Guide to Web Publishing", available at amazon.com or for free at photo.net/wtr/thebook -- this book really is a must-read. HTH. Lamar Owen WGCR Internet Radio
> Hi. There is interest at work in doing some fairly simple inventory > control using a database. We've already got Postgres up and running > (for obvious reasons) and I was wondering if anyone had suggestions > for a good approach to app development for brower-based user > interfaces. > > There are other applications which would be of interest, so something > with some growth potential would be helpful. > > We have a bit of expertise in Java servlets, etc, so that is one > option via the jdbc interface. > > Are there any options which are particularly "approachable" which > would allow newbies to get something working if they have some > existing code to look at? PHP is a must see. See FAQ. -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
At 04:20 PM 7/29/99 +0000, Thomas Lockhart wrote:
>Hi. There is interest at work in doing some fairly simple inventory
>control using a database. We've already got Postgres up and running
>(for obvious reasons) and I was wondering if anyone had suggestions
>for a good approach to app development for brower-based user
>interfaces.
I'm fond of AOLserver and its TCL API, which has built-in pooled
db connectivity, maintaining persistent db connections with
no forking overhead. The webserver itself schedules TCL threads,
there's no CGI forking overhead as with older style Perl, etc
interfaces (of course, Apache + modPerl etc now implements a similarly
efficient interface). AOLserver's open source, GNU-licensed, and
also supports CGI and a C API. It works with many dbs, including
Postgres.
The integrated TCL API has been extended with literally dozens
of website-useful extensions to connect to the db, do selects,
do dml, get table info, send e-mail ("ns_sendmail to from message
extraheaders" - this gives a flavor of the ease in which one
gets things done in this environment), schedule TCL scripts
(I use this feature to do nightly pg_dumps), load pages from
other URLs, upload files from client browsers, etc etc etc.
If you're at all familiar with TCL you could have a few modest
pages up and running within hours of downloading the server
and the utilities package mentioned below.
An example of a website built using this combination plus
postgres 6.5.1 can be found at http://donb.photo.net/tweeterdom.
ArsDigita has a ton of code available to implement bboards,
e-commerce, bug (ticket) tracking, chat, and a bunch of other
stuff which sits on top of Oracle. I've found this stuff easy
to migrate to Postgres - the TCL scripts don't need changing
other than the actual SQL, which is mostly vanilla. The lack
of an outer join gets in the way of porting some of this code,
thus those who've discussed porting the complete ArsDigita system
are eagerly awaiting Postgres 6.6.
Other than that, the fact that Postgres implements sequences
in a way very much like Oracle with a just slightly different
syntax makes porting the SQL fairly easy. My particular
application doesn't include any of the specific modules
implemented by ArsDigita, other than that used to register
and log in visitors. But, I've poached a bunch of code from
the modules to avoid wheel-reinventing in a bunch of my own
stuff.
ArsDigita also has prototyping scripts available that quickly
builds form-based entry and edit pages from tables. This is
new, again is Oracle-based, but should be easy to move to
postgres.
They also supply a rich set of utilities which greatly
simplify using the db and forms, whether or not you use
their other tools.
All of this stuff's available from ArsDigita under the GNU
license as well, at arsdigita.com.
While not well-known, AOLserver, the ArsDigita stuff, and
Oracle lie underneath some very busy sites. Postgres 6.5.1
isn't quite robust enough to measure up to Oracle yet for
a truly busy site, but is so much better in the web environment
than 6.4 that I think it's really reasonable for modest sites,
up to a few ten thousands of hits a day at the very least.
I've tested the AOLserver+TCL+Postgres on a P200 classic
with Linux, 64 MB (running postgres -B 2000), and two IDE
disks (indices on one, datafiles on the other). On another
LAN-connected machine I fired up a bunch of browsers and
used them to run test scripts which simulated ten users
each doing four inserts a second, and two users doing
"selects" in tight TCL loops (did this in part to test
the changes which removed the unneeded logging after read-only
selects). The machine was perfectly happy performing these
tasks, not falling behind a bit. The four inserts were bundled
into a single transaction, so that's ten transactions a second
consisting of forty inserts. A lot of hits for a tiny machine,
really. Says a lot for Postgres, Linux, the web server and its
TCL API, not to mention the speed and capacity of modern
microcomputers!
If you're doing simple web applications, a straight interpreter,
be it TCL, Perl or whatever, has some advantages over a compiled
language. You make your changes, and poof! they're there, no
recompiling, relinking, etc.
Of course, I wouldn't use TCL for a large program requiring
hundreds of thousands of lines of code...but it does have a
reasonably clean syntax and the basic loop, select, if-then-else
structures and the ability to declare procedures.
The very nature of HTML imposes a structure on web programs
which is oriented around web pages, i.e. if you take input
via a form, that's a page. You process it and stuff into or
inquire from a database in the page that's the "action"
target of the form. You get to form pages via hyperlinks,
and normally they live on separate pages because that's the
natural way to present things to the user.
So the structure's typically not one imposed by the programmer's
decomposition of the problem in some abstract sense, but rather
your decomposition of the page flow through the client browser,
i.e. the design of the interface as you wish the user to see
it. That page flow design leads you around by the nose as you
develop the code underlying them (either html with embedded
TCL (.adp pages), or as I prefer scripts which write html (.tcl
pages), in AOLserver - ASP pages and ColdFusion-augmented
html are much like AOLserver .adp pages, CGI+Perl more like
the .tcl page approach).
>From the point of view of the user, this is almost cool - the
programmer's FORCED to design the user interface and the
page flow that takes the user through it. The UI - primitive
as it is - steps forward front-and-center, by necessity. One
can hope, at least, that the need to focus here leads to better
UIs, though of course HTML is so primitive that UIs are awkward
unless you get deep into client side java/javascript, which has
a lot of problems of its own.
Because of this, actual web code I've seen looks remarkably
the same regardless of the language being used. Much of
it is dominated by the writing of html, and shoving stuff
back-and-forth between pages (by URLencoding or hidden
form variables - html concepts, not Tcl or Perl or Java
concepts).
So I think it might be best to concentrate on looking for
combinations that can scale to high levels of activity, which
means avoiding CGI's forking interface (Apache and AOLserver
are both good at this), pooling DB connections (to avoid
forking off new db backends each time you connect), etc.
I'm using Linux+AOLserver+their Tcl API+Postgres+ArsDigita code
because the combination can service a lot of users on a cheap PC,
and it's all open-source/free software, not because I love Tcl
(I don't). The scripts underlying the sample site I gave above are
such relatively short and simple programs, though, that I don't mind
much what language I'm writing them in, language choice in this
case was a secondary consideration.
(given I'm a professional compiler writer, it still seems weird
to hear these words come from my mouth).
...
>Are there any options which are particularly "approachable" which
>would allow newbies to get something working if they have some
>existing code to look at?
If you're interested in the AOLserver approach, visit the ArsDigita
web site and poke around. You can download source code to all their
stuff to see what stuff look like.
- Don Baccus, Portland OR <dhogaza@pacifier.com> Nature photos, on-line guides, and other goodies at
http://donb.photo.net
Thomas Lockhart <lockhart@alumni.caltech.edu> writes: > Hi. There is interest at work in doing some fairly simple inventory > control using a database. We've already got Postgres up and running > (for obvious reasons) and I was wondering if anyone had suggestions > for a good approach to app development for brower-based user > interfaces. > > There are other applications which would be of interest, so something > with some growth potential would be helpful. > > We have a bit of expertise in Java servlets, etc, so that is one > option via the jdbc interface. > > Are there any options which are particularly "approachable" which > would allow newbies to get something working if they have some > existing code to look at? Since you explictly mention Java, you could look at the Java Apache project, which apparently implements the java servlet interface. (http://java.apache.org) If you like Perl, Apache + mod_perl + HTML::Mason have done right by me for a number of projects. I think it's incredibly approachable (and powerful), but I've got four years of solid perl experience and like the language a lot---YMMV. (http://perl.apache.org/, http://www.masonhq.com/) If you like TCL, AOLServer definitely deserves a look, as others have said. It's also a nice, low overhead server to administer. (http://www.aolserver.com/, http://www.arsdigita.com/) PHP has a lot of activity, and is supposed to be really fast if you compile it right into your apache server, although it's often YANAL for people to have to learn. (http://www.php.net) Roxen Challenger, with its Pike language and many other nifty features is also worth a glance, though it's also got the YANAL stigma. There's both a commercial version and a GPL'd version. (http://www.roxen.com/) With the exception of the Java stuff, I am personally aquainted with significant projects that have been implemented in each of these environments---all of them have the ability to support large projects, though I don't know how well they support programming in the large. I suspect approachability may initially hinge on language familiarity. If you have to learn a whole new language, you're probably going to have a steeper learning curve. Mike.
On 29-Jul-99 Thomas Lockhart wrote: > Hi. There is interest at work in doing some fairly simple inventory > control using a database. We've already got Postgres up and running > (for obvious reasons) and I was wondering if anyone had suggestions > for a good approach to app development for brower-based user > interfaces. You begin the star war ;-)) I use three different interface for different tasks Firstly, I use php3 to make web based interface http://www.piter-press.ru is an example (not the best, but the only public available) PHP3 code looks like $qu = pg_exec($conn, "select * from users where (uid = '$uid');" ); $nm = pg_numrows($qu); if ($nm > 0) { $data = pg_fetch_object ($qu, $i); $xpin = crypt($pin, $data->pin); if ($xpin == $data->pin) { BlueEcho("PIN of user '$uid' is valid"); } else { RedEcho("Sorry, you enter incorrect PIN for user '$uid'"); } } pg_close($conn); and seems to be very convenient for sambody familiar with perl or C Secondly, I use Perl every time as I need write anything for five minits just because I use Perl about five years. Perl code looks like (I skip any error check, usually doing inside runSQL) my $connect_args = 'dbname=voip host=nymph.wplus.net user=dms'; my $conn = Pg::connectdb($connect_args); my $query = "selectuid from users where(opstatus=1 and manstatus=1 and units < $insure) $result = $conn->exec("BEGIN");$result = $conn->exec("DECLARE killer001 CURSOR FOR $query;"); open(EMP,"|$empress"); while( ($result = Voip::runSQL($conn, "FETCH FORWARD 1 IN killer001;")) ) { while (@row = $result->fetchrow) { runSQL($conn, "begin"); runSQL($conn, "update users setopstatus=2 where(uid = '$row[0]');"); print EMP "update its_user set acctstatus=1 where(userid = '$row[0]');\n"; runSQL($conn, "commit"); print "User $row[0] disabled\n"; } } runSQL($conn,"CLOSE killer001;"); runSQL($conn, "END"); $conn->reset(); Third, I use C++ for really hard tasks (By historical reasons, I use my own library, not libpq++) C++ code looks like pgs = new PgSQL(listdb); pgs->trace(); sprintf( (char *)qbuf,"select id, email from %s where( msgid < %d );", (char *) list,msgid);pgs->openCursor( (char *)qbuf); while( pgs->fetchNext() ) { sprintf(update,"update %s set msgid=%d where( id = %s);", (char *)listn, msgid send_proc(qbuf, (char *) (*pgs)["email"], fm, (char*) update ); } // while pgs->closeCursor(); delete pgs; I also try to use Java but I find no appropriate task for it. Main disadvantage to Java - is lots of incompatible browser versions, for example Lucent made java interface works only on 2 MS Win based workstations and 0 of UNIX based from about 80 comps. All other have fonts, security manager or other problems ;-)) (but it's my opinion - any of Java gurus may be completely disagree with me ;-)) ) IMHO, PHP3 is the best choice for Web it self, but bakground programs should be written in C/C++ So, make your choice and good luck ;-)) > > There are other applications which would be of interest, so something > with some growth potential would be helpful. > > We have a bit of expertise in Java servlets, etc, so that is one > option via the jdbc interface. > > Are there any options which are particularly "approachable" which > would allow newbies to get something working if they have some > existing code to look at? > > TIA > > - Thomas > > -- > Thomas Lockhart lockhart@alumni.caltech.edu > South Pasadena, California --- Dmitry Samersoff, dms@wplus.net, ICQ:3161705 http://devnull.wplus.net * There will come soft rains ...
Thus spake Dmitry Samersoff > On 29-Jul-99 Thomas Lockhart wrote: > > (for obvious reasons) and I was wondering if anyone had suggestions > > for a good approach to app development for brower-based user > > interfaces. > > You begin the star war ;-)) > > I use three different interface for different tasks [PHP3, Perl and C++ discussion ellided] Or, use Python for everything. > Firstly, I use php3 to make web based interface I use Python over PHP because, like PHP, Ican embed it into the web server but I can reuse the code in non-web applications so I don't have to reinvent each wheel. > http://www.piter-press.ru is an example (not the best, but the only public > available) > PHP3 code looks like > > $qu = pg_exec($conn, "select * from users where (uid = '$uid');" ); > $nm = pg_numrows($qu); > if ($nm > 0) > { > $data = pg_fetch_object ($qu, $i); > $xpin = crypt($pin, $data->pin); > if ($xpin == $data->pin) > { BlueEcho("PIN of user '$uid' is valid"); > } > else > { RedEcho("Sorry, you enter incorrect PIN for user '$uid'"); > } > } > > pg_close($conn); for data in db.query("select * from users where uid = '%d'" % uid).dictresult():if crypt(pin, data.pin) == data.pin: print"PIN of user '%d' is valid" % uidelse: print "Sorry, you enter incorrect PIN for user '%d'" % uid I assume that BlueEcho and RedEcho are simply functions that wrap the strings in font color tags. Such functions can easily be added to Python. See http://www.druid.net/rides/ for a real example. > Secondly, I use Perl every time as I need write anything for five minits > just because I use Perl about five years. I use Python over Perl because I find it to be a cleaner and more logical language. This is a personal preference thing, of course. > Third, I use C++ for really hard tasks (By historical reasons, I use my own > library, not libpq++) I hardly do anything in C (never cared much for C++ except for a few specific features) any more as Python gives me the ability to do anything I could do in C and, if needed, I can always write low level code in C and link it in. Check out http://www.python.org/ for more information. For a PostgreSQL interface for Python see http://www.druid.net/pygresql/ or look in the PostgreSQL source tree. > IMHO, PHP3 is the best choice for Web it self, but bakground programs > should be written in C/C++ As I said, one language for all makes code reuse easier. I find that my projects generally require web interfaces, CLI interfaces as well as scheduled background tasks and I can write modules that get imported into all of them saving me much development time. > So, make your choice and good luck ;-)) Can't argue with that. -- D'Arcy J.M. Cain <darcy@{druid|vex}.net> | Democracy is three wolves http://www.druid.net/darcy/ | and a sheep voting on +1 416 424 2871 (DoD#0082) (eNTP) | what's for dinner.
At 11:49 PM 7/29/99 +0400, Dmitry Samersoff wrote:
...
> $qu = pg_exec($conn, "select * from users where (uid = '$uid');" );
> $nm = pg_numrows($qu);
> if ($nm > 0)
> {
> $data = pg_fetch_object ($qu, $i);
> $xpin = crypt($pin, $data->pin);
> if ($xpin == $data->pin)
> { BlueEcho("PIN of user '$uid' is valid");
> }
> else
> { RedEcho("Sorry, you enter incorrect PIN for user '$uid'");
> }
> }
>
> pg_close($conn);
Tcl code in AOLserver looks roughly like this (using the utilities
package from ArsDigita as well as AOLserver Tcl extensions):
# Note that this gets a persistent handle, i.e. the overhead is
# simply that of assigning a handle pointer from a pool
set db [ns_db gethandle]
set selection [ns_db select $db "select * from users where (uid='$uid')"
while {[ns_db getrow $db $selection]} { set_variables_after_query if {$pin == ...
}
ns_db releasehandle $db
>and seems to be very convenient for sambody familiar with perl or C
>
>Secondly, I use Perl every time as I need write anything for five minits
>just because I use Perl about five years.
>
>Perl code looks like (I skip any error check, usually doing inside runSQL)
> my $connect_args = 'dbname=voip host=nymph.wplus.net user=dms';
> my $conn = Pg::connectdb($connect_args);
This is bad for websites - building a new db connection is expensive.
This is why AOLserver provides pooled connections.
This is why Apache/modperl types use packages that pool persistent
connections if they plan to build a busy site.
> my $query = "select uid from users where(opstatus=1 and manstatus=1 and
units
>< $insure)
>
> $result = $conn->exec("BEGIN");
> $result = $conn->exec("DECLARE killer001 CURSOR FOR $query;");
As you can see, when it gets down to it, all of these solutions have
more in common than in differences.
The key to look at, IMO, is the efficiency of the webserver and its
database connectivity.
...
- Don Baccus, Portland OR <dhogaza@pacifier.com> Nature photos, on-line guides, and other goodies at
http://donb.photo.net