You are viewing a plain text version of this content. The canonical link for it is here.
Posted to docs-cvs@perl.apache.org by st...@apache.org on 2002/04/13 19:42:12 UTC
cvs commit: modperl-docs/src/stats config.cfg graph.jpg graph.pl index.html input.data logo-middle.png logo.png netcraft.html pseudo-graph.jpg securityspace.html
stas 02/04/13 10:42:12
Added: src/outstanding config.cfg sites.html
src/outstanding/stats config.cfg graph.jpg graph.pl
index.html input.data logo-middle.png logo.png
netcraft.html pseudo-graph.jpg securityspace.html
src/outstanding/success_stories README adultad.pod
adultad.txt allakhazam.com.pod allakhazam.com.txt
bsat.pod bsat.txt calmaeth.maths.uwa.edu.au.pod
calmaeth.maths.uwa.edu.au.txt chapters.pl
colbychem.pod colbychem.txt config.cfg
iagore.com.pod iagore.com.txt idl-net.pod
idl-net.txt imdb.com.pod imdb.com.txt
index_bot.html make.pl openscape.org.pod
openscape.org.txt presto.pod presto.txt
rent.com.pod rent.com.txt seds.org.pod seds.org.txt
singlesheaven.com.pod singlesheaven.com.txt
sms_server.pod sms_server.txt story.tmpl tamu.pod
tamu.txt tgix.pod tgix.txt winamillion.msn.com.pod
winamillion.msn.com.txt wmboerse.pod wmboerse.txt
www.afp-direct.com.pod www.afp-direct.com.txt
www.bivio.com.pod www.bivio.com.txt
www.lind-waldock.com.pod www.lind-waldock.com.txt
www.mobile.de.pod www.mobile.de.txt
Removed: src/stories README adultad.pod adultad.txt
allakhazam.com.pod allakhazam.com.txt bsat.pod
bsat.txt calmaeth.maths.uwa.edu.au.pod
calmaeth.maths.uwa.edu.au.txt chapters.pl
colbychem.pod colbychem.txt config.cfg
iagore.com.pod iagore.com.txt idl-net.pod
idl-net.txt imdb.com.pod imdb.com.txt
index_bot.html make.pl openscape.org.pod
openscape.org.txt presto.pod presto.txt
rent.com.pod rent.com.txt seds.org.pod seds.org.txt
singlesheaven.com.pod singlesheaven.com.txt
sites.html sms_server.pod sms_server.txt story.tmpl
tamu.pod tamu.txt tgix.pod tgix.txt
winamillion.msn.com.pod winamillion.msn.com.txt
wmboerse.pod wmboerse.txt www.afp-direct.com.pod
www.afp-direct.com.txt www.bivio.com.pod
www.bivio.com.txt www.lind-waldock.com.pod
www.lind-waldock.com.txt www.mobile.de.pod
www.mobile.de.txt
src/stats config.cfg graph.jpg graph.pl index.html
input.data logo-middle.png logo.png netcraft.html
pseudo-graph.jpg securityspace.html
Log:
movings stats and success stories into the same category
Revision Changes Path
1.1 modperl-docs/src/outstanding/config.cfg
Index: config.cfg
===================================================================
use vars qw(@c);
@c = (
id => 'outstanding',
title => "Technologie Extraordinaire",
abstract => <<EOB,
We have lots of great success reports from people using mod_perl,
including world-wide statistics no mod_perl usage.
EOB
chapters => ['sites.html'],
docsets => [
qw(
success_stories
stats
)
],
);
1;
1.1 modperl-docs/src/outstanding/sites.html
Index: sites.html
===================================================================
<html>
<head>
<title>Sites Running mod_perl</title>
<meta name="Description" content="A collection of big and small
sites enjoying mod_perl">
</head>
<body bgcolor=#ffffff >
<h3>Sites Running mod_perl</h3>
<hr>
This document contains information to give you an idea of where and
more importantly, <b>how</b> mod_perl is being used. If you have an
interesting mod_perl application, let <a
href="../maillist/list-docs-dev.html">us</a> know about it!
<p>
Of course, the sites described on this page are not the only sites
running mod_perl. Since mod_perl has inserted it's name and version
into Apache's Server header, we are able to see others based on the
<a href="netcraft/">netcraft survey</a> results.
</p>
<hr>
<p>
The first public site to run mod_perl and the hand that feeds CPAN
with it, <a href="http://www.perl.com/CPAN/modules/04pause.html">PAUSE</a>, the Perl Authors Upload SErver. This was a birthday present given
to PAUSE by <b>Andreas König</b> on August 20, 1996.
</p>
<p>
Andreas and <b>Kulturbox</b> went on to create an exciting site with
mod_perl that gives you a
dynamic tour of Berlin, Germany.
<a href="http://www.kulturbox.de/perl/berlininfo">BerlinINFO</a>. The images you see here are generated on the fly,
using mod_perl allows the <a href="http://www.perl.com/CPAN/modules/by-module/GD/">GD</a> image objects to be cached in memory
for an extra performance boost.
</p>
<p>
Do you like movies? Then take a look at how <b>Rob Hartill</b> uses mod_perl
to help you find out anything and everything there is to know about movies
at the <a href="http://www.imdb.com/"> Internet Movie Database </a>.
Besides using mod_perl to speed up the interactive database queries,
mod_perl steps in during the first stage of a request, mapping URIs to
cached query results if present and mapping based on language preference if
the user has presented one.
</p>
<p>
<a href="http://www.webpersonals.com/">Webpersonals</a> site uses
<code>HTML::Embperl</code> over mod_perl to drive this nice match
making site.
</p>
<p>
<a href="http://conceptionstore.com">Conceptionstore.com</a>'s <a
href="http://dev.cogenttechnology.com/epl/csovucalcin.html">ovulation
calendar</a> runs on HTML::Embperl over mod_perl.
</p>
<p>
<a href="http://hn.org">Hammernode Internet</a> a no-cost DNS provider
serving thousands of zones, uses mod_perl to power both its dynamic
web site, as well as the server end of its published API interface for
client programs. We're very satisfied with mod_perl, and very
thankful for it.
</p>
<p>
The Internet's largest on-line toy store, <a
href="http://www.etoys.com/">eToys.com</a>, uses mod_perl extensively.
We use an object-oriented approach built on standard CPAN modules such
as DBI, BerkeleyDB, and Template Toolkit. eToys ranked third in
overall traffic among e-commerce sites during the 1999 Christmas rush,
right behind Amazon and eBay.
</p>
<p>
<b>Patrick Kane</b> uses mod_perl at
<a href="http://www.enews.com/">The Electronic Newsstand</a> to maintain
limited and persistent connections to their Sybase servers where users
can search and browse through thousands of virtual magazines. Patrick
also uses mod_perl's Authentication hook for seamlessly migrating users
from their old registration system to a new one.
</p>
<p>
<a href="http://www.sol.no/">Scandinavia Online AS</a> uses
mod_perl for the <a href="http://kvasir.sol.no/">Kvasir search
engine</a>. <b>Kvasir</b> is Norway's most popular Internet directory.
</p>
<p>
<b>Alvar Freude</b> uses mod_perl on <a
href="http://www.a-blast.org/">http://www.a-blast.org/</a>. It is a
"truly interactive text network", written completely in mod_perl. For
a quick, non-technical overview have a look on <a
href="http://www.assoziations-blaster.de/prixars/">http://www.assoziations-blaster.de/prixars/</a>.
(its in english on our old domain).<br>
About one year ago, it runs on M$ IIS with ActivePerl and some PHP, in
the meantime it is completely rewritten as Apache module, using MySQL as
database. With this, I speed up the execution time from ~3 Seconds to
~10 milliseconds for each Blast-Page (OK, OK, the old machine had a very
worst hardware, now we use only a semi-worst one: Pentium II 350, 320 MB
RAM with Soft-RAID 0 under Linux).<br>
The blast_engine includes the links into the texts in realtime, also
the statistics are created in realtime:<br> <a
href="http://www.a-blast.org/statistics/">http://www.a-blast.org/statistics/</a>,
<a
href="http://www.assoziations-blaster.de/statistik">http://www.assoziations-blaster.de/statistik/</a>
(german, with much more traffic)
The blaster uses the speed benefit of keeping the complete keyword
list in memory (more then 5 MB for the german version), for the
non-linear real-time linker I use a ~50 line regexp .-) The HTML-Files
are compressed on-the-fly with Compress::Zlib, so we keep bandwidth
(and transmission time to the users) small.
</p>
<p>
<A HREF="http://www.citysearch.com/">CitySearch.com</A> -- is
providing online city guides for more than 100 cities worldwide,
citysearch.com helps people find and plan what they want to do and
then lets them take action, offering local transactions such as buying
event tickets and making hotel and restaurant reservations online. Its
traffic exceeds 100,000,000 page views a month. Of course it's running
under mod_perl.
<A HREF="http://perlmonth.com">PerlMonth</A> is a site completely driven
by mod_perl/mySQL. Every article is stored in the database. When a user
makes a request, a module we wrote parses the uri and dynamically creates
the html page for the user. It's nothing out of the ordinary but it helps
maintain the overall site with ease. PerlMonth does about 100K
Pageviews/month w/o breaking a sweat. The site is written and
maintaned by <B>Baiju Thakkar</B>.
</p>
<p>
<A HREF="http://singlesheaven.com">singlesheaven.com</A> is a match
maker site, that is written completely in Perl and is being driven by
Apache/mod_perl and mysql. Each request comprises a big number of
database queries to make the site very interactive, and it's still
very fast under mod_perl. The service runs under
<CODE>Apache::Registry</CODE> module. The site is written and
maintained by <B>Stas Bekman</B>.
</p>
<p>
<a href="http://www.filepile.com/">filepile.com</a> is an archive of
over 1.2 million freeware/shareware files. <b>Michael Mittelstadt</b> explains:
"After moving to mod_perl, everything is wonderful, everything is
fast, and the computer (dual P6, linux) is no longer bending under
the stress. mod_perl saved us from having to buy a second webserver."
</p>
<p>
<b>Gerald Richter</b> and <b>ECOS</b> are using mod_perl (with
Embperl) for a picture database. This contains
pictures from touristic information Rheinland-Pfalz. It's intented as press
information, to reduce the need of sending photographs around. You can view
and search the picture via the <a
href="http://bilder.ecos.de">internet</a> or via a
direct dial-in. The download is only available for vaild users and via
direct dial-in. Also it's possible to maintain the database via the web and
insert new picture and descriptions, change or delete them.
Software running is Apache 1.3, mod_perl,
<a href="http://perl.apache.org/embperl/">Embperl</a>, DBI, DBD-Pg, Postgress
6.21 on an Linux 2.0.34.
</p>
<p>
<b>Jayme Cox</b> explains: At <b>Broderbund Software</b>, we have a
site running mod_perl to keep
persistant database connections open between our Apache web farm and
our
Oracle database server. We have a <a href="http://www.warlords3.com">
game site </a> that checks our Oracle DB for a customers email address
and lets them download additional game maps if they have registered
the software. Using persistant DB connections increased the perceived
response time by over
200%. The exact URL is
<a href="http://www.warlords3.com/guild/maps">
http://www.warlords3.com/guild/maps</a>.
</p>
<p>
<b>Rick Mangi</b> and
<a href="http://www.tgix.com/">Thaumaturgix, Inc.</a>
use mod_perl to provide a method for gathering stats on web
usage including a logging proxy server module for their customers.
</p>
<p>
<b>Jason Bodnar</b> at <b>Cox Interactive Media</b>, explains: <br>
Right now we're using mod_perl for authentication on two sites (soon
to be a third):
<a href="http://www.Austin360.com">http://www.Austin360.com</a>
and
<a href="http://www.GoBig12.com">http://www.GoBig12.com</a>.
We started out using Netscape servers and dbms for authentication. We
were writing all our demographic info to flat files but that got out
of hand so we moved the demo info to Informix. This was okay but it
meant keeping two seperate databases (dbms or Berkely DB with
username/password and Informix with demographics). Not fun. So when we
switched to Apache (for performance reasons) I was able to consolidate
all the info and do authentication out of Informix thanks to mod_perl,
Apache::DBI, Apache::AuthenDBI and DBD::Informix. It makes life much
simpler! We're also eventually going to be running our Eats Database
(list over 1400 restaurants in Austin) and our movie database with
mod_perl. I'm sure we'll find alot more uses for it in the future.
</p>
<p>
<A HREF="http://www.magirus.com">Magirus Datentechnik GmbH</A>
is a German company of about 200 peoples, (de)located in
Germany, Switzerland, Italy, Austria, and needs a powerful
Intranet System for it's internal information flows. We're
using mod_perl to do it. Our mod_perl applications make the
link between 5 different database systems (Perl power and
mod_perl permanent database connections), allow users to get
price-lists, make offers and orders, get the status of a
client, etc. The advantage of that kind of configuration is
that we just need to install a Web Browser on the user's side.
These tools are avaible from both Intranet or secured Internet
connection. Without mod_perl, the average response time for
the top 5 applications is between 3 till 9 seconds. This can't
be accepted by an end-user. With mod_perl, the response time
seems (for the end-user) to be null (depending of the client's
speed). This is only working on a private-network and so we
can't give you an address to try it. For more information,
contact <A HREF="mailto:Philippe.Froidevaux@magirus.com">
Philippe.Froidevaux@magirus.com</A>.
</p>
<p>
<b>Tony Bowden</b> developed <a href="http://www.musicdatabase.com/">The
Music Database</a> which uses mod_perl and MySQL to allow browsing and
searching a cross-referenced guide to over 80,000 CDs and one million
songs. (not operational at this stage).
</p>
<p>
<b>Randy Ray</b> uses Apache+mod_perl for his Software Configuration Management
team's site within <b>U S WEST IT</b>. About 1/3 of the data the server sends out is
CGI-generated. After the conversion to mod_perl, some existing CGI scripts
running unchanged via Apache::Registry showed measurable speed increases of
as much as 723%. All of the SCM CGI scripts use the Image::Size library to
add HEIGHT and WIDTH attributes to <IMG> tags. As Image::Size caches the
dimensions of each files as it is first read, the persistent dataspace will
virtually eliminate the step of computing image sizes.
</p>
<p>
<a href="http://www.arttoday.com">ArtToday</a> has a collection of
over 600,000 keyworded images of all types. Customers find images
using keyword and category searches. They serve about 250,000 raw
hits daily.
Information about the collection persists in an Oracle 7 database,
and keyword searches happen via a custom application written using
a Verity search engine. All of this is glued together using Perl.
Our hardware consists of a single Sun Ultra with lots of storage
(about 150GB) and an unnecessarily large monitor.
We switched to Apache/mod_perl after becoming frustrated with
Netscape Commerce Server performance. Although I don't have hard
numbers, I would estimate a factor of 2-5 times CGI performance.
Using mod_perl and Apache we've turned our "extremely loaded" server
into a "comfortably loaded" server, even allowing us room for some
software development. Mod_perl saved us from having to buy another
Ultra!
</p>
<p>
mod_perl scripts which search the archives of
<A HREF="http://theory.uwinnipeg.ca/search/cpan-search.html">CPAN</A>,
<A HREF="http://theory.uwinnipeg.ca/search/ctan-search.html">CTAN</A>,
<A HREF="http://theory.uwinnipeg.ca/search/linux-search.html">Linux</A>,
<A HREF="http://theory.uwinnipeg.ca/search/tetex.html">teTeX</A>
(a Unix TeX system), and
MuPAD (a symbolic math program) are available at
<A HREF="http://theory.uwinnipeg.ca/">theory.uwinnipeg.ca</A>.
These scripts query an mSQL database via various criteria, and employ
the CPAN multiplexer code to choose a nearby mirror of the archive,
if available and desired.
</p>
<p>
<A HREF="http://www.pbs.org/">PBS Online</A> is using mod_perl to
improve the speed of its heavily loaded servers, having replaced CGI for
games, navigation control, and commerce.
</p>
<p>
<a href='http://www.oreilly.com/'>O'Reilly and Associates</a>
uses mod_perl to control access to their
<a href='http://online-books.oreilly.com/books/'>online books site</a>.
Every request for a document runs through a mod_perl script, which checks
username and password, and may eventually provide dynamic data.
</p>
<p>
<a href="http://home.wired.com/">WIRED Digital</a>
uses mod_perl (on linux and solaris) for several
applications. On HotBot mod_perl is used for the <a
href="http://members.hotbot.com/">HotBot mail and
HotBot homepages</a> application, interfacing with a third-party
application by WhoWhere. It is also used widely throughout
<a href="http://www.hotwired.com/">HotWired</a>,
<a href="http://www.wired.com/news/">Wired News</a>,
<a href="http://www.webmonkey.com/"> Webmonkey </a>
and <a href="http://www.suck.com/">Suck.com </a> as a replacement for
CGI scripts,
and to control the HotWired member pages. Mod_perl also runs two
servers that redirect requests for external pages from within WIRED
sites. WIRED Digital regards mod_perl as an important and highly
valuable addition to the server development toolset, and will continue
to consider mod_perl as a strong candidate for solutions.
</p>
<p>
<a href="http://www.medimatch.com/">MediMatch</a> uses Apache and
Stronghold on Solaris, and makes use of mod_perl almost exclusively
for its medical employment services database. Originally coded to use
standard CGI, when we switched over to mod_perl to maintain persistent
connections to a Sybase database, and for data caching in various
fashions, we saw a speedup ranging from 25-500% (varying on the type
and depth of the search queries). We also use mod_perl to facilitate
the caching of CGI-parsed HTML pages, which reduced the speed of
requests to approximately that of ordinary static HTML.
</p>
<p>
CMPnet <a href="http://www.cmpnet.com/">www.cmpnet.com</a>, a
technology information network, uses
mod_perl to generate 70% of its pages - over half a million hits a day.
Our network includes TechWeb <a
href="http://www.techweb.com/">www.techweb.com</a>, a technology
news site, and FileMine
<a href="http://www.filemine.com/">www.filemine.com</a>, a shareware
site.
We switched to mod_perl because we couldn't stand writing and
debugging NSAPI code for Netscape servers anymore. Needless to say the
productivity improvement was immeasurable. Recently our company
evaluated several top commercial web publishing platforms (Vignette's
StoryServer, INSO's DynaBase) for a possible switchover. But in the
end we stayed with our mod_perl architecture and agreed to standardize
our company's internet operations on it!
</p>
<p>
Mark A. Downing tells us:
I have been running an <a href="http://www.wm7d.net/">Amateur
Radio</a> callsign database (with 800k records)
on my web page for nearly two years, originally with WebSQL. But due to the
lack of portability, I rewrote my scripts using sybperl. Now with mod_perl,
I have successfully cut the time to complete a lookup from nearly 5 seconds
to under 1 second (It takes longer to display the data than to do the
query). This was accomplished by creating persistant database connections
(to sybase) using mod_perl, and Apache is now able to establish those
connections upon startup. No longer do I have to wait for my original
scripts to connect and gather data.
</p>
<p>
Rob Malda tells that <a href="http://slashdot.org/">Slashdot.org</a> -
news for nerd, is a combination of Perl and MySQL. Slashdot runs under
mod_perl which keeps things nice and speedy.
</p>
<p>
<a href="http://www.mojam.com/">Mojam</a> is a new Internet music
media company with the goal of attracting the largest audience of
music listeners and players anywhere. Mojam is different that
RollingStone or MTV because it focuses on helping new bands get their
music out to the listeners by posting thier show dates, music clips,
and news releases. mojam.com is 100% Apache mod_perl running Mason to
dynamically deliver all of it's pages.
</p>
<p>
</p>
<hr>
</body>
</html>
1.1 modperl-docs/src/outstanding/stats/config.cfg
Index: config.cfg
===================================================================
use vars qw(@c);
@c = (
id => 'stats',
stitle => "Statistics",
title => "mod_perl World Wide Deployment Statistics",
abstract => <<EOA,
Discover how mod_perl is used worldwide, through graphs and numbers.
EOA
chapters => [
qw(
netcraft.html
securityspace.html
)
],
copy_glob => [
qw(
logo-middle.png
logo.png
graph.pl
input.data
pseudo-graph.jpg
graph.jpg
)
],
);
1.1 modperl-docs/src/outstanding/stats/graph.jpg
<<Binary file>>
1.1 modperl-docs/src/outstanding/stats/graph.pl
Index: graph.pl
===================================================================
#!/usr/bin/perl
# this script builds 2 graphs from 2 data sets, expects to find a file
# with data of name "input.data" in the script's directory, data should be
# separated with tabs, e.g:
#May 1999 156458 36976
#April 1999 134255 32570
#March 1999 112399 28482
#
# the 1st col describes a number of hostnames, 2nd - Unique IP numbers
#
# first graph (graph.gif) is a normal one
#
# second graph (pseudo-graph.gif) is much smaller and includes points,
# with no other labels, but y axis. This graph should be linked to a
# bigger one (graph.gif)
#
# Note: you need GD::Graph package to be installed in order to use this
# script.
# This script is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
# by Stas Bekman <st...@stason.org>
# Aug 14 1999
#
# updated July 16 2001 to generate jpegs instead of gifs (since gif support
# was removed from libgd)
use GD::Graph::linespoints;
use strict;
print STDERR "Processing data\n";
my @data = read_data_from_csv("input.data")
or die "Cannot read data from input.data";
# make the Y axis to be optimally used
my $max_y = 0;
foreach (@{$data[1]},@{$data[2]}) {
$max_y = $_ if $_ > $max_y ;
}
# normalize it
$max_y = ( int $max_y / 1000 + 1 ) * 1000;
normal_graph();
pseudo_graph();
# plot a normal graph of points with all the info as possible
sub normal_graph{
my $my_graph = new GD::Graph::linespoints(600,400);
$my_graph->set(
x_label => 'Months',
y_label => 'Counts',
title => "mod_perl usage survey (numbers are by courtesy of netcraft.com).",
y_max_value => $max_y,
y_label_skip => 1,
x_label_skip => 3,
x_labels_vertical => 1,
x_label_position => 1/2,
markers => [ 1, 7 ],
marker_size => 2,
transparent => 1,
t_margin => 10,
b_margin => 10,
l_margin => 10,
r_margin => 10,
two_axes => 1,
logo => 'logo.png',
logo_position => 'LL',
);
#$my_graph->set( dclrs => [ qw(green pink blue cyan) ] );
$my_graph->set_x_label_font(GD::gdMediumBoldFont);
$my_graph->set_y_label_font(GD::gdMediumBoldFont);
$my_graph->set_x_axis_font(GD::gdMediumBoldFont);
$my_graph->set_y_axis_font(GD::gdMediumBoldFont);
$my_graph->set_title_font(GD::gdGiantFont);
$my_graph->set_legend('Hostnames','Unique IP numbers' );
$my_graph->set_legend_font(GD::gdMediumBoldFont);
open IMG, '>graph.jpg' or die $!;
print IMG $my_graph->plot(\@data)->jpeg(70);
close IMG;
# $my_graph->plot_to_gif( "graph.gif", \@data );
}
# plot a small graph of points with as least info as possible
sub pseudo_graph{
my $my_graph = new GD::Graph::linespoints(350,200);
# in this graph we don't want X labels to be printed
for (0..$#{$data[0]}) {
$data[0]->[$_] = "";
}
$my_graph->set(
y_max_value => $max_y,
y_label_skip => 0,
x_label_skip => 1,
x_labels_vertical => 1,
x_label_position => 1/2,
markers => [ 1, 7 ],
marker_size => 2,
transparent => 1,
t_margin => 10,
b_margin => 10,
l_margin => 10,
r_margin => 10,
two_axes => 0,
logo => 'logo-middle.png',
logo_position => 'UL',
);
#$my_graph->set( dclrs => [ qw(green pink blue cyan) ] );
$my_graph->set_x_label_font(GD::gdMediumBoldFont);
$my_graph->set_y_label_font(GD::gdSmallFont);
$my_graph->set_x_axis_font(GD::gdMediumBoldFont);
$my_graph->set_y_axis_font(GD::gdSmallFont);
$my_graph->set_title_font(GD::gdGiantFont);
$my_graph->set_legend('Hostnames','Unique IP numbers' );
$my_graph->set_legend_font(GD::gdSmallFont);
open IMG, '>pseudo-graph.jpg' or die $!;
print IMG $my_graph->plot(\@data)->jpeg(70);
close IMG;
#$my_graph->plot_to_gif( "pseudo-graph.gif", \@data );
}
sub read_data_from_csv
{
my $fn = shift;
my @d = ();
open(ZZZ, $fn) || return ();
while (<ZZZ>)
{
chomp;
# you might want Text::CSV here
my @row = split /\t/;
for (my $i = 0; $i <= $#row; $i++)
{
undef $row[$i] if ($row[$i] eq 'undef');
unshift @{$d[$i]}, $row[$i];
}
}
close (ZZZ);
return @d;
}
1.1 modperl-docs/src/outstanding/stats/index.html
Index: index.html
===================================================================
<html>
<head>
<title>Server survey results</title>
</head>
<body bgcolor=#ffffff >
Thanks to Mike Prettejohn <mhp@netcraft.co.uk> for grep'ing
mod_perl in the <a href="http://www.netcraft.co.uk/">netcraft</a> survey.
<p>
If you're developer behind one of these mod_perl sites, Netcraft has
<a href="http://www.netcraft.co.uk/jobs/technical.html">development positions</a> available
which require mod_perl experience.
<p>
SecuritySpace provides yet
<a href="http://www.securityspace.com/s_survey/data/man.200110/apachemods.html">
another report</a>. Make sure to click on the menu at the left to pick
the latest month, since the link hardcodes the month. They also
provide a <a href="http://www.securityspace.com/s_survey/data/man.200110/apachemods.html?mod=cGVybA==">page</a> similar to this one with statistics and a graph based
on the data collected by <a
href="http://www.securityspace.com/">www.securityspace.com</a>
<p>
<hr>
<IMG SRC="graph.jpg" HEIGHT=400 WIDTH=700 BORDER=0 ALT="Graph">
<BR>
<BR>
The <A HREF="graph.pl"> script </A> that produced this graph and the <A HREF="input.data">
raw input data </A>
<BR>
<p>
If your site is running mod_perl, feel free
to <a href="http://www.netcraft.co.uk/cgi-bin/Survey/whats/">tell</a>
the netcraft survey.
<p>
Note that as of October 97, the list of URLs for servers running
mod_perl has passed Netcraft's limit for publication. (Actually, we
passed it in September, but Mike gave it to us anyhow).
<p>
<!-- reports can be retrieved from
http://www.netcraft.com/survey/Reports/200106/mod_perl.txt,
adjust the year/month if needed -->
<table cellpadding=3 border=1>
<tr><td>Survey</td><td>hostnames</td><td>unique ip addresses</td></tr>
<tr><td> October 2001 </td><td>2540267</td><td>293633</td></tr>
<tr><td> September 2001 </td><td>2899420</td><td>281192</td></tr>
<tr><td> August 2001 </td><td>2823060</td><td>283180</td></tr>
<tr><td> July 2001 </td><td>2936558</td><td>281471</td></tr>
<tr><td> June 2001 </td><td>2802093</td><td>273827</td></tr>
<tr><td> May 2001 </td><td>2475367</td><td>265466</td></tr>
<tr><td> April 2001 </td><td>2482288</td><td>256862</td></tr>
<tr><td> March 2001 </td><td>2298821</td><td>244201</td></tr>
<tr><td> February 2001 </td><td>2203353</td><td>230502</td></tr>
<tr><td> January 2001 </td><td>2001011</td><td>225123</td></tr>
<tr><td> December 2000 </td><td>1811864</td><td>214467</td></tr>
<tr><td> November 2000 </td><td>1524620</td><td>197931</td></tr>
<tr><td> October 2000 </td><td>1597399</td><td>183327</td></tr>
<tr><td> September 2000 </td><td>1508381</td><td>170758</td></tr>
<tr><td> August 2000 </td><td>1476602</td><td>152073</td></tr>
<tr><td> July 2000 </td><td>1286714</td><td>132940</td></tr>
<tr><td> June 2000 </td><td>1080206</td><td>123008</td></tr>
<tr><td> May 2000 </td><td>852675</td><td>108327</td></tr>
<tr><td> April 2000 </td><td>736805</td><td>95994</td></tr>
<tr><td> March 2000 </td><td>612425</td><td>85749</td></tr>
<tr><td> February 2000 </td><td>478614</td><td>74515</td></tr>
<tr><td> January 2000 </td><td>418742</td><td>66239</td></tr>
<tr><td> December 1999 </td><td>411008</td><td>63993</td></tr>
<tr><td> November 1999 </td><td>384018</td><td>60116</td></tr>
<tr><td> October 1999 </td><td>342285</td><td>55688</td></tr>
<tr><td> September 1999 </td><td>282232</td><td>50334</td></tr>
<tr><td> August 1999 </td><td>248925</td><td>51413</td></tr>
<tr><td> July 1999 </td><td>202081</td><td>42183</td></tr>
<tr><td> June 1999 </td><td>183793</td><td>40484</td></tr>
<tr><td> May 1999 </td><td>156458</td><td>36976</td></tr>
<tr><td> April 1999 </td><td>134255</td><td>32570</td></tr>
<tr><td> March 1999 </td><td>112399</td><td>28482</td></tr>
<tr><td> February 1999 </td><td>103088</td><td>25854</td></tr>
<tr><td> January 1999 </td><td>81982</td><td>23742</td></tr>
<tr><td> December 1998 </td><td>72545</td><td>22598</td></tr>
<tr><td> November 1998 </td><td>63692</td><td>19239</td></tr>
<tr><td> October 1998 </td><td>64171</td><td>15055</td></tr>
<tr><td> September 1998 </td><td>57365</td><td>12540</td></tr>
<tr><td> August 1998 </td><td>54450</td><td>12438</td></tr>
<tr><td> July 1998 </td><td>47068</td><td>9904</td></tr>
<tr><td> June 1998 </td><td>42508</td><td>9237</td></tr>
<tr><td> May 1998 </td><td>39535</td><td>8682</td></tr>
<tr><td> April 1998 </td><td>33696</td><td>6980</td></tr>
<tr><td> March 1998 </td><td>30075</td><td>6439</td></tr>
<tr><td> February 1998 </td><td>25343</td><td>5607</td></tr>
<tr><td> January 1998 </td><td>16591</td><td>4343</td></tr>
<tr><td> December 1997 </td><td>14624</td><td>3814</td></tr>
<tr><td> November 1997 </td><td>13303</td><td>3431</td></tr>
<tr><td> October 1997 </td><td>12654</td><td>3045</td></tr>
<tr><td> <a href="aug97.html">September 1997</a></td><td>7165</td><td>2256</td></tr>
<tr><td> <a href="july97.html">August 1997</a></td><td>1501</td><td>1228</td></tr>
<tr><td><a href="june97.html">July 1997</a></td><td>1138</td><td>580</td></tr>
<tr><td> <a href="may97.html">June 1997</a></td><td>312</td><td>239</td></tr>
</table>
</body>
</html>
1.1 modperl-docs/src/outstanding/stats/input.data
Index: input.data
===================================================================
March 2002 3478130 393860
February 2002 3354370 388506
January 2002 2819847 341458
December 2001 2720503 326545
November 2001 2651419 322595
October 2001 2540267 293633
September 2001 2899420 281192
August 2001 2823060 283180
July 2001 2936558 281471
June 2001 2802093 273827
May 2001 2475367 265466
April 2001 2482288 256862
March 2001 2298821 244201
February 2001 2203353 230502
January 2001 2001011 225123
December 2000 1811864 214467
November 2000 1524620 197931
October 2000 1597399 183327
September 2000 1508381 170758
August 2000 1476602 152073
July 2000 1286714 132940
June 2000 1080206 123008
May 2000 852675 108327
April 2000 736805 95994
March 2000 612425 85749
February 2000 478614 74515
January 2000 418742 66239
December 1999 411008 63993
November 1999 384018 60116
October 1999 342285 55688
September 1999 282232 50334
August 1999 248925 51413
July 1999 202081 42183
June 1999 183793 40484
May 1999 156458 36976
April 1999 134255 32570
March 1999 112399 28482
February 1999 103088 25854
January 1999 81982 23742
December 1998 72545 22598
November 1998 63692 19239
October 1998 64171 15055
September 1998 57365 12540
August 1998 54450 12438
July 1998 47068 9904
June 1998 42508 9237
May 1998 39535 8682
April 1998 33696 6980
March 1998 30075 6439
February 1998 25343 5607
January 1998 16591 4343
December 1997 14624 3814
November 1997 13303 3431
October 1997 12654 3045
September 1997 7165 2256
August 1997 1501 1228
July 1997 1138 580
June 1997 312 239
1.1 modperl-docs/src/outstanding/stats/logo-middle.png
<<Binary file>>
1.1 modperl-docs/src/outstanding/stats/logo.png
<<Binary file>>
1.1 modperl-docs/src/outstanding/stats/netcraft.html
Index: netcraft.html
===================================================================
<html>
<head>
<title>Netcraft's mod_perl statistics</title>
</head>
<body bgcolor=#ffffff >
<hr>
<img src="graph.jpg" height=400 width=600 border=0 alt="Netcraft mod_perl usage Graph">
<br>
<br>
The <a href="graph.pl"> script </a> that produced this graph and the <a href="input.data">
raw input data </a>
<br>
<p> If your site is running mod_perl, <a
href="http://www.netcraft.co.uk/up/graph/">tell</a> the Netcraft
survey.
</p>
<p>
<!-- monthly reports can be retrieved from
http://www.netcraft.com/survey/Reports/200106/mod_perl.txt,
adjust the year/month if needed -->
</p>
<table cellpadding="3" border="1" cellspacing="0">
<tr><td>Survey</td><td>hostnames</td><td>unique ip addresses</td></tr>
<tr><td> March 2002 </td><td>3478130</td><td>393860</td></tr>
<tr><td> February 2002 </td><td>3354370</td><td>388506</td></tr>
<tr><td> January 2002 </td><td>2819847</td><td>341458</td></tr>
<tr><td> December 2001 </td><td>2720503</td><td>326545</td></tr>
<tr><td> November 2001 </td><td>2651419</td><td>322595</td></tr>
<tr><td> October 2001 </td><td>2540267</td><td>293633</td></tr>
<tr><td> September 2001 </td><td>2899420</td><td>281192</td></tr>
<tr><td> August 2001 </td><td>2823060</td><td>283180</td></tr>
<tr><td> July 2001 </td><td>2936558</td><td>281471</td></tr>
<tr><td> June 2001 </td><td>2802093</td><td>273827</td></tr>
<tr><td> May 2001 </td><td>2475367</td><td>265466</td></tr>
<tr><td> April 2001 </td><td>2482288</td><td>256862</td></tr>
<tr><td> March 2001 </td><td>2298821</td><td>244201</td></tr>
<tr><td> February 2001 </td><td>2203353</td><td>230502</td></tr>
<tr><td> January 2001 </td><td>2001011</td><td>225123</td></tr>
<tr><td> December 2000 </td><td>1811864</td><td>214467</td></tr>
<tr><td> November 2000 </td><td>1524620</td><td>197931</td></tr>
<tr><td> October 2000 </td><td>1597399</td><td>183327</td></tr>
<tr><td> September 2000 </td><td>1508381</td><td>170758</td></tr>
<tr><td> August 2000 </td><td>1476602</td><td>152073</td></tr>
<tr><td> July 2000 </td><td>1286714</td><td>132940</td></tr>
<tr><td> June 2000 </td><td>1080206</td><td>123008</td></tr>
<tr><td> May 2000 </td><td>852675</td><td>108327</td></tr>
<tr><td> April 2000 </td><td>736805</td><td>95994</td></tr>
<tr><td> March 2000 </td><td>612425</td><td>85749</td></tr>
<tr><td> February 2000 </td><td>478614</td><td>74515</td></tr>
<tr><td> January 2000 </td><td>418742</td><td>66239</td></tr>
<tr><td> December 1999 </td><td>411008</td><td>63993</td></tr>
<tr><td> November 1999 </td><td>384018</td><td>60116</td></tr>
<tr><td> October 1999 </td><td>342285</td><td>55688</td></tr>
<tr><td> September 1999 </td><td>282232</td><td>50334</td></tr>
<tr><td> August 1999 </td><td>248925</td><td>51413</td></tr>
<tr><td> July 1999 </td><td>202081</td><td>42183</td></tr>
<tr><td> June 1999 </td><td>183793</td><td>40484</td></tr>
<tr><td> May 1999 </td><td>156458</td><td>36976</td></tr>
<tr><td> April 1999 </td><td>134255</td><td>32570</td></tr>
<tr><td> March 1999 </td><td>112399</td><td>28482</td></tr>
<tr><td> February 1999 </td><td>103088</td><td>25854</td></tr>
<tr><td> January 1999 </td><td>81982</td><td>23742</td></tr>
<tr><td> December 1998 </td><td>72545</td><td>22598</td></tr>
<tr><td> November 1998 </td><td>63692</td><td>19239</td></tr>
<tr><td> October 1998 </td><td>64171</td><td>15055</td></tr>
<tr><td> September 1998 </td><td>57365</td><td>12540</td></tr>
<tr><td> August 1998 </td><td>54450</td><td>12438</td></tr>
<tr><td> July 1998 </td><td>47068</td><td>9904</td></tr>
<tr><td> June 1998 </td><td>42508</td><td>9237</td></tr>
<tr><td> May 1998 </td><td>39535</td><td>8682</td></tr>
<tr><td> April 1998 </td><td>33696</td><td>6980</td></tr>
<tr><td> March 1998 </td><td>30075</td><td>6439</td></tr>
<tr><td> February 1998 </td><td>25343</td><td>5607</td></tr>
<tr><td> January 1998 </td><td>16591</td><td>4343</td></tr>
<tr><td> December 1997 </td><td>14624</td><td>3814</td></tr>
<tr><td> November 1997 </td><td>13303</td><td>3431</td></tr>
<tr><td> October 1997 </td><td>12654</td><td>3045</td></tr>
<tr><td> September 1997 </td><td>7165</td><td>2256</td></tr>
<tr><td> August 1997 </td><td>1501</td><td>1228</td></tr>
<tr><td> July 1997 </td><td>1138</td><td>580</td></tr>
<tr><td> June 1997 </td><td>312</td><td>239</td></tr>
</table>
</body>
</html>
1.1 modperl-docs/src/outstanding/stats/pseudo-graph.jpg
<<Binary file>>
1.1 modperl-docs/src/outstanding/stats/securityspace.html
Index: securityspace.html
===================================================================
<html>
<head>
<title>Security Space's mod_perl statistics</title>
</head>
<body bgcolor="#ffffff">
<p>
SecuritySpace provides <a
href="http://www.securityspace.com/s_survey/data/man.200203/apachemods.html">
mod_perl usage report</a>. Once you reach their site, make sure to
click on the menu at the left to pick the latest month, since the link
hardcodes the month. They also provide a <a
href="http://www.securityspace.com/s_survey/data/man.200203/apachemods.html?mod=cGVybA==">page</a>
similar to this one with statistics and a graph based on the data
collected by <a
href="http://www.securityspace.com/">www.securityspace.com</a>
</p>
</body>
</html>
1.1 modperl-docs/src/outstanding/success_stories/README
Index: README
===================================================================
WARNING: All the *.pod files are autogenerated, do not edit them
directly! Instead, adjust the corresponding .txt files.
After applying modifications, make sure to run:
% ./make.pl file.txt file2.txt ...
or to run all files
% ./make.pl
This run will generate .pod files and link them to the main index.
Don't forget to add both files (.txt and the generated .pod) to cvs
1.1 modperl-docs/src/outstanding/success_stories/adultad.pod
Index: adultad.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Performance raised from 1.5 banner per second to over 20 banners per second, 10 million banners a week without a problem
=head1 Marshall Dudley E<lt>mdudley (at) EXECONN.COME<gt> exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 10:30:10 -0500
=back
Lincoln Stein wrote:
>
> Hi All,
>
> I'm looking for more mod_perl success stories like the one that Jeff
> posted the other day. They will be used for vignettes in an
> introductory chapter of the book that Doug and I are writing. If you
> have a story you'd like to share (particularly one in which mod_perl
> "defeats" one of its competitors) could you mail it to me or post it
> to the list? For the vignettes we need some sort of identifying
> information, either along the lines of "a major Southwestern
> University" or "Kulturbox company of Berlin, Germany".
>
> Jeff, do you mind us using your story and identifying Texas A&M
> directly?
>
> Lincoln
You may not want to touch this one, but adultad.com contracted me to fix
their adult banner exchange to where it could throw more than 1.5
banners a second. I put it under mod_perl, and it now tops out at
slightly over 20 banners per second. It is now throwing approximately
10 Million banners a week solid without a problem. The banner exchange
(both banner throwing/logging and click-thru redirection/logging) is
running 100% under mod_perl.
Marshall
=cut
1.1 modperl-docs/src/outstanding/success_stories/adultad.txt
Index: adultad.txt
===================================================================
From: Marshall Dudley <md...@EXECONN.COM>
Organization: The Executive Connection, Inc.
Date: Fri, 6 Mar 1998 10:30:10 -0500
Subject: Performance raised from 1.5 banner per second to over 20 banners per second, 10 million banners a week without a problem
Lincoln Stein wrote:
>
> Hi All,
>
> I'm looking for more mod_perl success stories like the one that Jeff
> posted the other day. They will be used for vignettes in an
> introductory chapter of the book that Doug and I are writing. If you
> have a story you'd like to share (particularly one in which mod_perl
> "defeats" one of its competitors) could you mail it to me or post it
> to the list? For the vignettes we need some sort of identifying
> information, either along the lines of "a major Southwestern
> University" or "Kulturbox company of Berlin, Germany".
>
> Jeff, do you mind us using your story and identifying Texas A&M
> directly?
>
> Lincoln
You may not want to touch this one, but adultad.com contracted me to fix
their adult banner exchange to where it could throw more than 1.5
banners a second. I put it under mod_perl, and it now tops out at
slightly over 20 banners per second. It is now throwing approximately
10 Million banners a week solid without a problem. The banner exchange
(both banner throwing/logging and click-thru redirection/logging) is
running 100% under mod_perl.
Marshall
1.1 modperl-docs/src/outstanding/success_stories/allakhazam.com.pod
Index: allakhazam.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Allakhazam's Magical Realm
=head1 Andy Sharp E<lt>asharp E<lt>atE<gt> nector.comE<gt> exclaimed:
=over
=item *
Date: Wed Nov 07 21:20:11 2001
=item *
Traffic: 1,800,000 Unique Page Loads per day
=item *
URL: http://everquest.allakhazam.com, http://camelot.allakhazam.com, http://eqbeastiary.allakhazam.com.
=back
Almost everything on the site runs in mod_perl. We have 4 systems
running the site, one static server (PIII 450, Linux,
Apache/mod_proxy). Two database servers (Dual P800, FreeBSD, Mysql)
which are replicated, and the one mod_perl server (PIII 800, FreeBSD,
Apache/mod_perl). The idea to use the proxy server to intercept any
requests for text or images which was not dynamic came directly from
the mod_perl guide (http://perl.apache.org/guide/).
It's been a rough ride sometimes, as I've been in the process of
learning the guts of Apache and more about perl than I ever thought
I'd need to know. Since the site first started, I've migrated from a
Module based system, to Apache::Registry (I wasn't writing good enough
perl for the module based system to work well), and more recently have
been migrating high volume scripts back to the Module/Handler based
system.
That's been the true benefit of mod_perl in developing this site.
It's been a learning process as we roll out a new application or area
of the site, watching our hit load go up and up, and then spending
hours looking for performance bottlenecks in code which was never
intended to run as often as it does.
mod_perl gives us an incredibly fast development time. Sometimes, the
speed of development does mean than lower quality code creeps into the
production environment, but it allows us (me) to get things done which
would take much much longer in another application environment. Perls
"there are many ways to do it" extends into mod_perl, meaning that I
can try something new quickly, and come back later to optimize it.
Amoung the features we have on the site:
Application layer security, based on a custom written Session tracking
system. A recursively threaded forum system on every page, this
system accounts for the bulk of the page views. It's also real time
in tems of both comments being added, and ratings to the messages
propigating through. User uploaded data through out the site, we
allow players to track their characters, add meta information to
database entries. Detailed web based administration system based on
the Application security layer.
The speed of development of perl, coupled with the rich resources of
CPAN, and the incredible power of mod_perl have made this site
possible.
Running the same site in other technologies would have been possible,
but would either require more hardware, or more time to develop.
=cut
1.1 modperl-docs/src/outstanding/success_stories/allakhazam.com.txt
Index: allakhazam.com.txt
===================================================================
From: Andy Sharp <asharp <at> nector.com>
Organization:
Date: Wed Nov 07 21:20:11 2001
Subject: Allakhazam's Magical Realm
Traffic: 1,800,000 Unique Page Loads per day
URL: http://everquest.allakhazam.com, http://camelot.allakhazam.com, http://eqbeastiary.allakhazam.com.
Almost everything on the site runs in mod_perl. We have 4 systems
running the site, one static server (PIII 450, Linux,
Apache/mod_proxy). Two database servers (Dual P800, FreeBSD, Mysql)
which are replicated, and the one mod_perl server (PIII 800, FreeBSD,
Apache/mod_perl). The idea to use the proxy server to intercept any
requests for text or images which was not dynamic came directly from
the mod_perl guide (http://perl.apache.org/guide/).
It's been a rough ride sometimes, as I've been in the process of
learning the guts of Apache and more about perl than I ever thought
I'd need to know. Since the site first started, I've migrated from a
Module based system, to Apache::Registry (I wasn't writing good enough
perl for the module based system to work well), and more recently have
been migrating high volume scripts back to the Module/Handler based
system.
That's been the true benefit of mod_perl in developing this site.
It's been a learning process as we roll out a new application or area
of the site, watching our hit load go up and up, and then spending
hours looking for performance bottlenecks in code which was never
intended to run as often as it does.
mod_perl gives us an incredibly fast development time. Sometimes, the
speed of development does mean than lower quality code creeps into the
production environment, but it allows us (me) to get things done which
would take much much longer in another application environment. Perls
"there are many ways to do it" extends into mod_perl, meaning that I
can try something new quickly, and come back later to optimize it.
Amoung the features we have on the site:
Application layer security, based on a custom written Session tracking
system. A recursively threaded forum system on every page, this
system accounts for the bulk of the page views. It's also real time
in tems of both comments being added, and ratings to the messages
propigating through. User uploaded data through out the site, we
allow players to track their characters, add meta information to
database entries. Detailed web based administration system based on
the Application security layer.
The speed of development of perl, coupled with the rich resources of
CPAN, and the incredible power of mod_perl have made this site
possible.
Running the same site in other technologies would have been possible,
but would either require more hardware, or more time to develop.
1.1 modperl-docs/src/outstanding/success_stories/bsat.pod
Index: bsat.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
BSat
=head1 Mike Fletcher E<lt>lemur1 (at) MINDSPRING.COME<gt> exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 13:01:58 -0500
=back
At my former employer (Aaaahh . . . Sorry, just feels good
to say that :), I rewrote a commercial interface to a defect tracking
system. The original product was a bunch of Bourne shell scripts
that all sourced one humoungus configuration script. It took on the
order of 10-12 seconds to return some pages (and some of those weren't
even excuting any queries against the defect database) on a mostly
idle SS20. Under mod_perl, that dropped to approximately 2-4 seconds
for everything but really large queries (i.e. everything in the db).
=cut
1.1 modperl-docs/src/outstanding/success_stories/bsat.txt
Index: bsat.txt
===================================================================
Subject: BSat
From: Mike Fletcher <le...@MINDSPRING.COM>
Date: Fri, 6 Mar 1998 13:01:58 -0500
At my former employer (Aaaahh . . . Sorry, just feels good
to say that :), I rewrote a commercial interface to a defect tracking
system. The original product was a bunch of Bourne shell scripts
that all sourced one humoungus configuration script. It took on the
order of 10-12 seconds to return some pages (and some of those weren't
even excuting any queries against the defect database) on a mostly
idle SS20. Under mod_perl, that dropped to approximately 2-4 seconds
for everything but really large queries (i.e. everything in the db).
1.1 modperl-docs/src/outstanding/success_stories/calmaeth.maths.uwa.edu.au.pod
Index: calmaeth.maths.uwa.edu.au.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Computer Aided Teaching system at Mathematics Department at the University of Western Australia
=head1 Kevin Judd E<lt>kevin (at) MATHS.UWA.EDU.AUE<gt> exclaimed:
=over
=item *
Date: Mon, 9 Mar 1998 09:41:44 +0800
=back
At the Mathematics Department at the University of Western Australia I
have a web-based computer aided teaching system using mod_perl. The
students have individual weekly assignments in calculus, statistics,
linear algebra with diagnostics and assessment built in. The system
relieves academic staff of the burden of assignment marking and provides
more personal interaction with students. The system requires database
management and connection to a computer algebra engine. The transfer from
a slow/unreliable/Macintosh/Hypercard/Mathematica system to a
fast/reliable/web system took a couple of months and I had never
programmed in perl before. The whole excersize was amazingly painless and
it was entirely mod_perl's doing.
http://CalMaeth.maths.uwa.edu.au
Kevin
=cut
1.1 modperl-docs/src/outstanding/success_stories/calmaeth.maths.uwa.edu.au.txt
Index: calmaeth.maths.uwa.edu.au.txt
===================================================================
Subject: Computer Aided Teaching system at Mathematics Department at the University of Western Australia
From: Kevin Judd <ke...@MATHS.UWA.EDU.AU>
Date: Mon, 9 Mar 1998 09:41:44 +0800
At the Mathematics Department at the University of Western Australia I
have a web-based computer aided teaching system using mod_perl. The
students have individual weekly assignments in calculus, statistics,
linear algebra with diagnostics and assessment built in. The system
relieves academic staff of the burden of assignment marking and provides
more personal interaction with students. The system requires database
management and connection to a computer algebra engine. The transfer from
a slow/unreliable/Macintosh/Hypercard/Mathematica system to a
fast/reliable/web system took a couple of months and I had never
programmed in perl before. The whole excersize was amazingly painless and
it was entirely mod_perl's doing.
http://CalMaeth.maths.uwa.edu.au
Kevin
1.1 modperl-docs/src/outstanding/success_stories/chapters.pl
Index: chapters.pl
===================================================================
@chapters = (
'www.bivio.com.pod'
);
1;
1.1 modperl-docs/src/outstanding/success_stories/colbychem.pod
Index: colbychem.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
ColbyChem: a free web server for ISIS/Host
=head1 jwkuehne (at) colby.edu (John Kuehne) exclaimed:
=over
=item *
Date: Wed, 13 May 1998 10:23:31 -0400 (EDT)
=back
Dear mod_perl gang,
The following is somewhat late in the "success story" thread of a few months
ago, but I think there might be some interest for the database crowd. Below is
a brief summary of a talk that I gave at a meeting in Philadelphia last week.
Sponsored by Molecular Designs Limited (MDL), the meeting was attended by
several hundred representatives of industry and government, and was concerned
with the problems related to large molecular and reaction databases, and their
use in combinatorial chemistry, drug discovery, etc. (These are databases
consisting of molecular structures and their models, and reactions. A database
user can pose an sql in the language of chemistry - molecular structures
drawn with ISIS/Draw or ChemDraw - to find data that have substructure
similarity, conformationally flexible similarity, reaction similarity,
and much more. The structures, models, and reactions are displayed using
MDL's chime plugin, itself based on RASMOL, which renders 'live' 3-D drawings
that can be rotated and displayed in a number of ways from within the web page.)
*******************************************************************************
Last November, Dr. Shattuck proposed that we build a reaction database of
reaction mechanisms studied by Dr. Mundy and his colleagues, using MDL's
reaction database software. Furthermore, it was his idea that we make
this a web project open to all. Our first idea was to buy a license for MDL's
ChemScape server, which links NetScape Enterprise server to MDL's database
library. Unfortunately, the upgrade from our current MDL license to include
ChemScape server was too expensive, not to mention NetScape Enterprise server.
I started working on a web server based on Apache and mod_perl that would act
as a gateway to MDL's database software.
Although MDL's database server protocol is not public, they do provide a
command line interface called hostcli, which has most of the functionality
of the proprietary server. The use of hostcli is restricted to one machine,
but within that machine one may run any number of hostcli processes.
ColbyChem, the project that I presented at the meeting, makes use of hostcli
by opening it on a pseudoterminal for each database user. The novel aspect
of ColbyChem is its use of the integrated Apache/perl server running in
single user (-X) mode for each database user.
Because perl is embedded in Apache, dynamic variables are retained between
calls to the server children. Certain Apache packages use this to open a
persistent database connection to industry standard databases such as Oracle,
but this is not an option with proprietary interfaces, such as MDL's.
In order to adapt this to the idea of opening hostcli on a pty for each user,
I run a dedicated Apache/perl daemon for each user, in single-mode (-X), on a
separate port. That way, each Apache daemon caches the perl program and
retains dynamic variables between calls. In essence, it becomes a new
application, composed of Apache and perl, running under my program. The
effect is similar to an X client. The browser is like the X server.
Entrance to ColbyChem is through a dedicated login daemon running on port 9000.
Upon receiving a valid login name, the daemon forks an Apache/perl daemon on
a port specified in a password-like file, and transfers the browser to this
new port. Authentication, which is very important here, is carried out entirely
on this new daemon. The user supplies a password. ColbyChem encrypts it
and compares with the encrypted password assigned to the user. If successful,
ColbyChem forks and execs hostcli on the pty. It then records the IP number
and sends back a cookie for secondary authentication upon browser reconnect.
The cookie is different for each session, is not based only on an easily guessed
system parameters like time or checksums, and does not reveal, to within the
limitations of crypt(), the original or encrypted password. My solution for
the cookie is to take the password, which is secret, and permute it using
rand() seeded by time. The permuted cleartext password is then encrypted and
sent back as the cookie. Thus, even if one knew the permutation order and
cookie, it would still be impossible to recover the original password.
ColbyChem presents side-by-side frames. The left frame contains a query
builder and controls for hit-list logic and display. The right frame displays
the data indented in the natural hierarchy of the database. Models, structures,
and reactions are displayed using MDL's chime plugin.
Essentially, ColbyChem is nothing more than a graphical front-end for hostcli,
written in 1200 lines of perl. The heart of ColbyChem is two routines, each
a page of code. The first routine, rd2perl, translates an export file from
hostcli into a perl data structure that has the hierarchy of the original
database, i.e. it imports the database into perl. The second routine
recursively descends the branches of this structure until it reaches the
tips, whereupon it prints out the data indented to reflect the database
hierarchy.
MDL has just delivered an Oracle interface to its molecular and reaction
databases. This opens the possibility of using established packages for
persistent database connnections that offer the flexibility of ChemScape
server from within Apache/perl, without the novel hack of running dedicated
daemons on separate ports for each user.
John Kuehne, Ph.D.
Information Technology Services
Colby College
4200 Mayflower Hill Drive
Waterville ME 04901
jwkuehne@colby.edu
207-872-3652
=cut
1.1 modperl-docs/src/outstanding/success_stories/colbychem.txt
Index: colbychem.txt
===================================================================
Subject: ColbyChem: a free web server for ISIS/Host
Date: Wed, 13 May 1998 10:23:31 -0400 (EDT)
From: jwkuehne@colby.edu (John Kuehne)
Dear mod_perl gang,
The following is somewhat late in the "success story" thread of a few months
ago, but I think there might be some interest for the database crowd. Below is
a brief summary of a talk that I gave at a meeting in Philadelphia last week.
Sponsored by Molecular Designs Limited (MDL), the meeting was attended by
several hundred representatives of industry and government, and was concerned
with the problems related to large molecular and reaction databases, and their
use in combinatorial chemistry, drug discovery, etc. (These are databases
consisting of molecular structures and their models, and reactions. A database
user can pose an sql in the language of chemistry - molecular structures
drawn with ISIS/Draw or ChemDraw - to find data that have substructure
similarity, conformationally flexible similarity, reaction similarity,
and much more. The structures, models, and reactions are displayed using
MDL's chime plugin, itself based on RASMOL, which renders 'live' 3-D drawings
that can be rotated and displayed in a number of ways from within the web page.)
*******************************************************************************
Last November, Dr. Shattuck proposed that we build a reaction database of
reaction mechanisms studied by Dr. Mundy and his colleagues, using MDL's
reaction database software. Furthermore, it was his idea that we make
this a web project open to all. Our first idea was to buy a license for MDL's
ChemScape server, which links NetScape Enterprise server to MDL's database
library. Unfortunately, the upgrade from our current MDL license to include
ChemScape server was too expensive, not to mention NetScape Enterprise server.
I started working on a web server based on Apache and mod_perl that would act
as a gateway to MDL's database software.
Although MDL's database server protocol is not public, they do provide a
command line interface called hostcli, which has most of the functionality
of the proprietary server. The use of hostcli is restricted to one machine,
but within that machine one may run any number of hostcli processes.
ColbyChem, the project that I presented at the meeting, makes use of hostcli
by opening it on a pseudoterminal for each database user. The novel aspect
of ColbyChem is its use of the integrated Apache/perl server running in
single user (-X) mode for each database user.
Because perl is embedded in Apache, dynamic variables are retained between
calls to the server children. Certain Apache packages use this to open a
persistent database connection to industry standard databases such as Oracle,
but this is not an option with proprietary interfaces, such as MDL's.
In order to adapt this to the idea of opening hostcli on a pty for each user,
I run a dedicated Apache/perl daemon for each user, in single-mode (-X), on a
separate port. That way, each Apache daemon caches the perl program and
retains dynamic variables between calls. In essence, it becomes a new
application, composed of Apache and perl, running under my program. The
effect is similar to an X client. The browser is like the X server.
Entrance to ColbyChem is through a dedicated login daemon running on port 9000.
Upon receiving a valid login name, the daemon forks an Apache/perl daemon on
a port specified in a password-like file, and transfers the browser to this
new port. Authentication, which is very important here, is carried out entirely
on this new daemon. The user supplies a password. ColbyChem encrypts it
and compares with the encrypted password assigned to the user. If successful,
ColbyChem forks and execs hostcli on the pty. It then records the IP number
and sends back a cookie for secondary authentication upon browser reconnect.
The cookie is different for each session, is not based only on an easily guessed
system parameters like time or checksums, and does not reveal, to within the
limitations of crypt(), the original or encrypted password. My solution for
the cookie is to take the password, which is secret, and permute it using
rand() seeded by time. The permuted cleartext password is then encrypted and
sent back as the cookie. Thus, even if one knew the permutation order and
cookie, it would still be impossible to recover the original password.
ColbyChem presents side-by-side frames. The left frame contains a query
builder and controls for hit-list logic and display. The right frame displays
the data indented in the natural hierarchy of the database. Models, structures,
and reactions are displayed using MDL's chime plugin.
Essentially, ColbyChem is nothing more than a graphical front-end for hostcli,
written in 1200 lines of perl. The heart of ColbyChem is two routines, each
a page of code. The first routine, rd2perl, translates an export file from
hostcli into a perl data structure that has the hierarchy of the original
database, i.e. it imports the database into perl. The second routine
recursively descends the branches of this structure until it reaches the
tips, whereupon it prints out the data indented to reflect the database
hierarchy.
MDL has just delivered an Oracle interface to its molecular and reaction
databases. This opens the possibility of using established packages for
persistent database connnections that offer the flexibility of ChemScape
server from within Apache/perl, without the novel hack of running dedicated
daemons on separate ports for each user.
John Kuehne, Ph.D.
Information Technology Services
Colby College
4200 Mayflower Hill Drive
Waterville ME 04901
jwkuehne@colby.edu
207-872-3652
1.1 modperl-docs/src/outstanding/success_stories/config.cfg
Index: config.cfg
===================================================================
# WARNING: this file is autogenerated, DO NOT EDIT IT
# WARNING: edit ./make.pl instead
use vars qw(@c);
@c = (
id => 'success_stories',
title => "Success Stories",
abstract => "Success reports from people using mod_perl",
body => {
bot => 'index_bot.html',
},
chapters => [
'adultad.pod',
'allakhazam.com.pod',
'bsat.pod',
'calmaeth.maths.uwa.edu.au.pod',
'colbychem.pod',
'iagore.com.pod',
'idl-net.pod',
'imdb.com.pod',
'openscape.org.pod',
'presto.pod',
'rent.com.pod',
'seds.org.pod',
'singlesheaven.com.pod',
'sms_server.pod',
'tamu.pod',
'tgix.pod',
'winamillion.msn.com.pod',
'wmboerse.pod',
'www.afp-direct.com.pod',
'www.bivio.com.pod',
'www.lind-waldock.com.pod',
'www.mobile.de.pod'
],
);
1;
1.1 modperl-docs/src/outstanding/success_stories/iagore.com.pod
Index: iagore.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
iAgora - Study, Travel, Work Abroad - Connecting Internationals
=head1 Roger Espel Llima E<lt>roger (at) iagora.netE<gt> exclaimed:
=over
=item *
Date: Fri, 16 Nov 2001 17:58:05 +0100
=item *
Traffic: several million hits / month
=item *
URL: http://www.iagora.com/
=back
iAgora was started in mid-1998, as a community site for
internationally minded people. After investigating the major
existing web development systems, we chose to go with Linux, Apache
and mod_perl. Three years later, we're very happy with this choice.
At iAgora we are constantly adding features and sections to our
site, and refining the ones we have. For us it was very important
to have a flexible platform, that would give us complete freedom in
organizing our code, and customizing how the pages are generated.
We have found the combination of Linux, Apache and mod_perl to be:
* cost-effective
There are no software licences to pay, the programs are easy enough
to install and configure, and many free support and middleware
modules can be obtained from CPAN.
* stable
The running servers have had very few crashes, and generally not
needed much maintenance. We have also found it very useful to be
able to administer the servers remotely.
* flexible
Since mod_perl lets perl access low-level hooks within Apache, it is
possible to have complete control over any aspect of its operation.
For instance, we found it easy and convenient to create virtual
URLs, where some path elements were matched to database queries
rather than directories on disk, while still basically serving an
HTML file.
* adapted for large site creation
Mod_perl gives us complete control over how HTML and perl code
interface to each other. By using a templating to the fullest
extent, we minimize the amount of duplication both in HTML and perl.
This also lets us have common navigation and design accross the
whole site, while separately maintaining the various form-based
applications that make the site.
Contact Person:
* Technical: Roger Espel Llima <ro...@iagora.net>
* Business: Philippe Negre <ph...@iagora.net>
=cut
1.1 modperl-docs/src/outstanding/success_stories/iagore.com.txt
Index: iagore.com.txt
===================================================================
Date: Fri, 16 Nov 2001 17:58:05 +0100
From: Roger Espel Llima <ro...@iagora.net>
To: Stas Bekman <st...@stason.org>
Subject: iAgora - Study, Travel, Work Abroad - Connecting Internationals
URL: http://www.iagora.com/
Traffic: several million hits / month
iAgora was started in mid-1998, as a community site for
internationally minded people. After investigating the major
existing web development systems, we chose to go with Linux, Apache
and mod_perl. Three years later, we're very happy with this choice.
At iAgora we are constantly adding features and sections to our
site, and refining the ones we have. For us it was very important
to have a flexible platform, that would give us complete freedom in
organizing our code, and customizing how the pages are generated.
We have found the combination of Linux, Apache and mod_perl to be:
* cost-effective
There are no software licences to pay, the programs are easy enough
to install and configure, and many free support and middleware
modules can be obtained from CPAN.
* stable
The running servers have had very few crashes, and generally not
needed much maintenance. We have also found it very useful to be
able to administer the servers remotely.
* flexible
Since mod_perl lets perl access low-level hooks within Apache, it is
possible to have complete control over any aspect of its operation.
For instance, we found it easy and convenient to create virtual
URLs, where some path elements were matched to database queries
rather than directories on disk, while still basically serving an
HTML file.
* adapted for large site creation
Mod_perl gives us complete control over how HTML and perl code
interface to each other. By using a templating to the fullest
extent, we minimize the amount of duplication both in HTML and perl.
This also lets us have common navigation and design accross the
whole site, while separately maintaining the various form-based
applications that make the site.
Contact Person:
* Technical: Roger Espel Llima <ro...@iagora.net>
* Business: Philippe Negre <ph...@iagora.net>
1.1 modperl-docs/src/outstanding/success_stories/idl-net.pod
Index: idl-net.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Performance increase of around 1100% compared to ASP
=head1 Abiga�l Duesberg E<lt>abi (at) idl-net.comE<gt> exclaimed:
=over
=item *
Date: Tue, 10 Nov 1998 23:16:31 +0100
=back
Hi,
I saw that there were requests for success stories, so here is ours.
We had to create 21 websites that basically had the same textual content
(but different ads+clickthroughs, different designs, different acces rights,
etc...), that needed to sometimes remain unseen and act as gateways to other
sites, and sometimes show up, with changing content and links according to
user rights. Also, it had to answer search engine bots with different
content using yet another database of robot user agents, as well as (coupled
with LWP stuff) try to relate automatic posting to search engine databases
to bots that came visiting (I know this isn't really good, but then, food is
sometimes more important, :-( ) and to optimise meta tags, resubmission,
etc...
It's all done in mod_perl, and in three days time it served a bit
more than 4 million mod_perl hits, and submitted 180.000 forms to search
engines. Everything's running on a 300mhz x86, with 128megs of ram. As a
comparison, the early development tests were done using CGI on the same PC,
and ASP on a more powerful one running IIS. We also tried using java
servlets but the results were so desperate that I will not mention them here
in respect for those people that use them. Given the time it took either for
the CGI to be finished, or for the ASP to connect to it's SQL Server 6.5 to
yield the right results or send the right page, we had been planning to buy
5 other PCs to get the job done with those solutions. Our benchmarks run
with about 15.000 iterations of a series of calls to the servers that were
under no other load show that ASP is hardly faster than CGI when database
access is used (and then you have to take into account the fact that the ASP
PC was fairly stronger, (I don't remember the CPU but it had 512megs of
ram), but that mod_perl induces a performance increase of around 1100% !!!
Also, it seems to be using less ressources (though I haven't tested that
fully), or using them for so short time lapses that one doesn't even notice.
The mod_perl development of the whole project was done by one person
in less than three weeks (stress-testing included) , and it is running
flawlessly.
I am looking for something stronger, but all that comes to mind is a deeply
heart-felt "Thanks !".
Abiga�l Duesberg
ASP - Lotus - LiveWire - Perl - Java
=cut
1.1 modperl-docs/src/outstanding/success_stories/idl-net.txt
Index: idl-net.txt
===================================================================
Date: Tue, 10 Nov 1998 23:16:31 +0100
From: Abiga�l Duesberg <ab...@idl-net.com>
Subject: Performance increase of around 1100% compared to ASP
Hi,
I saw that there were requests for success stories, so here is ours.
We had to create 21 websites that basically had the same textual content
(but different ads+clickthroughs, different designs, different acces rights,
etc...), that needed to sometimes remain unseen and act as gateways to other
sites, and sometimes show up, with changing content and links according to
user rights. Also, it had to answer search engine bots with different
content using yet another database of robot user agents, as well as (coupled
with LWP stuff) try to relate automatic posting to search engine databases
to bots that came visiting (I know this isn't really good, but then, food is
sometimes more important, :-( ) and to optimise meta tags, resubmission,
etc...
It's all done in mod_perl, and in three days time it served a bit
more than 4 million mod_perl hits, and submitted 180.000 forms to search
engines. Everything's running on a 300mhz x86, with 128megs of ram. As a
comparison, the early development tests were done using CGI on the same PC,
and ASP on a more powerful one running IIS. We also tried using java
servlets but the results were so desperate that I will not mention them here
in respect for those people that use them. Given the time it took either for
the CGI to be finished, or for the ASP to connect to it's SQL Server 6.5 to
yield the right results or send the right page, we had been planning to buy
5 other PCs to get the job done with those solutions. Our benchmarks run
with about 15.000 iterations of a series of calls to the servers that were
under no other load show that ASP is hardly faster than CGI when database
access is used (and then you have to take into account the fact that the ASP
PC was fairly stronger, (I don't remember the CPU but it had 512megs of
ram), but that mod_perl induces a performance increase of around 1100% !!!
Also, it seems to be using less ressources (though I haven't tested that
fully), or using them for so short time lapses that one doesn't even notice.
The mod_perl development of the whole project was done by one person
in less than three weeks (stress-testing included) , and it is running
flawlessly.
I am looking for something stronger, but all that comes to mind is a deeply
heart-felt "Thanks !".
Abiga�l Duesberg
ASP - Lotus - LiveWire - Perl - Java
1.1 modperl-docs/src/outstanding/success_stories/imdb.com.pod
Index: imdb.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
moviesdatabase.com or imdb.com
=head1 Rob Hartill E<lt>robh (at) IMDB.COME<gt> exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 21:35:40 +0000
=back
On Fri, 6 Mar 1998, Lincoln Stein wrote:
> Hi All,
>
> I'm looking for more mod_perl success stories like the one that Jeff
> posted the other day. They will be used for vignettes in an
> introductory chapter of the book that Doug and I are writing. If you
> have a story you'd like to share (particularly one in which mod_perl
> "defeats" one of its competitors) could you mail it to me or post it
> to the list? For the vignettes we need some sort of identifying
> information, either along the lines of "a major Southwestern
> University" or "Kulturbox company of Berlin, Germany".
We use mod_perl for just about everything and then some too; serving
around 1.25 million pageviews per day. All database lookups are handled
inside Apache via mod_perl. Each request also goes through several
mod_perl handlers and is then reformated on the fly with mod_perl SSI
to embed advertising banners and give different views of the site depending
on the hostname used.
--
Rob Hartill Internet Movie Database (Ltd)
http://www.moviedatabase.com/ .. a site for sore eyes.
The Internet Movie Database (as we all know, a mod_perl driven site) won a
1997 Webby as the best Film site on the web.
=cut
1.1 modperl-docs/src/outstanding/success_stories/imdb.com.txt
Index: imdb.com.txt
===================================================================
Subject: moviesdatabase.com or imdb.com
From: Rob Hartill <ro...@IMDB.COM>
Date: Fri, 6 Mar 1998 21:35:40 +0000
On Fri, 6 Mar 1998, Lincoln Stein wrote:
> Hi All,
>
> I'm looking for more mod_perl success stories like the one that Jeff
> posted the other day. They will be used for vignettes in an
> introductory chapter of the book that Doug and I are writing. If you
> have a story you'd like to share (particularly one in which mod_perl
> "defeats" one of its competitors) could you mail it to me or post it
> to the list? For the vignettes we need some sort of identifying
> information, either along the lines of "a major Southwestern
> University" or "Kulturbox company of Berlin, Germany".
We use mod_perl for just about everything and then some too; serving
around 1.25 million pageviews per day. All database lookups are handled
inside Apache via mod_perl. Each request also goes through several
mod_perl handlers and is then reformated on the fly with mod_perl SSI
to embed advertising banners and give different views of the site depending
on the hostname used.
--
Rob Hartill Internet Movie Database (Ltd)
http://www.moviedatabase.com/ .. a site for sore eyes.
The Internet Movie Database (as we all know, a mod_perl driven site) won a
1997 Webby as the best Film site on the web.
1.1 modperl-docs/src/outstanding/success_stories/index_bot.html
Index: index_bot.html
===================================================================
<html>
<head>
<title>index bottom</title>
</head>
<body bgcolor="white">
<p>If you have a success story to share please submit it to the <a
href="../../maillist/list-modperl.html">modperl</a> mailing
list. Please include the following information (using plain
text, no html please):</p>
<PRE>
URL:
Title:
Contact Person:
Traffic: (hits/day/month/whatever)
Success Story:
</PRE>
</body>
</html>
1.1 modperl-docs/src/outstanding/success_stories/make.pl
Index: make.pl
===================================================================
#!/usr/bin/perl
use strict;
use warnings;
use Template;
use Data::Dumper;
my %valid_headers = map {$_ => 1} qw(From Subject Date URL Traffic);
my $save_config_file = "config.cfg";
my $tmpl_file = "story.tmpl";
my $config = {
INCLUDE_PATH => ".",
OUTPUT_PATH => ".",
};
my $template = Template->new($config) or die $Template::ERROR, "\n";
my %map = (
'>' => 'E<gt>',
'<' => 'E<lt>',
'&' => 'E<amp>',
);
###############################################################################
my @files = @ARGV ? @ARGV : <*.txt>;
for my $file (@files) {
(my $pod_file = $file) =~ s/\.txt$/.pod/;
my $data = process($file);
generate($pod_file, $data);
}
update_config_file();
sub process {
my $file = shift;
open my $fh, $file or die "cannot open $file: $!";
local $/ = "";
my $headers = <$fh>;
local $/;
my $body = <$fh>;
close $fh;
# headers
my %headers = map {(/(\w+)\s*:\s+(.*)/ && $valid_headers{$1}) ? ($1,$2) : ()}
split /\n/, $headers;
my $title = delete $headers{Subject};
die "error: no Subject: in $file" unless $title;
my $author = delete $headers{From};
die "error: no From: in $file" unless $author;
# antispam
$author =~ s/\@/ (at) /;
# print Dumper \%headers;
# print "headers:\n$headers\n";
# print "body:\n$body\n";
my %data = (
title => $title,
author => $author,
headers => \%headers,
);
# cleanup for pod
_encode(\%data);
# keep the body as is
$body =~ s/^/ /mg;
$data{body} = $body;
return \%data;
}
sub generate {
my($filename, $data) = @_;
print "+++ writing $filename\n";
# print Dumper \@search_path;
my $vars = {story => $data};
$template->process($tmpl_file, $vars, $filename)
or die "error: ", $template->error(), "\n";
}
# automatically generate the config file maintain the list of
# available stories, so when new stories are added they will be
# automatically linked on the next rebuild.
sub update_config_file {
my $code = join ",\n" . " " x 8, map {qq('$_')} <*.pod>;
local $/;
my $tmpl = <DATA>;
$tmpl =~ s/\@CHAPTERS\@/$code/;
print "+++ generating $save_config_file\n";
open my $fh, '>', $save_config_file
or die "cannot open $save_config_file:$!";
print $fh $tmpl;
close $fh;
}
sub encode {
$_[0] =~ s/([>&<])/$map{$1}/g;
}
sub _encode {
my $ref = ref $_[0];
if (!$ref) {
encode($_[0]) if defined $_[0];
} elsif ($ref eq 'ARRAY') {
_encode($_) for @{$_[0]};
} elsif ($ref eq 'HASH') {
_encode($_[0]->{$_}) for keys %{$_[0]};
} else {
# nothing
}
}
__DATA__
# WARNING: this file is autogenerated, DO NOT EDIT IT
# WARNING: edit ./make.pl instead
use vars qw(@c);
@c = (
id => 'success_stories',
title => "Success Stories",
abstract => "Success reports from people using mod_perl",
body => {
bot => 'index_bot.html',
},
chapters => [
@CHAPTERS@
],
);
1;
1.1 modperl-docs/src/outstanding/success_stories/openscape.org.pod
Index: openscape.org.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Mod_perl Uber Alles
=head1 Christopher A. Thompson E<lt>x4 (at) ROCKETMAIL.COME<gt> exclaimed:
=over
=item *
Date: Wed, 15 Apr 1998 09:34:19 -0700
=back
I have put up a site that's a true testament to mod perl's power. (He
said humbly).
http://openscape.org now contains the new site that I've been writing
over the last 2 weeks.
The site is generated 100% dynamically by my module Obelisk.pm. Apache
1.2.6 and mod_perl 1.10 are used, and the module is inserted to run on
<Location />. MySQL and DBD::MySQL provide the back end object store.
I keep all text, news items, and the like in the SQL database. at
request time, the module takes the following steps.
$method = $r->method;
$loc = $r->uri;
$loc is then parsed out. Depending on the "page" requested the module
generates a page based on several SQL calls, and prints the result
back out. I pass args on to the subrequests this way too, such as
http://openscape.org/rnews/12 will read news item 12. It's all
handled in the URL parsing. For the forms handling when you post a
news item, I use CGI_Lite to grab things off POST. (If $method is
POST), since Apache:: cant grab POST by default. I plan to implement
my own POST handler, I just havent gotten around to it.
You can post comments on news items, and those will be generated
dynamically too. (a-la slashdot.org if you're familiar).
The amazing part of all this is twofold. First, it's all done in 427
lines of perl and 6 SQL tables. Slashdot is 2500 lines of code.
Second, while I dont have any definitive numbers, this looks like it's
going to scale very large. I've thrown a few large parallel requests
at it (just simple LWP gets, in many parallel processes) and it doesnt
seem to slow down. This box is just a P5/166 with 64megs RAM and Linux
2.0.31.
This all occurs with no CGI.pm, no Apache::Registry, no on disk
content but the Obelisk.pm. I am so spoiled by this method that I dont
think I can go back. I'm writing a Doc on the process and I'll have it
up soon. I know I'm not the first person to do this, but the process
doesnt seem to be exceedingly documented. Oh, and Obelisk will be
GPL'ed as soon as I gather it into a form that's fit for human
consumption.
Thanks Doug and crew for mod_perl.
-Chris
===
------------------------------------------------------------
Chris Thompson |I do not wish it to be misconstrued that
ct@x4.net | at no time was I not in total
ct@cthompson.org | Disagreement --Anonymous
------------------------------------------------------------
=cut
1.1 modperl-docs/src/outstanding/success_stories/openscape.org.txt
Index: openscape.org.txt
===================================================================
Subject: Mod_perl Uber Alles
From: Christopher A. Thompson <x4...@ROCKETMAIL.COM>
Date: Wed, 15 Apr 1998 09:34:19 -0700
I have put up a site that's a true testament to mod perl's power. (He
said humbly).
http://openscape.org now contains the new site that I've been writing
over the last 2 weeks.
The site is generated 100% dynamically by my module Obelisk.pm. Apache
1.2.6 and mod_perl 1.10 are used, and the module is inserted to run on
<Location />. MySQL and DBD::MySQL provide the back end object store.
I keep all text, news items, and the like in the SQL database. at
request time, the module takes the following steps.
$method = $r->method;
$loc = $r->uri;
$loc is then parsed out. Depending on the "page" requested the module
generates a page based on several SQL calls, and prints the result
back out. I pass args on to the subrequests this way too, such as
http://openscape.org/rnews/12 will read news item 12. It's all
handled in the URL parsing. For the forms handling when you post a
news item, I use CGI_Lite to grab things off POST. (If $method is
POST), since Apache:: cant grab POST by default. I plan to implement
my own POST handler, I just havent gotten around to it.
You can post comments on news items, and those will be generated
dynamically too. (a-la slashdot.org if you're familiar).
The amazing part of all this is twofold. First, it's all done in 427
lines of perl and 6 SQL tables. Slashdot is 2500 lines of code.
Second, while I dont have any definitive numbers, this looks like it's
going to scale very large. I've thrown a few large parallel requests
at it (just simple LWP gets, in many parallel processes) and it doesnt
seem to slow down. This box is just a P5/166 with 64megs RAM and Linux
2.0.31.
This all occurs with no CGI.pm, no Apache::Registry, no on disk
content but the Obelisk.pm. I am so spoiled by this method that I dont
think I can go back. I'm writing a Doc on the process and I'll have it
up soon. I know I'm not the first person to do this, but the process
doesnt seem to be exceedingly documented. Oh, and Obelisk will be
GPL'ed as soon as I gather it into a form that's fit for human
consumption.
Thanks Doug and crew for mod_perl.
-Chris
===
------------------------------------------------------------
Chris Thompson |I do not wish it to be misconstrued that
ct@x4.net | at no time was I not in total
ct@cthompson.org | Disagreement --Anonymous
------------------------------------------------------------
1.1 modperl-docs/src/outstanding/success_stories/presto.pod
Index: presto.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Forced to improve the quality
=head1 modus (at) PR.ES.TO exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 10:03:41 -0800
=back
At the risk of this becoming a giant mod_perl lovefest, I'll second that.
I've learned more about perl & apache in my dozen months or so of mod_perl
than in my many years of work with apache & perl. mod_perl has definately
forced me to improve the quality of my perl coding manyfold & taught me more
than I ever thought I wanted to know about Apache.
On Fri, Mar 06, 1998 at 06:53:36PM +0100, Eric Cholet wrote:
> We've a mod_perl web site that allows subscribers to view news stories and
> news photographs from a major news agency. All content is received via a
> satellite link and users can view it in real time, as well as search
> through a huge archive database.
>
> What I like about mod_perl is its "double" reward: not only is it fast and
> efficient, but it has been an enlightening experience working with such an
> elegant tool and reading this list.
>
> ----
> Eric CHOLET - LOGILUNE
> email: cholet@logilune.com
> I am Pentium of Borg. Division is Futile. You will be approximated.
--
Patrick Michael Kane
<mo...@pr.es.to>
=cut
1.1 modperl-docs/src/outstanding/success_stories/presto.txt
Index: presto.txt
===================================================================
Subject: Forced to improve the quality
From: modus@PR.ES.TO
Date: Fri, 6 Mar 1998 10:03:41 -0800
At the risk of this becoming a giant mod_perl lovefest, I'll second that.
I've learned more about perl & apache in my dozen months or so of mod_perl
than in my many years of work with apache & perl. mod_perl has definately
forced me to improve the quality of my perl coding manyfold & taught me more
than I ever thought I wanted to know about Apache.
On Fri, Mar 06, 1998 at 06:53:36PM +0100, Eric Cholet wrote:
> We've a mod_perl web site that allows subscribers to view news stories and
> news photographs from a major news agency. All content is received via a
> satellite link and users can view it in real time, as well as search
> through a huge archive database.
>
> What I like about mod_perl is its "double" reward: not only is it fast and
> efficient, but it has been an enlightening experience working with such an
> elegant tool and reading this list.
>
> ----
> Eric CHOLET - LOGILUNE
> email: cholet@logilune.com
> I am Pentium of Borg. Division is Futile. You will be approximated.
--
Patrick Michael Kane
<mo...@pr.es.to>
1.1 modperl-docs/src/outstanding/success_stories/rent.com.pod
Index: rent.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Rent.com runs mod_perl
=head1 Eric Hammond E<lt>ehammond (at) rent.comE<gt> exclaimed:
=over
=item *
Date: Fri, 14 Dec 2001 14:27:41 -0800
=back
http://www.rent.com/
Rent.com is a dynamic, database driven web site built on mod_perl.
Initial development took 3 months to replace an NT/IIS/ASP
implementation.
=cut
1.1 modperl-docs/src/outstanding/success_stories/rent.com.txt
Index: rent.com.txt
===================================================================
Date: Fri, 14 Dec 2001 14:27:41 -0800
From: Eric Hammond <eh...@rent.com>
Subject: Rent.com runs mod_perl
http://www.rent.com/
Rent.com is a dynamic, database driven web site built on mod_perl.
Initial development took 3 months to replace an NT/IIS/ASP
implementation.
1.1 modperl-docs/src/outstanding/success_stories/seds.org.pod
Index: seds.org.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Students astronomy site
=head1 Smelly Belly E<lt>smiley (at) SEDS.ORGE<gt> exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 12:07:59 -0700
=back
I run a web site for approximately 1200 students of introductory astronomy
here at the U of Arizona. The server is an old Sun Sparc 1 and we use
lots of perl CGI's to connect to a database on the backend and create
custom pages. Before mod_perl, the site was unacceptable slow. Now, with
the scripts re-written to use mod_perl, the dynamically created pages load
faster than regular HTML files.
Mr. Guy Smiley
--
e-mail: ( smiley at seds dot org )
website: ( double u double u double u dot seds dot org slash tilde smiley )
phone: ( five two zero three two one one nine six four )
--
"I root for a big comet or asteroid as a way of cleansing the planet."
George Carlin
=cut
1.1 modperl-docs/src/outstanding/success_stories/seds.org.txt
Index: seds.org.txt
===================================================================
Subject: Students astronomy site
From: Smelly Belly <sm...@SEDS.ORG>
Date: Fri, 6 Mar 1998 12:07:59 -0700
I run a web site for approximately 1200 students of introductory astronomy
here at the U of Arizona. The server is an old Sun Sparc 1 and we use
lots of perl CGI's to connect to a database on the backend and create
custom pages. Before mod_perl, the site was unacceptable slow. Now, with
the scripts re-written to use mod_perl, the dynamically created pages load
faster than regular HTML files.
Mr. Guy Smiley
--
e-mail: ( smiley at seds dot org )
website: ( double u double u double u dot seds dot org slash tilde smiley )
phone: ( five two zero three two one one nine six four )
--
"I root for a big comet or asteroid as a way of cleansing the planet."
George Carlin
1.1 modperl-docs/src/outstanding/success_stories/singlesheaven.com.pod
Index: singlesheaven.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Singles Heaven
=head1 Stas Bekman E<lt>stas (at) stason.orgE<gt> exclaimed:
=over
=item *
Date: Fri, 14 May 1999 10:06:24 +0200
=back
<STRONG>Singles Heaven</STRONG> - http://singlesheaven.com is a
<STRONG>Match Maker</STRONG> site with 34,000+ members and
growing. The site is driven by mod_perl, DBI, <CODE>Apache::DBI</CODE>
(which provides a persistence to DB connections) and mysql. The speed
is enormous, chatting with mod_perl is a pleasure of experience.
Every page is being generated by about 10 SQL queries, for it does
many dynamic checks every time - like checking for new emails,
watching the users who registered in their watchdog and many more. You
don't feel these queries are actually happen, the speed is of the
``Hello World'' script.
Development path was very short, I have converted plain CGI scripts to
run under mod_perl (Apache::Registry) almost in no time!!! If you are
into a database driven service, give mod_perl a try !!!
=cut
1.1 modperl-docs/src/outstanding/success_stories/singlesheaven.com.txt
Index: singlesheaven.com.txt
===================================================================
From : Stas Bekman <st...@stason.org>
Date : Fri, 14 May 1999 10:06:24 +0200
Subject : Singles Heaven
Organization: Singles Heaven
<STRONG>Singles Heaven</STRONG> - http://singlesheaven.com is a
<STRONG>Match Maker</STRONG> site with 34,000+ members and
growing. The site is driven by mod_perl, DBI, <CODE>Apache::DBI</CODE>
(which provides a persistence to DB connections) and mysql. The speed
is enormous, chatting with mod_perl is a pleasure of experience.
Every page is being generated by about 10 SQL queries, for it does
many dynamic checks every time - like checking for new emails,
watching the users who registered in their watchdog and many more. You
don't feel these queries are actually happen, the speed is of the
``Hello World'' script.
Development path was very short, I have converted plain CGI scripts to
run under mod_perl (Apache::Registry) almost in no time!!! If you are
into a database driven service, give mod_perl a try !!!
1.1 modperl-docs/src/outstanding/success_stories/sms_server.pod
Index: sms_server.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Non-web use for Apache/mod_perl: SMS app
=head1 Bas A.Schulte E<lt>bschulte (at) zeelandnet.nlE<gt> exclaimed:
=over
=item *
Date: Fri, 22 Mar 2002 14:01:28 +0100
=back
Preface
This is a story about how about I've used a combination of perl,
Apache and mod_perl to create a component-based service architecture
that implements a platform for building SMS applications. By reusing
capabilities offered by Apache/mod_perl I saved a lot of time
developing the system. The strong OO features of perl that I used
enabled me to build a very flexible system as well to cope with future
requirements. We had the platform in place in about 6 weeks, starting
with absolutely nothing: no hardware, no development environment, no
technology choices made beforehand.
Introduction
The purpose of the system to be developed was to provide a server
platform on top of which arbitrary SMS (Short Message Service)
applications can be developed quickly. It should be built using a
stable and scalable architecture with room for future enhancements
such as integrated billing and reporting options.
An SMS application can be characterized by subscribers sending
text-based commands to the platform and have the platform dispatch to
the right application instance. The application instance handles the
command, executing whatever application-logic defined by that
particular application, and usually generate one or more responses. It
should also be possible that the platform initiates messages to
subscribers as a result of a request sent by another subscriber as
well as be able to generate messages based on timers
There also was a requirement to have the framework publish
application-specific data in XML to allow customers to display this
data on other media channels such as a website.
Connecting the platform to external entities for the transmission and
reception of SMS messages such as SMSC's (SMS Centers distribute SMS
messages to and from mobile subscribers) and SMS Gateways (smart
front-end to one or more SMSC's unifying the method to reach
subscribers from multiple telecom operators) should be flexible enough
to be able to "plug-in" different protocols such as
HTTP/SMTP/CIMD/SMPP as needed.
Component architecture
Early on in the project I decided to go for a distributed component
architecture. Individual components should be deployable on multiple
physical machines. This offers the required scalability and the
ability to define a convenient security scheme by running components
on segments of a network with differing outside visibility
requirements.
As I started modelling this "world", I ended up with the following
components:
1. Application server
Within this application server, multiple instances of multiple SMS
application instances should be running. The actual application-logic
is running within this component. This component provides two external
services:
- handleMessage(CommandRequest)
This service takes an instance of a CommandRequest object and runs the
command in the appropriate application instance.
- handleTimer(Timer)
This services handles expiry of a timer set by the application-logic
of an SMS application.
- getView
This service allows a client to retrieve application-defined views in
XML.
2. Timer service
A persistent service that maintains timers set by application
instances within the game application server and invokes the
handleTimer service of the game application services upon expiry of a
timer.
External service offered:
- setTimer(Timer)
3. Virtual SMS gateway (VSMSC)
This component handles communication with the outside world (the
external entities such as SMSC's and SMS gateways). This component is
split up in 2 subcomponents, one that handles input from mobile
subscribers and one that handles output to mobile subscribers. Each
subcomponent provides one service:
- handleMessage(Message)
The input component receives requests from the outside world using
pluggable subcomponents that handle protocol details, the output
component transmits requests to the outside world using pluggable
subcomponents that handle protocol details.
4. XML Views service
This component offers an HTTP interface to retrieve
application-specific views in XML. It uses customer-specific XSLT
stylesheets to transform the XML data. This component is largely based
on Matt Sergeant's AxKit. AxKit allow the source of your "document" to
be delivered by your own provider class by subclassing off of
AxKit::Provider. My provider class talks to the application server's
getView service while AxKit performs its miracles with all kinds of
transformation options.
Components Figure 1 System components
Apache/mod_perl as a component container
When thinking about how to implement all this I was tempted to look
into doing it with some J2EE-thingy. However, there was this
time-constraint as well as a constraint on available programmer-hands:
I had one freelance programmer for 20 days and I had to arrange the
whole physical part (get the hardware, a co-location site etc.). Then
it struck me that this application server really looked like a vanilla
regular mod_perl web application: receive request from user, process,
send back reply. No html though, but Message objects that could be
serialized/deserialized from text strings. There were of course some
differences: the reply is not sent back inline (i.e. upon reception of
a request via SMS, you can't "reply"; you have to create a new message
and send that to the originator of the request) and there also was the
timer service: I can't make Apache/mod_perl do work without having it
received a user-initiated request.
The good thing was I've been doing Apache/mod_perl for some years now
so I knew beforehand I could create a schedule acceptable from the
business point of view that was also feasible based on experience with
the technology.
So, for each component except the timer service, I defined separate
Apache/mod_perl instances, one for the application server, one for the
SMS output component, one for the SMS input component and one for the
XML Views component.
Each instance defines a URL for each service that the component
running in the instance provides.
Component communication
I took a shortcut here. I wanted to go for SOAP here as it seems a
natural fit. It will allow me to move components to other languages
(management and marketing still seems hung up on java) fairly easy. My
personal experiences with SOAP on earlier projects weren't too good
and I just couldn't fit playing with SOAP into my schedule. So I took
my old friends LWP::UserAgent, HTTP::Request and Storable to handle
this part (perl object instance -> Storable freeze -> HTTP post ->
Storable thaw -> perl object instance).
The good thing is that this actually is a minor part of the whole
system and I know I can put SOAP in easily when the need arises.
"Breaking the chain"
I did make one mistake in the beginning: all service calls were
synchronous. The initial HTTP request would not return until after the
whole chain of execution was done. With possibly long running actions
in the server component, this was not good. I had to find a way to
execute the actual code *after* closing the connection to the
client. Luckily, Apache/mod_perl came to the rescue. It allows you to
set a callback that executes after the HTTP responses are sent back to
the client and after it closes the TCP/IP connection.
Result
We had the platform in place in about 6 weeks, starting with
absolutely nothing: no hardware, no development environment, no
technology choices made beforehand. Based on former experience, the
decision to go with a LAMP architecture (Linux, Apache, MySQL, Perl)
running on fairly cheap intel boxen was made quickly. MySQL was, and
is, not on my wishlist, but the whole battle of moving Oracle in would
have been both a time as well as a money killer, either of which we
didn't have a lot of at the time.
Aside from having one production SMS application (a mobile SMS game),
I've done a prototype SMS application on this platform to check if it
really is easy to create new apps. It took me about 4 hours to
implement a "SMS unix commandline" application: I can login to the
application server using SMS, send Unix commands with my mobile phone
and receive their output (make sure your command doesn't generate more
than 160 characters though). The application also maintains state such
as the working directory I'm in at any given time.
Performance is 'good enough' with the platform running on 2 fairly
cheap Intel boxen, it handles 40 to 60 incoming request per second. As
I haven't spent one second on optimization yet (anyone know the
command to create an index in MySQL?), that number is fine for me. I
did put 1 gigabyte in each machine though as the Apache child
processes eat up quite some memory.
Future enhancements and considerations
SOAP
I really want SOAP. It just seems to make sense to do so: it was
invented for doing stuff like this and I like the concept of WSDL. It
allows you to define the interface in an XML file so clients "know"
what type of parameters the service needs as well as the return
parameter types.
SOAP will also allow new components that are not perl. SOAP is
available in a lot of languages and integration of the various SOAP
implementations is getting better every day (see here ).
Framework for service-based architecture
I'd like to extract the code that handles the communication between
the components in the current system and create a generic framework
that allows one to easily create an Apache/mod_perl-based components
container. The available services would be registered in httpd.conf
and there shoud be a service-discovery mechanism. On the client side,
I'm thinking about something that makes it easy to create client-side
stubs. Stay tuned...
Apache/mod_perl 2.0
This looks very promising to create generic components containers. It
is very easy to create non-HTTP based services with Apache 2.0 with
mod_perl's 2.0 support for writing protocol modules in perl. Also, the
various multi-process models (most notably threading) available in
Apache 2.0 should result in better performance or at least more
choices as far as the process model is concerned.
Lamp
I'm still a little unsure about LAMP. Can we move to relatively cheap
hardware and a free OS when we were used to (very) expensive HP, Sun
or IBM hardware and get away with it? Personal experience and what
I've read from others seems to indicate we can. Experience will tell,
and if it breaks, moving the platform to either of the above three
should be a no-brainer. We live in interesting times.
=cut
1.1 modperl-docs/src/outstanding/success_stories/sms_server.txt
Index: sms_server.txt
===================================================================
From: Bas A.Schulte <bs...@zeelandnet.nl>
Date: Fri, 22 Mar 2002 14:01:28 +0100
Subject: Non-web use for Apache/mod_perl: SMS app
Preface
This is a story about how about I've used a combination of perl,
Apache and mod_perl to create a component-based service architecture
that implements a platform for building SMS applications. By reusing
capabilities offered by Apache/mod_perl I saved a lot of time
developing the system. The strong OO features of perl that I used
enabled me to build a very flexible system as well to cope with future
requirements. We had the platform in place in about 6 weeks, starting
with absolutely nothing: no hardware, no development environment, no
technology choices made beforehand.
Introduction
The purpose of the system to be developed was to provide a server
platform on top of which arbitrary SMS (Short Message Service)
applications can be developed quickly. It should be built using a
stable and scalable architecture with room for future enhancements
such as integrated billing and reporting options.
An SMS application can be characterized by subscribers sending
text-based commands to the platform and have the platform dispatch to
the right application instance. The application instance handles the
command, executing whatever application-logic defined by that
particular application, and usually generate one or more responses. It
should also be possible that the platform initiates messages to
subscribers as a result of a request sent by another subscriber as
well as be able to generate messages based on timers
There also was a requirement to have the framework publish
application-specific data in XML to allow customers to display this
data on other media channels such as a website.
Connecting the platform to external entities for the transmission and
reception of SMS messages such as SMSC's (SMS Centers distribute SMS
messages to and from mobile subscribers) and SMS Gateways (smart
front-end to one or more SMSC's unifying the method to reach
subscribers from multiple telecom operators) should be flexible enough
to be able to "plug-in" different protocols such as
HTTP/SMTP/CIMD/SMPP as needed.
Component architecture
Early on in the project I decided to go for a distributed component
architecture. Individual components should be deployable on multiple
physical machines. This offers the required scalability and the
ability to define a convenient security scheme by running components
on segments of a network with differing outside visibility
requirements.
As I started modelling this "world", I ended up with the following
components:
1. Application server
Within this application server, multiple instances of multiple SMS
application instances should be running. The actual application-logic
is running within this component. This component provides two external
services:
- handleMessage(CommandRequest)
This service takes an instance of a CommandRequest object and runs the
command in the appropriate application instance.
- handleTimer(Timer)
This services handles expiry of a timer set by the application-logic
of an SMS application.
- getView
This service allows a client to retrieve application-defined views in
XML.
2. Timer service
A persistent service that maintains timers set by application
instances within the game application server and invokes the
handleTimer service of the game application services upon expiry of a
timer.
External service offered:
- setTimer(Timer)
3. Virtual SMS gateway (VSMSC)
This component handles communication with the outside world (the
external entities such as SMSC's and SMS gateways). This component is
split up in 2 subcomponents, one that handles input from mobile
subscribers and one that handles output to mobile subscribers. Each
subcomponent provides one service:
- handleMessage(Message)
The input component receives requests from the outside world using
pluggable subcomponents that handle protocol details, the output
component transmits requests to the outside world using pluggable
subcomponents that handle protocol details.
4. XML Views service
This component offers an HTTP interface to retrieve
application-specific views in XML. It uses customer-specific XSLT
stylesheets to transform the XML data. This component is largely based
on Matt Sergeant's AxKit. AxKit allow the source of your "document" to
be delivered by your own provider class by subclassing off of
AxKit::Provider. My provider class talks to the application server's
getView service while AxKit performs its miracles with all kinds of
transformation options.
Components Figure 1 System components
Apache/mod_perl as a component container
When thinking about how to implement all this I was tempted to look
into doing it with some J2EE-thingy. However, there was this
time-constraint as well as a constraint on available programmer-hands:
I had one freelance programmer for 20 days and I had to arrange the
whole physical part (get the hardware, a co-location site etc.). Then
it struck me that this application server really looked like a vanilla
regular mod_perl web application: receive request from user, process,
send back reply. No html though, but Message objects that could be
serialized/deserialized from text strings. There were of course some
differences: the reply is not sent back inline (i.e. upon reception of
a request via SMS, you can't "reply"; you have to create a new message
and send that to the originator of the request) and there also was the
timer service: I can't make Apache/mod_perl do work without having it
received a user-initiated request.
The good thing was I've been doing Apache/mod_perl for some years now
so I knew beforehand I could create a schedule acceptable from the
business point of view that was also feasible based on experience with
the technology.
So, for each component except the timer service, I defined separate
Apache/mod_perl instances, one for the application server, one for the
SMS output component, one for the SMS input component and one for the
XML Views component.
Each instance defines a URL for each service that the component
running in the instance provides.
Component communication
I took a shortcut here. I wanted to go for SOAP here as it seems a
natural fit. It will allow me to move components to other languages
(management and marketing still seems hung up on java) fairly easy. My
personal experiences with SOAP on earlier projects weren't too good
and I just couldn't fit playing with SOAP into my schedule. So I took
my old friends LWP::UserAgent, HTTP::Request and Storable to handle
this part (perl object instance -> Storable freeze -> HTTP post ->
Storable thaw -> perl object instance).
The good thing is that this actually is a minor part of the whole
system and I know I can put SOAP in easily when the need arises.
"Breaking the chain"
I did make one mistake in the beginning: all service calls were
synchronous. The initial HTTP request would not return until after the
whole chain of execution was done. With possibly long running actions
in the server component, this was not good. I had to find a way to
execute the actual code *after* closing the connection to the
client. Luckily, Apache/mod_perl came to the rescue. It allows you to
set a callback that executes after the HTTP responses are sent back to
the client and after it closes the TCP/IP connection.
Result
We had the platform in place in about 6 weeks, starting with
absolutely nothing: no hardware, no development environment, no
technology choices made beforehand. Based on former experience, the
decision to go with a LAMP architecture (Linux, Apache, MySQL, Perl)
running on fairly cheap intel boxen was made quickly. MySQL was, and
is, not on my wishlist, but the whole battle of moving Oracle in would
have been both a time as well as a money killer, either of which we
didn't have a lot of at the time.
Aside from having one production SMS application (a mobile SMS game),
I've done a prototype SMS application on this platform to check if it
really is easy to create new apps. It took me about 4 hours to
implement a "SMS unix commandline" application: I can login to the
application server using SMS, send Unix commands with my mobile phone
and receive their output (make sure your command doesn't generate more
than 160 characters though). The application also maintains state such
as the working directory I'm in at any given time.
Performance is 'good enough' with the platform running on 2 fairly
cheap Intel boxen, it handles 40 to 60 incoming request per second. As
I haven't spent one second on optimization yet (anyone know the
command to create an index in MySQL?), that number is fine for me. I
did put 1 gigabyte in each machine though as the Apache child
processes eat up quite some memory.
Future enhancements and considerations
SOAP
I really want SOAP. It just seems to make sense to do so: it was
invented for doing stuff like this and I like the concept of WSDL. It
allows you to define the interface in an XML file so clients "know"
what type of parameters the service needs as well as the return
parameter types.
SOAP will also allow new components that are not perl. SOAP is
available in a lot of languages and integration of the various SOAP
implementations is getting better every day (see here ).
Framework for service-based architecture
I'd like to extract the code that handles the communication between
the components in the current system and create a generic framework
that allows one to easily create an Apache/mod_perl-based components
container. The available services would be registered in httpd.conf
and there shoud be a service-discovery mechanism. On the client side,
I'm thinking about something that makes it easy to create client-side
stubs. Stay tuned...
Apache/mod_perl 2.0
This looks very promising to create generic components containers. It
is very easy to create non-HTTP based services with Apache 2.0 with
mod_perl's 2.0 support for writing protocol modules in perl. Also, the
various multi-process models (most notably threading) available in
Apache 2.0 should result in better performance or at least more
choices as far as the process model is concerned.
Lamp
I'm still a little unsure about LAMP. Can we move to relatively cheap
hardware and a free OS when we were used to (very) expensive HP, Sun
or IBM hardware and get away with it? Personal experience and what
I've read from others seems to indicate we can. Experience will tell,
and if it breaks, moving the platform to either of the above three
should be a no-brainer. We live in interesting times.
1.1 modperl-docs/src/outstanding/success_stories/story.tmpl
Index: story.tmpl
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
[% story.title %]
=head1 [%- story.author -%] exclaimed:
[% IF story.headers -%]
=over
[% FOREACH key = story.headers.keys.sort -%]
[% IF story.headers.$key -%]
=item *
[% key %]: [% story.headers.$key -%]
[% END -%]
[% END -%]
=back
[% END -%]
[% story.body %]
=cut
1.1 modperl-docs/src/outstanding/success_stories/tamu.pod
Index: tamu.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Move from ActiveWare PerlScript on IIS4 to Apache and modperl improved performance by factor 60
=head1 Jeff Baker E<lt>jeff (at) GODZILLA.TAMU.EDUE<gt> exclaimed:
=over
=item *
Date: Tue, 3 Mar 1998 21:13:06 -0600
=back
I'd like to share my recent success story. Over the last four days,
students living on campus here at Texas A&M University have had to go
through what is called "contract renewal," where they indicate whether
or not they will continue to live on campus in the coming academic
year. In the past, this has all been done very tedioulsy with
scantron forms and human-eye error correction. This year, the system
was moved to the web. The code was user-proofed to prevent the usual
mistakes, with the addition of some fancy authentication and session
tracking mechanisms.
The system was originally written using ActiveWare PerlScript on IIS
4.0, but when I was done, it was glaringly obvious that it was far too
slow. In only 14 days, we ported the code to Apache and mod_perl,
with the same NT platform underneath. The performance
(transactions/sec) was more than 60 times better!!!
The system went online Friday night, and in the course of its 4-day run,
it served 400,000 documents, the bulk of which were generated on the
fly. Ten thousand people used the system, and all went without a hitch.
Here's to mod_perl!
Jeffrey
=cut
1.1 modperl-docs/src/outstanding/success_stories/tamu.txt
Index: tamu.txt
===================================================================
From: Jeff Baker <je...@GODZILLA.TAMU.EDU>
Date: Tue, 3 Mar 1998 21:13:06 -0600
Subject: Move from ActiveWare PerlScript on IIS4 to Apache and modperl improved performance by factor 60
I'd like to share my recent success story. Over the last four days,
students living on campus here at Texas A&M University have had to go
through what is called "contract renewal," where they indicate whether
or not they will continue to live on campus in the coming academic
year. In the past, this has all been done very tedioulsy with
scantron forms and human-eye error correction. This year, the system
was moved to the web. The code was user-proofed to prevent the usual
mistakes, with the addition of some fancy authentication and session
tracking mechanisms.
The system was originally written using ActiveWare PerlScript on IIS
4.0, but when I was done, it was glaringly obvious that it was far too
slow. In only 14 days, we ported the code to Apache and mod_perl,
with the same NT platform underneath. The performance
(transactions/sec) was more than 60 times better!!!
The system went online Friday night, and in the course of its 4-day run,
it served 400,000 documents, the bulk of which were generated on the
fly. Ten thousand people used the system, and all went without a hitch.
Here's to mod_perl!
Jeffrey
1.1 modperl-docs/src/outstanding/success_stories/tgix.pod
Index: tgix.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
mod_perl contact management system for Fortune-500 pharmaceutical giant
=head1 Rick Mangi E<lt>rmangi (at) TGIX.COME<gt> exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 12:14:49 -0500
=back
I have 2 success stories to share:
1. I'm finishing a web-based mod_perl/javascript (client side) contact
management system with heavy Apache::DBI and Registry use. This system
is for a "fortune-500 pharmaceudical (sp?) giant". It is replacing an
unmanageable (their description) Lotus Domino application.
2. It production, a mod_perl server for gathering web traffic statistics
for an up and coming web traffic reporting company. The mod_perl
enhanced server gathers data from thousands of client and server based
proxies around the world. Data is stored in Oracle using Apache::DBI.
This replaced a poorly designed PHP server (poor choice using php in
this scenario imho).
Rick
--
_______________________________________________________________
Rick Mangi Tel: (212) 972-2030
Thaumaturgix, Inc. Fax: (212) 972-2003
317 Madison Avenue, Suite 1615 rmangi@tgix.com
New York, NY 10017 http://www.tgix.com
thau'ma-tur-gy, n. the working of miracles
"Perl is a state of mind as much as it is a language grammar"
_______________________________________________________________
=cut
1.1 modperl-docs/src/outstanding/success_stories/tgix.txt
Index: tgix.txt
===================================================================
Subject: mod_perl contact management system for Fortune-500 pharmaceutical giant
From: Rick Mangi <rm...@TGIX.COM>
Organization: Thaumaturgix, Inc.
Date: Fri, 6 Mar 1998 12:14:49 -0500
I have 2 success stories to share:
1. I'm finishing a web-based mod_perl/javascript (client side) contact
management system with heavy Apache::DBI and Registry use. This system
is for a "fortune-500 pharmaceudical (sp?) giant". It is replacing an
unmanageable (their description) Lotus Domino application.
2. It production, a mod_perl server for gathering web traffic statistics
for an up and coming web traffic reporting company. The mod_perl
enhanced server gathers data from thousands of client and server based
proxies around the world. Data is stored in Oracle using Apache::DBI.
This replaced a poorly designed PHP server (poor choice using php in
this scenario imho).
Rick
--
_______________________________________________________________
Rick Mangi Tel: (212) 972-2030
Thaumaturgix, Inc. Fax: (212) 972-2003
317 Madison Avenue, Suite 1615 rmangi@tgix.com
New York, NY 10017 http://www.tgix.com
thau'ma-tur-gy, n. the working of miracles
"Perl is a state of mind as much as it is a language grammar"
_______________________________________________________________
1.1 modperl-docs/src/outstanding/success_stories/winamillion.msn.com.pod
Index: winamillion.msn.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Microsoft Network, 1 million hits per week through modperl
=head1 Vivek Khera E<lt>khera (at) KCILINK.COME<gt> exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 10:34:32 -0500
=back
>>>>> "LS" == Lincoln Stein <ls...@CSHL.ORG> writes:
LS> I'm looking for more mod_perl success stories like the one that Jeff
LS> posted the other day. They will be used for vignettes in an
The Microsoft Network promotion running to increase subscribership
located at http://winamillion.msn.com/ is run on mod_perl. The
contest ends at the end of the month, so check it out before then ;-)
Anyhow, the system is currently pounding nearly 10 million hits per
week to the web pages, of which about 1 million go through mod_perl.
Each of those accesses runs through on averate 3 SQL queries to a
MySQL database and 2 references to DB_File databases.
There is no way in heck it would have run without mod_perl. By the
way, this is using Squid in accelerator mode, as I described in the
tuning docs. Squid handles about 93% of the content (the static and
mostly static stuff).
v.
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-301-258-8292
PGP/MIME spoken here http://www.kciLink.com/home/khera/
=cut
1.1 modperl-docs/src/outstanding/success_stories/winamillion.msn.com.txt
Index: winamillion.msn.com.txt
===================================================================
Subject: Re: Success stories
From: Vivek Khera <kh...@KCILINK.COM>
Date: Fri, 6 Mar 1998 10:34:32 -0500
Subject: Microsoft Network, 1 million hits per week through modperl
>>>>> "LS" == Lincoln Stein <ls...@CSHL.ORG> writes:
LS> I'm looking for more mod_perl success stories like the one that Jeff
LS> posted the other day. They will be used for vignettes in an
The Microsoft Network promotion running to increase subscribership
located at http://winamillion.msn.com/ is run on mod_perl. The
contest ends at the end of the month, so check it out before then ;-)
Anyhow, the system is currently pounding nearly 10 million hits per
week to the web pages, of which about 1 million go through mod_perl.
Each of those accesses runs through on averate 3 SQL queries to a
MySQL database and 2 references to DB_File databases.
There is no way in heck it would have run without mod_perl. By the
way, this is using Squid in accelerator mode, as I described in the
tuning docs. Squid handles about 93% of the content (the static and
mostly static stuff).
v.
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Vivek Khera, Ph.D. Khera Communications, Inc.
Internet: khera@kciLink.com Rockville, MD +1-301-258-8292
PGP/MIME spoken here http://www.kciLink.com/home/khera/
1.1 modperl-docs/src/outstanding/success_stories/wmboerse.pod
Index: wmboerse.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Large real-time stock exchange game
=head1 Sven Neuhaus E<lt>Sven.Neuhaus (at) de.uu.netE<gt> exclaimed:
=over
=item *
Date: Fri, 05 Jun 1998 16:13:18 +0200
=back
Hello,
another mod_perl success story:
Have a look at www.wmboerse.de - it's a german real-time
stock exchange simulation game for the soccer world championship.
Participation is free and there are some nice prices to be won.
The technology used is Apache, mod_perl, DBI and DB::Adabas. The
project is sponsored by Sun Microsystems (they are supplying
a Sun Ultra Enterprise 450 with 3 CPUs @ 300Mhz and 1GByte RAM at
the moment), UUNET Germany (bandwidth) and Software AG
(Adabas-D database).
The server is a real beast. It's amazingly fast. The game is running
since Sunday. At the moment, there are 2344 players, 183 of them
have been active in the last 10 minutes. We are expecting a large
increase in players as soon as national television reports about
the game.
The load is at 0.80, there are 123 processes, still 400MB RAM free
(we plugged in 512 MB today, previously the box had 512MB).
We will increase the maximum number of child processes if we get
close to the current limit (100).
Here's some data from the Apache status page:
Server uptime: 4 hours 10 minutes 58 seconds
Total accesses: 254671 - Total Traffic: 902.9 MB (!)
CPU Usage: u27.68 s10.98 cu2.03 cs.63 - .274% CPU load
16.9 requests/sec - 61.4 kB/second - 3717 B/request
18 requests currently being processed, 14 idle servers
Anyway, grab a browser and have a look. The project is a great success
so far, and it couldn't have been done this easily and quickly without
mod_perl and the other great free software out there.
Thanks and enjoy!
-Sven Neuhaus
=cut
1.1 modperl-docs/src/outstanding/success_stories/wmboerse.txt
Index: wmboerse.txt
===================================================================
Subject: mod_perl at its best.
Organization: UUNET Deutschland Web Competence Center
Date: Fri, 05 Jun 1998 16:13:18 +0200
From: Sven Neuhaus <Sv...@de.uu.net>
Subject: Large real-time stock exchange game
Hello,
another mod_perl success story:
Have a look at www.wmboerse.de - it's a german real-time
stock exchange simulation game for the soccer world championship.
Participation is free and there are some nice prices to be won.
The technology used is Apache, mod_perl, DBI and DB::Adabas. The
project is sponsored by Sun Microsystems (they are supplying
a Sun Ultra Enterprise 450 with 3 CPUs @ 300Mhz and 1GByte RAM at
the moment), UUNET Germany (bandwidth) and Software AG
(Adabas-D database).
The server is a real beast. It's amazingly fast. The game is running
since Sunday. At the moment, there are 2344 players, 183 of them
have been active in the last 10 minutes. We are expecting a large
increase in players as soon as national television reports about
the game.
The load is at 0.80, there are 123 processes, still 400MB RAM free
(we plugged in 512 MB today, previously the box had 512MB).
We will increase the maximum number of child processes if we get
close to the current limit (100).
Here's some data from the Apache status page:
Server uptime: 4 hours 10 minutes 58 seconds
Total accesses: 254671 - Total Traffic: 902.9 MB (!)
CPU Usage: u27.68 s10.98 cu2.03 cs.63 - .274% CPU load
16.9 requests/sec - 61.4 kB/second - 3717 B/request
18 requests currently being processed, 14 idle servers
Anyway, grab a browser and have a look. The project is a great success
so far, and it couldn't have been done this easily and quickly without
mod_perl and the other great free software out there.
Thanks and enjoy!
-Sven Neuhaus
1.1 modperl-docs/src/outstanding/success_stories/www.afp-direct.com.pod
Index: www.afp-direct.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
News agency uses mod_perl for their online system with over 6.5 million stories
=head1 Eric Cholet E<lt>cholet (at) LOGILUNE.COME<gt> exclaimed:
=over
=item *
Date: Fri, 14 May 1999 10:06:24 +0200
=back
http://www.afp-direct.com hosts the Agence France-Presse's online
database of news stories and photographs. Agence France-Presse is the
world's third largest news agency. The online database, available
through subscription, contains over 6.5 million stories and
photographs in a full-text searchable database. The web site makes the
most of mod_perl and its array of modules such as persistent
connections to back-end servers and custom authentication.
=cut
1.1 modperl-docs/src/outstanding/success_stories/www.afp-direct.com.txt
Index: www.afp-direct.com.txt
===================================================================
From: Eric Cholet <ch...@LOGILUNE.COM>
Organization: Logilune
Date: Fri, 14 May 1999 10:06:24 +0200
Subject: News agency uses mod_perl for their online system with over 6.5 million stories
http://www.afp-direct.com hosts the Agence France-Presse's online
database of news stories and photographs. Agence France-Presse is the
world's third largest news agency. The online database, available
through subscription, contains over 6.5 million stories and
photographs in a full-text searchable database. The web site makes the
most of mod_perl and its array of modules such as persistent
connections to back-end servers and custom authentication.
1.1 modperl-docs/src/outstanding/success_stories/www.bivio.com.pod
Index: www.bivio.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
bivio Investment Club Accounting, Taxes, and more
=head1 Rob Nagler E<lt>info E<lt>atE<gt> bivio.netE<gt> exclaimed:
=over
=item *
Date: Wed Nov 07 22:24:48 2001
=item *
Traffic: 50,000 pages/day
=item *
URL: http://www.bivio.com
=back
bivio.com is a web-delivered application written entirely in perl
which provides complete accounting, tax preparation, automatic
downloads of broker transactions, message boards, file sharing, email
aliases, and more. Apache/mod_perl on Linux has functioned incredibly
reliably with +99% uptime.
Our declarative MVCF application framework (250 perl classes) is
available under the Artistic License from http://www.bivio.net
This includes a demo application http://petshop.bivio.net which
is a more concise implementation of J2EE's Blueprint Architecture.
=cut
1.1 modperl-docs/src/outstanding/success_stories/www.bivio.com.txt
Index: www.bivio.com.txt
===================================================================
From: Rob Nagler <info <at> bivio.net>
Organization:
Date: Wed Nov 07 22:24:48 2001
Subject: bivio Investment Club Accounting, Taxes, and more
URL: http://www.bivio.com
Traffic: 50,000 pages/day
bivio.com is a web-delivered application written entirely in perl
which provides complete accounting, tax preparation, automatic
downloads of broker transactions, message boards, file sharing, email
aliases, and more. Apache/mod_perl on Linux has functioned incredibly
reliably with +99% uptime.
Our declarative MVCF application framework (250 perl classes) is
available under the Artistic License from http://www.bivio.net
This includes a demo application http://petshop.bivio.net which
is a more concise implementation of J2EE's Blueprint Architecture.
1.1 modperl-docs/src/outstanding/success_stories/www.lind-waldock.com.pod
Index: www.lind-waldock.com.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
Modperl at the world's largest discount commodities trading firm.
=head1 B. W. Fitzpatrick E<lt>fitz (at) onShore.comE<gt> exclaimed:
=over
=item *
Date: Fri, 6 Mar 1998 16:58:39 -0600
=back
30000 customers looking at live quotes, dynamic charts and news.
"[...] More importantly, mod_perl allowed us to work the webserver and
code around our design--not the other way around."
> I'm looking for more mod_perl success stories like the one that Jeff
> posted the other day. They will be used for vignettes in an
> introductory chapter of the book that Doug and I are writing. If you
> have a story you'd like to share (particularly one in which mod_perl
> "defeats" one of its competitors) could you mail it to me or post it
> to the list? For the vignettes we need some sort of identifying
> information, either along the lines of "a major Southwestern
> University" or "Kulturbox company of Berlin, Germany".
We just completed a website for Lind-Waldock & Co.
(http://www.lind-waldock.com/), the world's largest discount commodities
trading firm. The site is to be used by their customers (>30,000) for
live and delayed quotes, dynamic charts, and news pertaining to the
futures industry, as well as access to their online order entry
system. The site will take quite a beating once all of their customers
transition to it from Lind's previous Windows application--plenty of live and
delayed data is auto-refreshed.
Scenario: Client needed to develop a website that could authenticate
off their existing customer database, and many links needed to be
dynamically generated to reflect the level of service that the
customer subscribed to (this info also kept in the database). The
customer area had to be SSL enabled, fast, and support a slew of Perl
scripts that the quote vendor had already written. And of course, they
needed the whole thing yesterday.
They already had Netscape Enterprise Server and we investigated some NSAPI
solutions but were terribly disappointed with what Netscape had to
offer. We did some tests and decided to run with Stronghold and
mod_perl. We wrote less than 10 lines of code to get the site
authenticating off the database using Apache_DBI and just a few more
to handle the dynamic URL generation.
We began analysis on Dec 1, and delivered the completed site on Mar
4--with 2 weeks off for Christmas, no less! Two days after release,
the site is averaging about 3 requests a second--and that is certain
to grow exponentially as more customers make the switch from the old
Windows application.
More importantly, mod_perl allowed us to work the webserver and code
around our design--not the other way around.
-Fitz
___________________________________________________________________________
Brian W. Fitzpatrick fitz@onShore.com http://www.onShore.com/
=cut
1.1 modperl-docs/src/outstanding/success_stories/www.lind-waldock.com.txt
Index: www.lind-waldock.com.txt
===================================================================
From: B. W. Fitzpatrick <fi...@onShore.com>
Date: Fri, 6 Mar 1998 16:58:39 -0600
Subject: Modperl at the world's largest discount commodities trading firm.
30000 customers looking at live quotes, dynamic charts and news.
"[...] More importantly, mod_perl allowed us to work the webserver and
code around our design--not the other way around."
> I'm looking for more mod_perl success stories like the one that Jeff
> posted the other day. They will be used for vignettes in an
> introductory chapter of the book that Doug and I are writing. If you
> have a story you'd like to share (particularly one in which mod_perl
> "defeats" one of its competitors) could you mail it to me or post it
> to the list? For the vignettes we need some sort of identifying
> information, either along the lines of "a major Southwestern
> University" or "Kulturbox company of Berlin, Germany".
We just completed a website for Lind-Waldock & Co.
(http://www.lind-waldock.com/), the world's largest discount commodities
trading firm. The site is to be used by their customers (>30,000) for
live and delayed quotes, dynamic charts, and news pertaining to the
futures industry, as well as access to their online order entry
system. The site will take quite a beating once all of their customers
transition to it from Lind's previous Windows application--plenty of live and
delayed data is auto-refreshed.
Scenario: Client needed to develop a website that could authenticate
off their existing customer database, and many links needed to be
dynamically generated to reflect the level of service that the
customer subscribed to (this info also kept in the database). The
customer area had to be SSL enabled, fast, and support a slew of Perl
scripts that the quote vendor had already written. And of course, they
needed the whole thing yesterday.
They already had Netscape Enterprise Server and we investigated some NSAPI
solutions but were terribly disappointed with what Netscape had to
offer. We did some tests and decided to run with Stronghold and
mod_perl. We wrote less than 10 lines of code to get the site
authenticating off the database using Apache_DBI and just a few more
to handle the dynamic URL generation.
We began analysis on Dec 1, and delivered the completed site on Mar
4--with 2 weeks off for Christmas, no less! Two days after release,
the site is averaging about 3 requests a second--and that is certain
to grow exponentially as more customers make the switch from the old
Windows application.
More importantly, mod_perl allowed us to work the webserver and code
around our design--not the other way around.
-Fitz
___________________________________________________________________________
Brian W. Fitzpatrick fitz@onShore.com http://www.onShore.com/
1.1 modperl-docs/src/outstanding/success_stories/www.mobile.de.pod
Index: www.mobile.de.pod
===================================================================
###################################################
# WARNING: Do not edit this file!
# If you do the changes will be lost!
# Instead edit the corresponding .txt file and run make.pl
#
# Don't forget to commit the changes to both .txt and the generated
# .pod to cvs, since others won't run the local make.pl
####################################################
=head1 NAME
277M page views in Jan 2002
=head1 Jan Willamowius E<lt>jan (at) mobile.deE<gt> exclaimed:
=over
=item *
Date: Fri, 01 Mar 2002 12:17:08 +0100
=item *
Traffic: in January 2002: 277 Mio page views, 10 Mio visits
=back
All pages are dynamically created by a Linux cluster running Apache
with mod_perl from a MySQL database (even though some pages look
static).
151 Mio banner ads served from a small Linux cluster with Apache +
mod_perl connecting to a MySQL database
mobile.de is one of the biggest online carmarkets in Germany. Its
services are aimed at both professional car dealers and private buyers
and sellers. Under the company's URL - www.mobile.de - individuals can
offer and search for cars free of charge. Professional dealers pay a
fee of EUR 101.24 per month. The fee entitles each dealer to list up
to 250 vehicles in the database.
--Jan
=cut
1.1 modperl-docs/src/outstanding/success_stories/www.mobile.de.txt
Index: www.mobile.de.txt
===================================================================
From: Jan Willamowius <ja...@mobile.de>
Date: Fri, 01 Mar 2002 12:17:08 +0100
Subject: 277M page views in Jan 2002
Traffic: in January 2002: 277 Mio page views, 10 Mio visits
All pages are dynamically created by a Linux cluster running Apache
with mod_perl from a MySQL database (even though some pages look
static).
151 Mio banner ads served from a small Linux cluster with Apache +
mod_perl connecting to a MySQL database
mobile.de is one of the biggest online carmarkets in Germany. Its
services are aimed at both professional car dealers and private buyers
and sellers. Under the company's URL - www.mobile.de - individuals can
offer and search for cars free of charge. Professional dealers pay a
fee of EUR 101.24 per month. The fee entitles each dealer to list up
to 250 vehicles in the database.
--Jan
---------------------------------------------------------------------
To unsubscribe, e-mail: docs-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: docs-cvs-help@perl.apache.org