<?xml version="1.0"?>
<!--
Copyright 1999-2005 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
// ======================================================================== 78
-->
<document>

    <properties>
        <title>Who We Are</title>
    </properties>

    <body>
        <section name="Who We Are">

            <a name="statistics"/>
            <subsection name="List Subscribers and Downloads">

                <p>In July 2005, there were more than 2800 subscribers to
                    STRUTS-USER (including the digest version). In addition to
                    the
                    regular subscribers, an unknown number of developers read
                    the lists
                    through newsfeed mirrors and through several list
                    archives.</p>

                <p>According to recently released
                    <a href="http://www.apache.org/~vgritsenko/stats/projects/struts">
                        statistics</a>
                    , Struts downloads range around 15,000 a month.
                </p>
            </subsection>

            <a name="pmc"/>
            <subsection name="Project Management Committee Members">
                <ul>
                    <li>
                        <strong>Craig R. McClanahan</strong>
                        (craigmcc at apache.org)
                    </li>

                    <li>
                        <strong>Ted Husted</strong>
                        (husted at apache.org)
                    </li>

                    <li>
                        <strong>Cedric Dumoulin</strong>
                        (cedric.dumoulin at lifl.fr)
                    </li>

                    <li>
                        <strong>Martin Cooper</strong>
                        , Vice President and Chair
                        (martinc at apache.org)
                    </li>

                    <li>
                        <strong>James Holmes</strong>
                        (jholmes at apache.org)
                    </li>

                    <li>
                        <strong>David M. Karr</strong>
                        (dmkarr at apache.org)
                    </li>

                    <li>
                        <strong>David Graham</strong>
                        (dgraham at apache.org)
                    </li>

                    <li>
                        <strong>James Mitchell</strong>
                        (jmitchell at apache.org)
                    </li>

                    <li>
                        <strong>Don Brown</strong>
                        (mrdon at apache.org)
                    </li>

                    <li>
                        <strong>Joe Germuska</strong>
                        (germuska at apache.org)
                    </li>

                    <li>
                        <strong>Niall Pemberton</strong>
                        (niallp at apache.org)
                    </li>

                    <li>
                        <strong>Hubert Rabago</strong>
                        (hrabago at apache.org)
                    </li>

                    <li>
                        <strong>Wendy Smoak</strong>
                        (wsmoak at apache.org)
                    </li>
                </ul>
            </subsection>

            <a name="committers"/>
            <subsection name="Committers">
                <ul>

                    <li>
                        <strong>Eddie Bush</strong>
                        (ekbush at apache.org)
                    </li>
                    <li>
                        <strong>David Geary</strong>
                        (dgeary at apache.org)
                    </li>
                    <li>
                        <strong>Gary VanMatre</strong>
                        (gvanmatre at apache.org)
                    </li>
                    <li>
                        <strong>Sean Schofield</strong>
                        (schof at apache.org)
                    </li>
                    <li>
                        <strong>Greg Reddin</strong>
                        (greddin at apache.org)
                    </li>
                    <li>
                        <strong>Laurie Harper</strong>
                        (laurieh at apache.org)
                    </li>
                    <li>
                        <strong>Richard Feit</strong>
                        (rich at apache.org)
                    </li>
                    <li>
                        <strong>Jason Carreira</strong>
                        (jcarreira at apache.org)
                    </li>
                    <li>
                        <strong>Patrick Lightbody</strong>
                        (plightbo at apache.org)
                    </li>
                </ul>
            </subsection>

            <a name="emeritus"/>
            <subsection name="Emeritus Committers">
                <ul>
                    <li>Luis Arias</li>

                    <li>Pierre Delilse</li>

                    <li>Michael Schachter</li>

                    <li>Vincent Massol</li>

                    <li>David Winterfeldt</li>

                    <li>Oleg Alexeev</li>

                    <li>Rob Leland</li>

                    <li>Arron Bates</li>

                    <li>Steve Raeburn</li>

                    <li>James Turner</li>

                </ul>
            </subsection>

            <a name="about"/>
            <subsection name="More About Us">
                <h4 id="craigmcc">Craig R. McClanahan -- PMC Member</h4>

                <p>
                    I've been involved with servlet and JSP technology since
                    around
                    1998. It started out that I needed a way to build some web
                    applications for several projects, and liked Java a lot
                    better
                    than the alternatives. I also liked the price tag of open
                    source
                    software, and started using Apache JServ -- later, getting
                    involved in the project (like many people, I was whining
                    about
                    the twelve months it took to get from version 0.9 to
                    version
                    1.0, and my son said "Dad, you know Java -- go help them
                    finish
                    it!" -- so I did :-).</p>

                <p>
                    For quite a while, I was participating a lot the
                    JSP-INTEREST and
                    SERVLET-INTEREST
                    <a href="http://archives.java.sun.com">mailing lists</a>
                    ,
                    especially the topic of good architectures for web
                    applications.
                    I was disgusted with the hash that many beginners created
                    when
                    they used (or abused) scriptlets in JSP pages, and built
                    (for my
                    former employer) a pretty comprehensive framework that
                    could
                    considered ("Struts 0.01 without the custom tags"). It was
                    proprietary code, but I was able to describe the concepts,
                    and
                    there started to a feeling the lists that this "Model 2"
                    thing
                    was pretty cool -- but there were no good examples to look
                    at,
                    so it was mostly hand waving types of discussions.
                </p>

                <p>
                    Over the same time period, I got involved as an individual
                    contributor in the
                    <a href="http://java.sun.com/jcp">Java
                        Community Process</a>
                    , and joined the expert group that defined
                    the servlet 2.2 and JSP 1.1 specs. Sun was impressed
                    enough to
                    offer me a job as the technical lead the team within Sun
                    (currently five other individuals) that works
                    <a href="http://jakarta.apache.org/tomcat">Tomcat</a>
                    -- the
                    architecture for Catalina, which is the servlet container
                    part
                    of Tomcat 4.0, is also mine -- so I am in the really nice
                    position of getting paid to work open source software :-).
                    And,
                    participate the expert groups for Servlet 2.3 and JSP 1.2.
                    And,
                    speak at various conferences, including ApacheCon and
                    JavaOne.
                    And, talk to groups within Sun about using Struts and
                    JSP/servlet technology. And ... (there's some really
                    interesting
                    things being considered for the future).
                </p>

                <p>
                    The original design of what came to Struts has been in my
                    head
                    for a long time, since those interesting mailing list
                    discussions, but the first version of the actual code was
                    written my laptop a Memorial Day weekend vacation trip
                    (end of
                    May, 2000) to the Oregon coast -- in between watching the
                    surf
                    and having the house shaken by a windstorm at night. Since
                    then,
                    it has gathered attention and popularity as we approach
                    our
                    first official release, and it delights me to see my
                    "baby" grow
                    up so well :-). Of course, it is no longer just me --
                    there have
                    been incredible numbers of good ideas from all over, and a
                    peek
                    at the TODO list for 1.1 says that even more good stuff is
                    coming in the future.
                </p>

                <p>
                    One motivation factor was
                    <a href="http://www.servlets.com/soapbox/problems-jsp.html">
                        Jason Hunter's</a>
                    article about the Problems with JSP. Jason
                    and I get along fine, even though we have different
                    preferences
                    about presentation technologies. Besides being the author
                    of a
                    very popular book about servlets, with a second edition
                    coming
                    soon, Jason is also the representative for the Apache
                    Software
                    Foundation the Executive Committee of the Java Community
                    Process.
                </p>

                <p>
                    Personally, I live in Portland, Oregon (even though my
                    team at
                    Sun is mostly in Cupertino, CA -- staying here was part of
                    the
                    job deal :-). I like to support Oregon sports teams
                    (Oregon
                    State Beavers, Oregon Ducks, Portland Trailblazers) and
                    work
                    cool software.
                </p>

                <p>
                    I figured out I was getting pretty old when I realized
                    that
                    2000 was the 25th year I had been paid to work in some
                    aspect of
                    software development :-). I've got a son who is a
                    full-time
                    software developer (primarily in PHP so far, but I'm going
                    to
                    corrupt him with Java eventually :-), and a daughter in
                    college.
                    I'll happily let the other committers speak for
                    themselves.
                </p>

                <h4 id="mschachter">Mike Schachter -- Emeritus Committer</h4>

                <p>
                    I'm currently a student of computer science at Drexel
                    University
                    in Philadelphia, PA. I've been working at HP Middleware,
                    formerly Bluestone Software for 3 years programming in
                    Java and
                    recently J2EE technologies. I'm a full time worker from
                    September until April and a student and part time worker
                    from
                    April until August. In my spare time I've been known to
                    run
                    monkey-knife fights in a shady south philly warehouse.
                    Err... I
                    mean... nothing.
                </p>

                <h4 id="husted">Ted Husted -- PMC Member</h4>

                <p>
                    In the late 1990s, I was working with a local PBS station
                    to
                    improve their web presence. Like most stations, WXXI had
                    an
                    annual fundraising auction. Each year, we would do a
                    little more
                    for the auction. At first, we posted a few static pages
                    about
                    the "big ticket" items. The next year, we accepted
                    "pre-bids"
                    on the more expensive items, using a JavaScript
                    application.
                </p>

                <p>
                    Then, late in 1999, the CEO decided we should do a lot
                    more with the auction
                    on the website. The next big step would be to accept bids
                    for
                    all items online. A colleague recommended FileMaker Pro,
                    and we
                    went to work automating the bid-taking process. For
                    "Spring MarketPlace 2000", we entered the telephone bids
                    into
                    computers in the studio, and Internet users could enter
                    their
                    own bids directly.
                </p>

                <p>
                    The system worked, but we ran into some walls that were
                    difficult to work around. We also wanted to expand the
                    system to do scheduling and inventory as well as bid
                    taking.
                    So, I started looking for a new platform. I came close to
                    selecting PHP, but there were some cool new Java products,
                    like Resin and Jetty, coming out in 2000. I was impressed
                    and
                    decided to go with Java.
                </p>

                <p>
                    At the time, web application frameworks for Java were a
                    new
                    idea, and only a couple were available.
                    I stumbled upon Struts at Jakarta, and started posting
                    questions to the list. At first, the list traffic was so
                    low,
                    I wasn't sure if the group was still active. But, answers
                    came, and so I kept on posting.
                </p>

                <p>
                    To help teach myself the framework, I started a "walking
                    tour" of the infamous MailReader application. I posted the
                    tour as I wrote it, and people kindly corrected my
                    understanding of how things worked as I went.
                </p>

                <p>
                    In December 2000, Craig was asking for volunteers to help
                    with the documentation. Mike Schachter and I raised our
                    virtual hands, we became Struts committers 006 and 007.
                </p>

                <p>
                    By the Spring of 2001, WXXI's new auction application was
                    ready
                    to ship using the Struts 1.0 beta. We took over 50,000
                    bids on
                    5,000 items with nary a hitch. We added an inventory
                    module
                    for 2002, and the station continued to use the original
                    software unchanged through 2005.
                </p>

                <p>
                    Since joining Struts in 2000, I've become a Member of the
                    Apache
                    Software Foundation and Struts Project Management
                    Committee. My
                    books include JUnit in Action, Struts in Action, and
                    Professional JSP Site Design. I've consulted with Struts
                    teams
                    throughout the United States, including CitiGroup,
                    Nationwide
                    Insurance, and the Pepsi Bottling Group.
                </p>

                <p>
                    Currently, I'm working with the Oklahoma State
                    Department of Environmental Services to improve their
                    permitting
                    system. We started the work in Java, but the enterprise
                    migrated to ASP.NET in 2004. Rather than quit the team,
                    I stuck it out. We are now working on a Struts subproject
                    for
                    ASP.NET called OverDrive.
                </p>

                <h4 id="cedric">Cedric Dumoulin -- PMC Member</h4>

                <p>
                    As a dreamer / researcher I have thought a lot about a
                    framework
                    like Struts. But, as a lazy developer I have first checked
                    what
                    already exists, and I have found Struts. Struts goals
                    fulfilled
                    nearly all I needed for my (now old) portal project,
                    except the
                    capability to reuse and assemble easily pieces of pages or
                    components. So, I have proposed the Components framework.
                    This
                    framework can seen as a superset of the Templates tag
                    library
                    contributed by David Geary, and contains lot of
                    interesting
                    features.
                </p>

                <p>
                    From a professional point of view, I have a Ph.D. in
                    computer
                    science. I have worked for 3 years in the R&amp;D
                    department of
                    a worldwide company developing Internet banking solutions.
                    I am now a researcher at a university, and work European
                    research projects. My main research interest is WWW,
                    Distributed
                    Systems and Object Oriented Design. When developing code,
                    I
                    always try to first propose reusable pieces of code.
                </p>

                <h4 id="martinc">Martin Cooper -- PMC Chair</h4>

                <p>
                    Early in the year 2000, I was asked, by my employer at
                    that time,
                    to investigate the best way to develop a new web-based
                    application
                    for the administration and management of an existing
                    product.
                    After exploring a number of technologies, I settled on
                    Java, along
                    with servlets and JSP, as the way to go. Then I started
                    looking
                    for methodologies and "best practices", since others must
                    surely
                    have been down that path before me.
                </p>

                <p>
                    In addition to rummaging around on the web, I subscribed
                    to the
                    SERVLET-INTEREST and JSP-INTEREST mailing lists, along
                    with
                    several others, and monitored the discussions for a while.
                    It was
                    clear that others were seeking the same answers as I was,
                    and it
                    was also clear that many people were building their
                    applications
                    in truly horrible ways.
                </p>
                <p>
                    At some point -- I don't recall when, exactly -- the
                    concept of
                    "Model 1" versus "Model 2" applications came up, and there
                    was a
                    great deal of discussion around that. Model 2 seemed very
                    much
                    like A Good Thing to me, and I paid it close attention.
                </p>

                <p>
                    Then, in May of 2000, I saw a message from Craig
                    McClanahan
                    about a new framework called Struts that was designed to
                    ease
                    the process of building Model 2 applications, and provide
                    solutions for some of the important issues at the same
                    time. I
                    hopped on over to the web site and took a look around.
                    This was
                    exactly what I had been looking for.
                </p>

                <p>
                    My first postings to the Struts mailing list were, of
                    course,
                    questions to help me understand how to do things and why
                    Struts
                    is the way it is. Over time, I became more involved in
                    both the
                    user and developer communities, started submitting bug
                    reports,
                    patches and change requests, and eventually became a
                    committer.
                    Not long after that, I volunteered to take on the release
                    process,
                    and became the release manager for Struts 1.0.1 and
                    beyond. Little
                    did I know what I was letting myself in for!
                </p>

                <p>
                    A large majority of the people who contribute to Apache
                    projects
                    are volunteers who are not paid for their contributions.
                    Like most
                    of those volunteers, I also have a "day job" to put bread
                    on the
                    table. Currently, I am a UI Architect at Informatica,
                    where I work
                    on the architecture, design and implementation of web
                    applications.
                    Working with, and on, Struts has provided me with an
                    excellent
                    perspective with which to do that!
                </p>

                <h4 id="dwinterfeldt">David Winterfeldt -- Emeritus
                    Committer</h4>

                <p>
                    As I worked web based projects I started looking for
                    something
                    that would really help save time during development. I ran
                    across Struts in the Summer of 2000 and decided it was a
                    good
                    solution for web development. As I used Struts it really
                    helped
                    to remove a lot of the repetitive work, but validation
                    still
                    seemed very repetitive. I had an idea to create validation
                    rules
                    in an xml file and have them easily integrated with
                    Struts. It
                    started out simple and continued to develop over time. The
                    validation project was eventually incorporated into Struts
                    and
                    the core was moved to Jakarta Commons. I'm happy to see
                    Struts
                    continue to grow and develop.</p>

                <p>
                    I currently am employed at Forbes.com. I occasionally get
                    to do
                    some internal projects using Struts. The last interesting
                    project was a publishing system using Message Driven EJBs
                    in
                    JBoss and Struts was used to display the status of each
                    publishing process.
                </p>

                <h4 id="rleland">Rob Leland -- Emeritus PMC Member</h4>

                <p>
                    I have gone from Unix -to- Windows -to- Unix based
                    development
                    about ever 6 years now. When moving to Windows I was
                    amazed at
                    how primitive the OS was compared to Unix. While
                    developing for
                    Win32 I had the pleasure of discovering Delphi and
                    developed
                    many GUI/databases, telephony, Internet enabled
                    applications. I
                    remain impressed with its design. Delphi, always enabled
                    development of a simple elegant solution, much like the
                    language
                    itself. I was convinced after 10 years of development with
                    C/C++
                    that it was a kinder gentler language.
                </p>

                <p>
                    Then in July 2000 I decided to move into Java, and Web
                    development. This is after using the Internet since 1985
                    and
                    occasionally teaching classes about it. I was hired as a
                    consultant to take over a JSP based application. I
                    realized it
                    had been written with the equivalent of "goto's"(Model 1)
                    and
                    had to be redesigned. I searched for a better way to
                    design the
                    code and by late August I had found Struts. It is also a
                    simple
                    elegant solution.
                </p>

                <p>
                    To date I have mainly served to pitch in where needed. I
                    continue to amazed at the Struts committers' generous
                    contributions of time, insight, and good will. I feel
                    fortunate
                    to part of the struts team.
                </p>

                <h4 id="dgraham">David Graham -- PMC Member</h4>

                <p>
                    I, like many others, discovered Struts when contemplating
                    writing my own MVC Java framework for the web. Struts had
                    everything I needed and more so I scrapped plans for my
                    own and
                    joined the mailing lists. After playing with it for
                    several
                    months I started submitting documentation and a few source
                    patches. I'm excited about helping Struts evolve and am
                    continually amazed by the framework and the community
                    surrounding it.
                </p>

                <h4 id="jmitchell">James Mitchell -- PMC Member</h4>

                <p>
                    Struts was forced upon me when the E-Commerce
                    sweat-shop...errr
                    ...I mean "the company I worked for" decided to go from
                    being a
                    full fledged Microsoft Partner to a full J2EE shop. That
                    was
                    back in 2000. What little skills in Java I had were poor
                    at
                    best and I had never heard of Struts or even Tomcat for
                    that
                    matter.
                </p>

                <p>
                    I was fortunate to have several excellent mentors watching
                    over
                    my shoulder and helping our team cross the "great divide"
                    between ASP/COM and Java/OOP. You could say our mentors
                    knew a
                    thing or two about Java, web development, and frameworks
                    in
                    general. Chuck Cavaness, Brian Keeton, and many more, I
                    cannot
                    thank you enough for all the leadership and guidance you
                    have
                    given me (and others). I truly believe that without your
                    help,
                    I would not be where I am today.
                </p>

                <p>
                    Where am I today? That depends on who you ask ;) I own my
                    own
                    business and I am currently working for a clientin the
                    North
                    Atlanta (GA) area. I created the
                    <a href="http://www.struts-atlanta.org">Struts-Atlanta
                        Users
                        Group</a>
                    along with James Holmes several years ago with the
                    primary goal of mentoring, educating, and assisting other
                    developers.We are a large group (over 200 members) of
                    Struts
                    enthusiasts and we meet monthly to discuss just about
                    anything,
                    not just Struts.I don't want this to sound like a resume,
                    but if
                    you are looking for talent, I have helped several of our
                    membersfind jobs in our area. Our list is a great resource
                    for
                    finding and nurturing local talent.
                </p>

                <p>
                    I call myself an "Open Source Evangelist" for a reason. I
                    use
                    the word "Evangelist" because that's what I feel I am
                    doing.
                    Just as Martin Luther was considered a rebel in his day, I
                    too
                    hope to make a change. I hope to change the way Software
                    is
                    developed in our world and how the lack of collaboration
                    for
                    the sake of "intellectual property" is inhibiting the
                    growth of
                    our economy. I believe businesses have a right to make a
                    profit.
                    I believe businesshave a right to make a profit on their
                    "intellectual property", but for heaven's sake, some
                    wheels
                    don't needto be reinvented 50,000 times. Where I draw the
                    line
                    is when they leverage existing market share to strong-arm
                    the
                    competition literally out of business. Based on what I
                    just
                    wrote and depending on what you've been exposed to in your
                    career, you might be thinking of one company right now.
                    You are
                    probably right in your assumption, but believe me, there
                    are
                    many companies that practice the same, or worsetechniques.
                    To
                    them, it's not about playing on a level playing field,
                    it's
                    about getting to the game early,buying 80% of the seats,
                    and
                    paying off the officials so there is little chance for any
                    real
                    competition. Ofcourse, for some companies, it doesn't hurt
                    if
                    you own the stadium and keep the other players locked out.
                    "Well, they were invited to compete, but they didn't show
                    up.
                    "....sound familiar?
                </p>

                <p>
                    Enter....the Open Source movement. I would encourage you
                    (if
                    you haven't already) to pick up a copy of
                    <a href="http://www.amazon.com/exec/obidos/ASIN/0596001088/102-8250064-5792120">
                        The Cathedral and the Bazaar</a>
                    .This is an excellent
                    introduction to this whole "Open Source" thing and why it
                    is so
                    popular.
                </p>

                <p>
                    Compared to what I want to do in life, Struts is just a
                    drop in
                    the pond. However, that said, I am very happy and excited
                    to be
                    a part of this (and other) open source projects. Thanks
                    for
                    putting up with me :P
                </p>

                <h4 id="jturner">James Turner -- Emeritus Committer</h4>

                <p>
                    I discovered Struts somewhat by accident. In 2001 I began
                    writing a book for SAMS on JSP web development (MySQL and
                    JSP
                    Web Development), and as part of it, I decided to write a
                    chapter on Struts in the advanced section. In the process
                    of
                    learning enough about Struts to write about it, I realized
                    that
                    it could simplify some of the projects that I was working
                    on for
                    clients.
                </p>

                <p>
                    After a half a year of working with Struts, I was asked by
                    SAMS
                    to write another book, this time concentrating on Struts
                    specifically. That book, co-authored with a former
                    co-worker n
                    amed Kevin Bedell, became Struts Kick Start.
                </p>

                <p>
                    In the process of writing that book, I began to realize
                    that
                    there were things I could do to contribute to Struts
                    beyond
                    writing about it. One thing in particular was to clean up
                    and
                    add some functionality to the Commons Validator project,
                    which
                    eventually led to me release-managing (with a lot of
                    help!) the
                    Commons Validator 1.0 release.
                </p>

                <p>
                    More generally, I've been a software developer for over 22
                    years, starting with work as a Research Specialist at the
                    MIT AI
                    Lab. I spent nearly a decade working in LISP, before
                    moving on
                    to C/Unix, a stint managing the Web Site for the Christian
                    Science Monitor, and finally Java based e-Commerce
                    development,
                    which has kept me busy for the last five years.
                </p>

                <p>
                    In addition to the two books mentioned above, I also write
                    for a
                    number of publications, including WIRED and the
                    aforementioned
                    Christian Science Monitor. You can get a look at my
                    portfolio
                    <a href="http://www.blackbear.com/monitor.html">here</a>
                    . I'm
                    also working on a third book with a bunch of other folks
                    for
                    O'Reilly, which will cover Apache Axis. I also edit the
                    OpenSolaris.org site for Sun.
                </p>

                <h4 id="ekbush">Eddie Bush -- Committer</h4>

                <p>
                    My first experiences with Java made me wince. The language
                    was young-ish still and growing by leaps and bounds all
                    the time.
                    To me, it seemed unintelligent to invest any significant
                    intellectual resources in learning it because I perceived
                    it as
                    such a &quot;moving target&quot;. Of course, that has
                    changed.
                </p>

                <p>
                    I'd been looking for a way to really do heavy-duty
                    processing of
                    web requests that was higher-level than CGI. In
                    particular, I
                    was on a quest to find somethiong that did not involve
                    using
                    Microsoft (tm) technologies. A friend of mine started
                    chatting up the idea of Java servlets and JSP pages. I
                    didn't
                    really like the idea of using Java because of my
                    previously
                    formed opinion, but, having a great deal of respect for my
                    friend's opinion, I set out on an exursion to delve into
                    the
                    world of Java-driven dynamic web page generation.
                </p>

                <p>
                    The language (and myself) had matured considerably by this
                    time,
                    and I found my previous inhibitions were no longer well
                    founded.
                    However, as much as I liked the technology, I was
                    dissatisfied.
                    There just had to be a better way! I loved the concept of
                    having a controller servlet, but, lacking experience in
                    building
                    externally-configurable Java &quot;thingies&quot;, I was
                    hard-coding a lot, and, after a point, that started to
                    really
                    rub me wrong. At this point, I started buying books and
                    really
                    &quot;studying&quot; the technology more seriously.
                </p>

                <p>
                    I honestly don't recall where I stumbled onto Struts, but
                    I do
                    recall having toyed with a number of different frameworks
                    - none
                    of which I really recall now. I quickly fell in love with
                    Struts -- partially because it was an Apache project, and
                    partially because it was evident to me that the project
                    had a
                    really great user-base.
                </p>

                <p>
                    As time rocked along, I found myself becoming more deeply
                    involved in the project. I studied the source and learned
                    a
                    great deal about architecting configurable Java
                    &quot;thingies&quot;, and learned a fantastic amount about
                    actually using the framework.
                </p>

                <p>
                    In time, I got comfortable enough with how Struts was
                    structured
                    that I began submitting patches - mostly documentation,
                    which
                    Ted Husted &quot;massaged&quot; and applied. I enjoyed the
                    feeling of gratification I got from helping to make Struts
                    better, even if minorly.
                </p>

                <p>
                    My last patch submitted as a non-committer was for
                    ActionServlet.
                    This was back when Struts 1.1 was working toward GA
                    release. It
                    was the first patch I hadn't had applied within a few days
                    of
                    submission and I grew impatient. Modules did not work
                    properly
                    without it and they did with it! &quot;How can they not
                    apply
                    that patch when it's so critical to Struts?&quot; I
                    thought to
                    myself.
                </p>

                <p>
                    Well, to keep this book from becoming a novel, I started a
                    campaign to have the patch applied which resulted in
                    my gaining committer status and applying the patch myself!
                    I should note that Steve Ditlinger and myself collaborated
                    on the
                    patch. I submitted a version, he made some suggestions and
                    submitted an altered patch, and then we, collectively,
                    decided
                    to make a couple of other modifications, which I applied
                    just
                    before committing the patch.
                </p>

                <h4 id="niallp">Niall Pemberton -- PMC Member</h4>
                <p>
                    I've worked as a developer since 1988 using various
                    technologies/platforms.
                    In the late nineties I kept meaning to learn java but
                    never found the time
                    until 2000. I bought a couple of books (Java in 30 Days
                    and a Certification
                    Study Guide), passed the Sun certification exam and got my
                    first java job.
                </p>
                <p>
                    Early in 2001 I was investigating writing the first web
                    app for the company
                    I was working for and came across Struts - just before the
                    1.0 beta was
                    released. After a while I came off the user list because
                    of the volume of
                    traffic and just monitored the developers list. Late in
                    2003 I migrated to
                    Struts 1.1, re-joined the user list and started submitting
                    a few patches.
                    Was invited to become a Struts Committer in May 2004 and
                    PMC member in
                    September 2004.
                </p>

                <h4 id="hrabago">Hubert Rabago -- PMC Member</h4>
                <p>
                    I started working with Java early in 2000. We designed and
                    implemented a
                    servlet-based application that to this day gives me and a
                    fellow designer
                    the urge to do a total rewrite. On my next assignment,
                    somebody
                    introduced me to a series of patterns useful for web
                    applications. We
                    built a framework using these patterns and it worked out
                    well for us.
                </p>
                <p>
                    When I tried to bring this framework into the next
                    project, somebody
                    suggested using Struts instead. The two frameworks
                    resembled each other
                    so closely that we had no trouble at all switching. One of
                    the things
                    missing in Struts was an easy way to do redirects with
                    parameters, so we
                    wrote our own class for that. The same guy who suggested
                    Struts
                    suggested I contribute it to Struts. A few months after
                    that, I joined
                    the mailing lists and sought how to contribute.
                </p>
                <p>
                    I found myself enjoying answering questions on the user
                    list. After some
                    time, I was participating on the dev list as well. Soon I
                    was able to
                    contribute a few patches and even came up with my own
                    Struts extension.
                    In February of 2005, I accepted an invitation to be a
                    committer, and
                    in July 2005, accepted an invitation to join the PMC.
                </p>

                <h4 id="wsmoak">Wendy Smoak -- PMC Member</h4>

                <p>In late 2001, I was asked to put information from a
                    database on
                    the web, including a few forms to allow updates. By that
                    time I had
                    been working with Java for a couple of years in class
                    projects, but
                    "Servlet" was still a foreign word. With no real deadline
                    and
                    complete freedom to pick anything I wanted, I spent hours
                    online
                    searching and participating in different forums and lists.
                    And any
                    time I asked for advice using 'Java' and 'HTML forms' in
                    the same
                    sentence, I got a resounding chorus of "Struts!" in
                    reply.</p>

                <p>That first webapp went through quite a few iterations as I
                    tried
                    and discarded various things. But I kept coming back to
                    Struts, and
                    eventually things fell into place-- thanks mostly to the
                    helpful
                    community on the struts-user list. As I gained more
                    experience,
                    asking questions on the user list naturally transformed
                    into
                    answering them, which I've been doing ever since. I
                    accepted an
                    invitation to become a Struts Committer in June, 2005, and
                    was invited to join the PMC in December, 2005.</p>

                <h4 id="gvanmatre">Gary VanMatre -- Committer</h4>

                <p>I landed an internship in college working with the big blue
                    iron where
                    I dappled in the craft of VSE COBOL and JCL. Through the
                    90's, I worked my
                    way into several client-server technologies (Visual Basic,
                    PowerBuilder and Delphi)
                    and finally thought that I had learned the last
                    programming language I
                    would ever need to know, Fort&#233; Transactional Object
                    Oriented language (TOOL).</p>

                <p>I rode the Fort&#233; wave for several years and suddenly
                    found myself
                    looking for work and feeling like a real "tool". An empty,
                    dust free
                    self was just the right size for the proprietary
                    distributed object
                    solution once called Fort&#233;.</p>

                <p>In 2002, is when I found Java. While working a VB
                    assignment,
                    I decided the only hope I had of getting a competitive
                    edge was to
                    become a Sun Certified Java Programmer. With that card, I
                    found an
                    opportunity to become a Struts developer and began lurking
                    about the
                    Struts mailing lists in 2003.</p>

                <p>In late 2004, I started hearing a buzz about a new Struts
                    subproject
                    and became very interested in the ideas. I also began
                    acquiring a stack
                    of JSF books matching my Struts collection. My experience
                    with Struts,
                    Tiles and something that Colorado Department of State
                    calls Rustts, gave
                    me the idea that has become known as the Shale "Clay"
                    plug-in. I was
                    invited to become a Struts Committer in July 2005.</p>

                <h4 id="schof">Sean Schofield -- Committer</h4>

                <p>During a job interview in 2002 I was asked if I had any
                    experience with
                    Struts. I told the interviewer that I had never heard of
                    it. That night
                    when I got home I set out to figure out what Struts was
                    all about. It
                    turns out I already knew it (sort of.) I had been spending
                    a lot of time
                    researching design patterns and I was working with my own
                    custom framework
                    that combined several patterns that I thought worked well
                    together.</p>

                <p>I then realized that I wasn't the only one trying to
                    improve the way in
                    which complex web applications were being designed. Of
                    course, as with all
                    open source projects, the result of several minds working
                    together is superior
                    to that of a single mind working alone. I quickly
                    abandoned my custom
                    framework in favor of Struts. A few years later I was the
                    one interviewing
                    people asking them if they knew Struts!</p>

                <p>Struts was also the beginning of my serious interest in
                    open source. Like
                    many other committers I started out as a user, then became
                    a participant on
                    the mailing lists, then started reporting bugs, then
                    started patching bugs and
                    finally started proposing and supplying new features. The
                    Struts community
                    was an invaluable resource for me, especially when it came
                    to getting advice on
                    tricky design issues.</p>

                <p>In October 2005 I was invited to become a Struts Committer.
                    I have also been
                    involved in a few other open source projects including
                    commons-lang and
                    commons-chain. I am also a PMC member of the MyFaces
                    project where I spend
                    most of my free time these days. My current interest in
                    Struts lies with the
                    Shale subproject.</p>

                <h4 id="greddin">Greg Reddin -- Committer</h4>

                <p>In early 2000 I was working on a client-server application
                    that
                    was written in Visual Basic and C++. The decision was made
                    to
                    rebuild the application as a web-based app using Java and
                    JSP. We
                    bought into the MVC architecture and implemented it using
                    Sun's
                    Blueprints with a JSP front controller. Then one of our
                    architects
                    came back from JavaOne raving about Struts. From that
                    point on
                    there was no turning back for me.</p>

                <p>Over the years my involvement has come in spurts. If I was
                    working on a web-based project it was a given that this
                    project
                    would involve Struts. Finally, our organization was bitten
                    by the
                    SOA bug so it was "webapp no more" for a while. But I
                    never
                    bothered to unsubscribe from the Struts lists and always
                    kept one
                    ear tuned in to the chatter in my inbox.</p>

                <p>Finally I decided to plant myself back in the web tier with
                    or
                    without my employer's support and changed jobs. Very soon
                    afterwards, in October 2005, I was invited to become a
                    Struts
                    committer. This comes at a time when Tiles, my favorite
                    part of
                    Struts, is seeing a lot of activity. I hope to play a
                    large part
                    in digging the Standalone version out of the sandbox. I am
                    also
                    very interested in JSF, Shale, content management systems,
                    and
                    portals.</p>

                <p>The truth is I still haven't decided what I want to be when
                    I
                    grow up. In addition to my software pursuits I am also a
                    <a href="http://www.reddin.org">family man</a>
                    and a
                    <a href="http://www.fattuesdayaudio.com">musician</a>
                    . If anyone
                    knows of any good methods of cloning yourself, please let
                    me know!
                    I'm happy to be a part of this community and the Apache
                    Way.
                </p>

                <h4 id="laurieh">Laurie Harper -- Committer</h4>

                <p>I've been lurking on the fringes of the Struts project for
                    years, on and off, but it wasn't until early 2005 that I
                    became an active participant. I founded
                    <a href="http://www.zotechsoftware.com/">Zotech
                        Software</a>
                    and selected Struts as the framework on which we would
                    build
                    our first product. I thought long and hard about how to
                    give
                    back to the Open Source community from whose work we would
                    derive so much value, and decided that one important
                    contribution I could make would be to answer questions on
                    the Struts user list, among others. Over time, I found
                    myself
                    wanting to add bits and pieces to Struts itself, and began
                    submitting patches.
                </p>

                <p>In October 2005 I was invited to become a committer. My
                    main interests lie with the core Struts framework and
                    supporting
                    sub-projects, though I'm keeping an eye on Ti and some of
                    the
                    other experimental work that's going on.</p>

            </subsection>
        </section>
    </body>
</document>

