Modified: websites/production/struts/content/helping.html ============================================================================== --- websites/production/struts/content/helping.html (original) +++ websites/production/struts/content/helping.html Wed Dec 31 10:10:27 2014 @@ -10,9 +10,11 @@ <title>Helping</title> <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css"> - <link rel="stylesheet" href="css/main.css"> + <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"> + <link href="css/main.css" rel="stylesheet"> + <link href="css/custom.css" rel="stylesheet"> - <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> + <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <script type="text/javascript" src="js/community.js"></script> </head> @@ -118,209 +120,257 @@ <article class="container"> <section class="col-md-12"> - <h1>How to Help FAQ</h1> + <h1 id="how-to-help-faq">How to Help FAQ</h1> <ul> -<li><h3>What can my company do to help support Apache Struts?</h3> + <li> + <h3 id="what-can-my-company-do-to-help-support-apache-struts">What can my company do to help support Apache Struts?</h3> + </li> +</ul> <p>Apache Struts is an all volunteer product. Our customers are the volunteers who donate their time and -energy to supporting the product. If you want to support Apache Struts, and become one of our -customers, then you need to get involved and become a volunteer.</p> + energy to supporting the product. If you want to support Apache Struts, and become one of our + customers, then you need to get involved and become a volunteer.</p> <p>Our challenge to any team using an Apache Struts product is to donate the time of one team member -one afternoon a week (or more if you can spare the resources). -Have your team member browse <a href="#issues">JIRA</a> for any issues without a <a href="#patches">patch</a> or unit test, -and <a href="#contribute">add the patch or test</a>. (Please note that we do not use @author tags in our -JavaDocs an documentation.) -If your patch includes an @author tag, we would have to ask that it be removed.</p> - -<p>If an Apache Struts product doesn't do what <em>you</em> want, it's up to <strong>you</strong> to step up and propose the patch. -If an Apache Struts product doesn't ship as often as you would like, it's up to you to step up with -the tests and fixes that get a release out the door. -<a href="http://jakarta.apache.org/site/contributing.html">(Like Craig McClanahan did for Tomcat)</a>.</p> + one afternoon a week (or more if you can spare the resources). + Have your team member browse <a href="#issues">JIRA</a> for any issues without a <a href="#patches">patch</a> or unit test, + and <a href="#contribute">add the patch or test</a>. (Please note that we do not use @author tags in our + JavaDocs an documentation.) + If your patch includes an @author tag, we would have to ask that it be removed.</p> + +<p>If an Apache Struts product doesnât do what <em>you</em> want, itâs up to <strong>you</strong> to step up and propose the patch. + If an Apache Struts product doesnât ship as often as you would like, itâs up to you to step up with + the tests and fixes that get a release out the door. + <a href="http://jakarta.apache.org/site/contributing.html">(Like Craig McClanahan did for Tomcat)</a>.</p> <p>If Struts does do what you want, help others become involved by turning your war stories into FAQs -and how-tos that we can make part of the <a href="#documentation">documentation</a>. -The mailing list is very active and trundling through the archives is no picnic. We can always use -volunteers who can reduce the best threads to coherent articles we can share with others.</p> - -<p>We don't sell Struts for money, but anyone who wants to be our customer can pay us back by donating -the time and energy that money represents.</p></li> -<li><h3><a name="patches"></a>How do I create a patch?</h3> + and how-tos that we can make part of the <a href="#documentation">documentation</a>. + The mailing list is very active and trundling through the archives is no picnic. We can always use + volunteers who can reduce the best threads to coherent articles we can share with others.</p> + +<p>We donât sell Struts for money, but anyone who wants to be our customer can pay us back by donating + the time and energy that money represents.</p> + +<ul> + <li> + <h3 id="a-namepatchesahow-do-i-create-a-patch"><a name="patches"></a>How do I create a patch?</h3> + </li> +</ul> <p>A patch is a machine-readable script that can automatically recreate a change to a text file, -including source code and documentation. The patch format is also human-readable. Developers often pass -patches around to discuss a change before applying it to the main repository.</p> + including source code and documentation. The patch format is also human-readable. Developers often pass + patches around to discuss a change before applying it to the main repository.</p> <p>The best way to affect a change to the source code or documentation is to provide a patch. -Apache Struts committers can then review your patch and decide whether to apply it to the main repository.</p> + Apache Struts committers can then review your patch and decide whether to apply it to the main repository.</p> <p>Please be aware that the Struts project follows general coding conventions. In short, these are -the official Java coding conventions plus the rule to favor spaces over tabs for indenting. See more -details at <a href="https://cwiki.apache.org/confluence/display/S2WIKI/Struts+2+Coding+Conventions">Struts 2 Coding Conventions (Wiki)</a></p> + the official Java coding conventions plus the rule to favor spaces over tabs for indenting. See more + details at <a href="https://cwiki.apache.org/confluence/display/S2WIKI/Struts+2+Coding+Conventions">Struts 2 Coding Conventions (Wiki)</a></p> <p>To create a patch, you first have to <a href="git-for-struts.html">checkout</a> a copy of the source code -or documentation from the main repository. You can then change your copy, and create the patch using a simple -<a href="http://git-scm.com/">Git</a> command, like this:</p> -<div class="highlight"><pre><code class="text language-text" data-lang="text">git diff Main.java >> patchfile.txt -</code></pre></div> + or documentation from the main repository. You can then change your copy, and create the patch using a simple + <a href="http://git-scm.com/">Git</a> command, like this:</p> + +<pre><code> git diff Main.java >> patchfile.txt +</code></pre> + <p>Then, create a <a href="#issues">JIRA issue</a>about the change, and attach the patch file.</p> <p>Some Apache projects ask that you to submit your patch to the mailing list. We would prefer that you -create a JIRA issue and then attach the patch to the issue. To do this, you must first create the issue, -and then modify the report to add your patch. We realize this is a bit clumsy, but it keeps us from -losing things, and helps to ensure that your patch will be attended.</p> + create a JIRA issue and then attach the patch to the issue. To do this, you must first create the issue, + and then modify the report to add your patch. We realize this is a bit clumsy, but it keeps us from + losing things, and helps to ensure that your patch will be attended.</p> <p>The <a href="http://www.netbeans.org/community/contribute/patches.html">NetBeans community</a> also has a helpful section on the -subject of creating patches.</p></li> -<li><h3><a name="issues"></a>How can I report defects or suggest features?</h3> + subject of creating patches.</p> + +<ul> + <li> + <h3 id="a-nameissuesahow-can-i-report-defects-or-suggest-features"><a name="issues"></a>How can I report defects or suggest features?</h3> + </li> +</ul> <p>Tracking of defect reports and enhancement suggestions for Apache Struts products is handled through the -<a href="https://issues.apache.org/jira/browse/WW">Apache Struts JIRA instance</a>. -Please select the appropriate Apache Struts product from the list, and then select the component to which -you feel this report relates. You will automatically be notified by email as the status of your defect or -enhancement report changes. Please be sure to read -<a href="http://www.chiark.greenend.org.uk/%7Esgtatham/bugs.html">How to Report Bugs Effectively</a> -before posting a report.</p> + <a href="https://issues.apache.org/jira/browse/WW">Apache Struts JIRA instance</a>. + Please select the appropriate Apache Struts product from the list, and then select the component to which + you feel this report relates. You will automatically be notified by email as the status of your defect or + enhancement report changes. Please be sure to read + <a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html">How to Report Bugs Effectively</a> + before posting a report.</p> -<p>If you can't write a <a href="#patches">patch</a> to address your issue, a unit test that demonstrates the problem is also welcome. -(And, of course, unit tests that prove your patch works are equally welcome.)</p> +<p>If you canât write a <a href="#patches">patch</a> to address your issue, a unit test that demonstrates the problem is also welcome. + (And, of course, unit tests that prove your patch works are equally welcome.)</p> <p>If the defect or feature is already being tracked, you can vote for the issue and call more attention to it. -Each user can cast up to six votes at a time.</p> + Each user can cast up to six votes at a time.</p> <p>If there is a patch attached to the issue, you can also try applying to your local copy of Struts, -and report whether it worked for you. Feedback from developers regarding a proposed patch is really quite -helpful. -Don't hesitate to add a "works for me" note to a ticket if you've tried the patch yourself and found it useful.</p> + and report whether it worked for you. Feedback from developers regarding a proposed patch is really quite + helpful. + Donât hesitate to add a âworks for meâ note to a ticket if youâve tried the patch yourself and found it useful.</p> + +<p>Feature suggestions are also maintained in the <a href="https://issues.apache.org/jira/browse/WW">JIRA issue tracker</a>.</p> -<p>Feature suggestions are also maintained in the <a href="https://issues.apache.org/jira/browse/WW">JIRA issue tracker</a>.</p></li> -<li><h3><a name="contribute"></a>How can I contribute to the Struts source code?</h3> +<ul> + <li> + <h3 id="a-namecontributeahow-can-i-contribute-to-the-struts-source-code"><a name="contribute"></a>How can I contribute to the Struts source code?</h3> + </li> +</ul> <p>A very good place to start is by <strong>reviewing the list of open issues</strong> and pending feature suggestions in the -<a href="#issues">issue tracker</a>. -If you see an issue that needs a patch you can write, feel free to annex your patch. If you see an issue -that needs a unit test to prove it's fixed, feel free to annex your test case. -If someone has posted a patch to an issue you'd like to see resolved, apply the patch to your local development -copy of Struts. -Then let us know if it works for you, and if it does, cast your vote for the issue and its patch.</p> + <a href="#issues">issue tracker</a>. + If you see an issue that needs a patch you can write, feel free to annex your patch. If you see an issue + that needs a unit test to prove itâs fixed, feel free to annex your test case. + If someone has posted a patch to an issue youâd like to see resolved, apply the patch to your local development + copy of Struts. + Then let us know if it works for you, and if it does, cast your vote for the issue and its patch.</p> <p>If none of the pending issues scratch your itch, another good place to start is by <strong>contributing unit tests</strong> -for existing features (even those that still work).</p> + for existing features (even those that still work).</p> <p>You can upload a proposed <a href="#patches">patch</a> to either the code or documentation by creating a feature -suggestion in the <a href="#issues">issue tracker</a>. -<strong>After creating the ticket</strong> you can go back and upload a file containing your patch.</p> + suggestion in the <a href="#issues">issue tracker</a>. + <strong>After creating the ticket</strong> you can go back and upload a file containing your patch.</p> <p>Our current approach to <a href="kickstart.html#tests">unit testing</a> works fairly well for exercising most method-level -stuff, but does not really address situations of dynamic behavior -- most particularly the execution of custom tags -for Struts. -You can try to fake what a JSP container does, but a much more reliable testing regime would actually execute -the tag in a real container.</p></li> -<li><h3><a name="documentation"></a>How can I contribute to the documentation?</h3> + stuff, but does not really address situations of dynamic behavior â most particularly the execution of custom tags + for Struts. + You can try to fake what a JSP container does, but a much more reliable testing regime would actually execute + the tag in a real container.</p> + +<ul> + <li> + <h3 id="a-namedocumentationahow-can-i-contribute-to-the-documentation"><a name="documentation"></a>How can I contribute to the documentation?</h3> + </li> +</ul> <p>The Struts 2 documentation is maintained using the Atlassian Confluence wiki software and automatically -exported to HTML for viewing on the website. To help with the Struts 2 documentation, you must create -an account at <a href="http://cwiki.apache.org/confluence">cwki.apache.org/confluence</a>, AND you must file a -<a href="http://apache.org/licenses/icla.txt">Contributor License Agreement</a> with the ASF.</p> + exported to HTML for viewing on the website. To help with the Struts 2 documentation, you must create + an account at <a href="http://cwiki.apache.org/confluence">cwki.apache.org/confluence</a>, AND you must file a + <a href="http://apache.org/licenses/icla.txt">Contributor License Agreement</a> with the ASF.</p> <p>Other ways to help out with the documentation is to just leave a comment on a page that needs fixing. -If you have a cwiki Confluence account, you can also create pages on the -<a href="http://cwiki.apache.org/S2WIKI/home.html">Struts 2 Wiki</a> without filing a CLA.</p> + If you have a cwiki Confluence account, you can also create pages on the + <a href="http://cwiki.apache.org/S2WIKI/home.html">Struts 2 Wiki</a> without filing a CLA.</p> <p>If you are submitting new material, it is important to decide exactly where you would put this -in relation to the rest of the documentation. -Again, someone has to figure that out before it can be added, and that someone might as well be you.</p></li> -<li><h3><a name="release"></a>So when is the next release coming out?</h3> + in relation to the rest of the documentation. + Again, someone has to figure that out before it can be added, and that someone might as well be you.</p> + +<ul> + <li> + <h3 id="a-namereleaseaso-when-is-the-next-release-coming-out"><a name="release"></a>So when is the next release coming out?</h3> + </li> +</ul> <p>Here is the truth regarding releases:</p> <p>Apache products are released on the basis of merit, and ~not~ according to a strict timetable. -The volunteers devote whatever time they can to work on the product. But all volunteers have real jobs -and real lives, that do take precedence. Since Struts does not have paid personnel working on the project, -we simply cannot make date-oriented commitments.</p> + The volunteers devote whatever time they can to work on the product. But all volunteers have real jobs + and real lives, that do take precedence. Since Struts does not have paid personnel working on the project, + we simply cannot make date-oriented commitments.</p> <p>The bottom line is that Apache takes releases very seriously. We do not compromise the quality of our software by -watching the calendar (and then ship something ready or not). A release is ready when it is ready.</p> + watching the calendar (and then ship something ready or not). A release is ready when it is ready.</p> <p>That may sound flip, but it ~is~ the truth. The delivery of production-quality, leading-edge software -is not something anyone can prognosticate. If anyone tries, they are lying to you. -That, we won't do ;-)</p> + is not something anyone can prognosticate. If anyone tries, they are lying to you. + That, we wonât do ;-)</p> <p>What we ~will~ do is release all of our development software as soon as it is developed. -This way you can judge for yourself how quickly the development is proceeding, and whether what is being -developed will meet your needs. -If you need a feature right now, you can use the nightly build, or roll your own patch. There are no internal -code repositories, private development lists, secret chat rooms, or conference calls. -What you see is what we got. If you are following the DEV list, then you know everything the developers know. -Really, you do.</p> + This way you can judge for yourself how quickly the development is proceeding, and whether what is being + developed will meet your needs. + If you need a feature right now, you can use the nightly build, or roll your own patch. There are no internal + code repositories, private development lists, secret chat rooms, or conference calls. + What you see is what we got. If you are following the DEV list, then you know everything the developers know. + Really, you do.</p> <p><em>So, what do you tell your team</em>? -If you can ship your application based on the nightly build of your choice, then consider that an option. -You can still ship yours, even if we don't ship ours, and you will have access to all the latest patches or -enhancements. (Just like we were working down the hall.) If you can only ship your application based on a release -build of Struts, then you should base your development on the release build of Struts, -and keep an eye on what is coming down the pipeline. -This way you are at least forewarned and forearmed.</p></li> -<li><h3><a name="release_help"></a>What can I do to help the next release along?</h3> + If you can ship your application based on the nightly build of your choice, then consider that an option. + You can still ship yours, even if we donât ship ours, and you will have access to all the latest patches or + enhancements. (Just like we were working down the hall.) If you can only ship your application based on a release + build of Struts, then you should base your development on the release build of Struts, + and keep an eye on what is coming down the pipeline. + This way you are at least forewarned and forearmed.</p> <ul> -<li>Most importantly, download the latest <a href="builds.html#NightlyBuilds">nightly build</a> or development release + <li> + <h3 id="a-namereleasehelpawhat-can-i-do-to-help-the-next-release-along"><a name="release_help"></a>What can I do to help the next release along?</h3> + + <ul> + <li> + <p>Most importantly, download the latest <a href="builds.html#NightlyBuilds">nightly build</a> or development release and test it against your own applications. Report any and all issues or suspected issues to <a href="#issues">the issue tracker</a>. The sooner we resolve any problems, the fewer betas or release candidates we will have to distribute before we are done. -(How do we know when we're done? -- When we run out of issues =:o) The sooner we find them, the sooner we are done.)</li> -<li><strong>Contribute <a href="kickstart.html#tests">unit tests</a></strong>. The closer we get to a release, the more we worry +(How do we know when weâre done? â When we run out of issues =:o) The sooner we find them, the sooner we are done.)</p> + </li> + <li> + <p><strong>Contribute <a href="kickstart.html#tests">unit tests</a></strong>. The closer we get to a release, the more we worry about breaking something. The more tests we have, the more confident we can be when applying patches. Tests that prove that a pending issue is actually a defect are the most welcome ones. -But we are eager for any and all tests for any and all features, even those that still work =:0).</li> -<li><strong>Review the list of issues</strong> at <a href="#issues">the issue tracker</a>. If there are any to which you can respond, please +But we are eager for any and all tests for any and all features, even those that still work =:0).</p> + </li> + <li> + <p><strong>Review the list of issues</strong> at <a href="#issues">the issue tracker</a>. If there are any to which you can respond, please do. If there any patches posted, feel free to test them your system, report the results, and cast your vote -if they work.</li> -<li><em>Confirm an issue's category and status</em>. Newbies often post feature suggestions or help-desk -questions as "bugs". This bloats the list of fixes we (apparently) need to apply before the next +if they work.</p> + </li> + <li> + <p><em>Confirm an issueâs category and status</em>. Newbies often post feature suggestions or help-desk +questions as âbugsâ. This bloats the list of fixes we (apparently) need to apply before the next beta, making it hard to see the forest for the trees. -If an issue doesn't seem to be categorized correctly, exercise your best judgment and change it. +If an issue doesnât seem to be categorized correctly, exercise your best judgment and change it. If one ticket seems like a duplicate of another, go ahead and enter the change. Every modification to the ticket is echoed to the DEV list and automatically subjected to peer review. -Err on the side of doing.</li> -<li>Use the issue tracker to <strong>vote for issues</strong> you feel should be handled first. If an issue on your -ballot doesn't include a patch, feel free to try coding one yourself. (In a meritocracy, patches are +Err on the side of doing.</p> + </li> + <li> + <p>Use the issue tracker to <strong>vote for issues</strong> you feel should be handled first. If an issue on your +ballot doesnât include a patch, feel free to try coding one yourself. (In a meritocracy, patches are the only votes that matter.) -Dozens of developers have contributed code or documentation to Struts. You can too =:0)</li> -<li><strong>Answer questions on the user list</strong>. The Committers only have a limited amount of time to volunteer. +Dozens of developers have contributed code or documentation to Struts. You can too =:0)</p> + </li> + <li> + <p><strong>Answer questions on the user list</strong>. The Committers only have a limited amount of time to volunteer. If Developers are supporting each other on the lists, the Committers have more time to spend on the next -release.</li> -</ul></li> -<li><h3><a name="decides_help"></a>How can I help make the decisions?</h3> - -<p>A guiding principle of the Apache Software Foundation is "them that do the work, make the decisions". -This phrase is actually a double-entendre. A project will make some decisions by voting (very few), -but the real decisions are made when a volunteer actually does the work. Unless someone volunteers to do the work, -other decisions are meaningless.</p> +release.</p> + </li> + </ul> + </li> + <li> + <h3 id="a-namedecideshelpahow-can-i-help-make-the-decisions"><a name="decides_help"></a>How can I help make the decisions?</h3> + </li> +</ul> + +<p>A guiding principle of the Apache Software Foundation is âthem that do the work, make the decisionsâ. + This phrase is actually a double-entendre. A project will make some decisions by voting (very few), + but the real decisions are made when a volunteer actually does the work. Unless someone volunteers to do the work, + other decisions are meaningless.</p> <p>In an ASF project, like Apache Struts, volunteers who make sustained contributions to the project -are invited to become "Committers". In due course, Committers are invited to join the Project Management -Committee (PMC). -A goal of the ASF is for all Committers to be on the PMC.</p> - -<p>By "sustained", we mean that an individual has been active in the project for at least six months. -The contributions should come in the form of both patches (to code or documentation), and posts to the mailing -lists. Patches must be competent and accepted into the repository. Posts must be consistently helpful, friendly, -and collaborative. The most important characteristic in a prospective Committer is an -amicable demeanor that fosters goodwill.</p> + are invited to become âCommittersâ. In due course, Committers are invited to join the Project Management + Committee (PMC). + A goal of the ASF is for all Committers to be on the PMC.</p> + +<p>By âsustainedâ, we mean that an individual has been active in the project for at least six months. + The contributions should come in the form of both patches (to code or documentation), and posts to the mailing + lists. Patches must be competent and accepted into the repository. Posts must be consistently helpful, friendly, + and collaborative. The most important characteristic in a prospective Committer is an + amicable demeanor that fosters goodwill.</p> <p>As PMC members take note of Struts developers who meet our qualifications, one of us will call for a vote on -the internal PMC mailing list. (This usually happens when someone gets tired of applying -the volunteer's patches!) The internal list is rarely used, and it is never used for development discussions. -If the PMC vote passes, we will send the developer a invitation privately, to give the individual a chance to accept -or discretely decline. -If the candidate is able to accept, the PMC will announce the new member on the dev list.</p> + the internal PMC mailing list. (This usually happens when someone gets tired of applying + the volunteerâs patches!) The internal list is rarely used, and it is never used for development discussions. + If the PMC vote passes, we will send the developer a invitation privately, to give the individual a chance to accept + or discretely decline. + If the candidate is able to accept, the PMC will announce the new member on the dev list.</p> <p>For more about decision-making, see <a href="http://apache.org/foundation/how-it-works.html">How the ASF Works</a> -and the <a href="bylaws.html">Apache Struts Charter</a>. For more about project infrastructure, -see "Project Maintenance and Resources" in the <a href="http://wiki.apache.org/struts/">Struts 1 wiki</a>.</p></li> -</ul> + and the <a href="bylaws.html">Apache Struts Charter</a>. For more about project infrastructure, + see âProject Maintenance and Resourcesâ in the <a href="http://wiki.apache.org/struts/">Struts 1 wiki</a>.</p> </section> </article> @@ -361,5 +411,19 @@ see "Project Maintenance and Resour }(document, 'script', 'facebook-jssdk'));</script> +<script> +$(function() { + return $("h2, h3, h4, h5, h6").each(function(i, el) { + var $el, icon, id; + $el = $(el); + id = $el.attr('id'); + icon = '<i class="fa fa-link"></i>'; + if (id) { + return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon)); + } + }); +}); +</script> + </body> </html>
Modified: websites/production/struts/content/index.html ============================================================================== --- websites/production/struts/content/index.html (original) +++ websites/production/struts/content/index.html Wed Dec 31 10:10:27 2014 @@ -10,9 +10,10 @@ <title>Welcome to the Apache Struts project</title> <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css"> - <link rel="stylesheet" href="css/main.css"> + <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"> + <link href="css/main.css" rel="stylesheet"> - <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> + <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <script type="text/javascript" src="js/community.js"></script> </head> Modified: websites/production/struts/content/kickstart.html ============================================================================== --- websites/production/struts/content/kickstart.html (original) +++ websites/production/struts/content/kickstart.html Wed Dec 31 10:10:27 2014 @@ -10,9 +10,11 @@ <title>Kickstart FAQ</title> <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css"> - <link rel="stylesheet" href="css/main.css"> + <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"> + <link href="css/main.css" rel="stylesheet"> + <link href="css/custom.css" rel="stylesheet"> - <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> + <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <script type="text/javascript" src="js/community.js"></script> </head> @@ -118,155 +120,236 @@ <article class="container"> <section class="col-md-12"> - <h1>Kickstart FAQ</h1> + <h1 id="kickstart-faq">Kickstart FAQ</h1> -<h2>General</h2> +<h2 id="general">General</h2> <ul> -<li><h3>I'm new to Apache Struts. How do I get started?</h3> - -<p>The best place to start is with the "best available" <a href="downloads.html">release</a>. -If you are new to Java or web development, as well as Apache Struts, be sure to review the -<a href="primer.html">Key Technologies Primer</a>.</p> + <li> + <h3 id="im-new-to-apache-struts-how-do-i-get-started">Iâm new to Apache Struts. How do I get started?</h3> + </li> +</ul> -<p>The main Struts web site includes documentation for the latest "General Availability" release -in each major release series. The development section of the site inclues draft documentation -for upcoming releases. If you are just getting started, focus on the latest General -Availability release, Documentation for past <a href="downloads.html">releases</a> is also available.</p> +<p>The best place to start is with the âbest availableâ <a href="downloads.html">release</a>. + If you are new to Java or web development, as well as Apache Struts, be sure to review the + <a href="primer.html">Key Technologies Primer</a>.</p> + +<p>The main Struts web site includes documentation for the latest âGeneral Availabilityâ release + in each major release series. The development section of the site inclues draft documentation + for upcoming releases. If you are just getting started, focus on the latest General + Availability release, Documentation for past <a href="downloads.html">releases</a> is also available.</p> <p>If you have questions, you can search the <a href="mail.html#archives">User Mailing List archives</a>, -or <a href="mail.html">post your own question to the list</a>. (Plain old Google usually works too!)</p></li> -<li><h3>Looking at the releases page, some versions seem to be missing. What happened to them?</h3> + or <a href="mail.html">post your own question to the list</a>. (Plain old Google usually works too!)</p> -<p>Apache Struts uses a "milestone build" system to create releases. First, we create a build -with a milestone version number, like Struts 2.0.42, and post the distribution in the development area. -The development group tests the distribution, and then we decide whether or not to release it. -The distribution includes everything that would be released, including the documentation and the release notes -for this version.</p> +<ul> + <li> + <h3 id="looking-at-the-releases-page-some-versions-seem-to-be-missing-what-happened-to-them">Looking at the releases page, some versions seem to be missing. What happened to them?</h3> + </li> +</ul> + +<p>Apache Struts uses a âmilestone buildâ system to create releases. First, we create a build + with a milestone version number, like Struts 2.0.42, and post the distribution in the development area. + The development group tests the distribution, and then we decide whether or not to release it. + The distribution includes everything that would be released, including the documentation and the release notes + for this version.</p> <p>If we find a significant problem with the distribution, we may decide not to release it, and just leave -the distribution as a "test build". The testing may take several days, and in the meantime, we want to keep -the project moving, and so we just go onto the next version number. -Using our example, the next distribution would be labeled 2.0.43, even if version 2.0.42 was never officially -released.</p> - -<p>Often. we will first grade a release as a "beta", and invite other users to test it too. If this second -round of beta testing goes well, then we may mark the release "General Availability". -Usually, that designation would also make it the new "Best Available" release. In this case, we don't create -another distribution, but simply adjust the status of the same set of bits that people have been testing all along.</p> - -<p>In practice, the milestone build system is fast and efficient and creates the fewest number of "candidate builds" -between releases.</p></li> -<li><h3>Why is the project called "Struts"?</h3> - -<p>It's a reference to "struts" in the architectural sense, a reminder of the nearly invisible pieces that hold up -buildings, houses, and bridges.</p></li> -<li><h3>How is Apache Struts licensed?</h3> + the distribution as a âtest buildâ. The testing may take several days, and in the meantime, we want to keep + the project moving, and so we just go onto the next version number. + Using our example, the next distribution would be labeled 2.0.43, even if version 2.0.42 was never officially + released.</p> + +<p>Often. we will first grade a release as a âbetaâ, and invite other users to test it too. If this second + round of beta testing goes well, then we may mark the release âGeneral Availabilityâ. + Usually, that designation would also make it the new âBest Availableâ release. In this case, we donât create + another distribution, but simply adjust the status of the same set of bits that people have been testing all along.</p> + +<p>In practice, the milestone build system is fast and efficient and creates the fewest number of âcandidate buildsâ + between releases.</p> + +<ul> + <li> + <h3 id="why-is-the-project-called-struts">Why is the project called âStrutsâ?</h3> + </li> +</ul> + +<p>Itâs a reference to âstrutsâ in the architectural sense, a reminder of the nearly invisible pieces that hold up + buildings, houses, and bridges.</p> + +<ul> + <li> + <h3 id="how-is-apache-struts-licensed">How is Apache Struts licensed?</h3> + </li> +</ul> <p>All Apache Struts products are copyrighted software available under the <a href="http://www.apache.org/licenses">Apache License</a>, -a "free-to-use, business-friendly license".</p></li> -<li><h3>Can Apache Struts be used in a commercial product?</h3> + a "free-to-use, business-friendly license".</p> -<p>Yes. The only requirements you must meet are those listed in the <a href="http://www.apache.org/licenses">Apache License</a>.</p></li> -<li><h3>Do I have to credit Apache Struts on my own web site?</h3> +<ul> + <li> + <h3 id="can-apache-struts-be-used-in-a-commercial-product">Can Apache Struts be used in a commercial product?</h3> + </li> +</ul> + +<p>Yes. The only requirements you must meet are those listed in the <a href="http://www.apache.org/licenses">Apache License</a>.</p> + +<ul> + <li> + <h3 id="do-i-have-to-credit-apache-struts-on-my-own-web-site">Do I have to credit Apache Struts on my own web site?</h3> + </li> +</ul> <p>You need to credit Apache Struts if you <strong>redistribute your own framework</strong> based on our products -for other people to use. (See the <a href="http://www.apache.org/LICENSE">Apache License</a> for details.) -But you do <strong>not</strong> need to credit Apache Struts just because your web application utilizes one of our products. -It's the same situation as using the Apache HTTPD server or Tomcat. Not required if its just running your web site. -Required if you've used the source code to create your own server that you are redistributing to other people.</p></li> -<li><h3>Are there ISPs that will host my Java web application?</h3> + for other people to use. (See the <a href="http://www.apache.org/LICENSE">Apache License</a> for details.) + But you do <strong>not</strong> need to credit Apache Struts just because your web application utilizes one of our products. + Itâs the same situation as using the Apache HTTPD server or Tomcat. Not required if its just running your web site. + Required if youâve used the source code to create your own server that you are redistributing to other people.</p> + +<ul> + <li> + <h3 id="are-there-isps-that-will-host-my-java-web-application">Are there ISPs that will host my Java web application?</h3> + </li> +</ul> <p>For a listing of some Java and Struts ISPs, visit the <a href="http://struts.sf.net/community/index.html">Struts Community Resources</a> -area on SourceForge.</p></li> -<li><h3>Is there a particularly good IDE to use?</h3> + area on SourceForge.</p> + +<ul> + <li> + <h3 id="is-there-a-particularly-good-ide-to-use">Is there a particularly good IDE to use?</h3> + </li> +</ul> <p>The frameworks should work well with any development environment that you would like to use, as well as with any -programmers editor. The members of the Apache Struts development group each use their own tools such as -<a href="http://www.gnu.org/software/emacs/emacs.html">Emacs</a>, <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>, -<a href="http://www.eclipse.org/">Eclipse</a>, and <a href="http://www.netbeans.org/">NetBeans</a>.</p> + programmers editor. The members of the Apache Struts development group each use their own tools such as + <a href="http://www.gnu.org/software/emacs/emacs.html">Emacs</a>, <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>, + <a href="http://www.eclipse.org/">Eclipse</a>, and <a href="http://www.netbeans.org/">NetBeans</a>.</p> -<p>For more, see the <a href="http://wiki.apache.org/struts/StrutsMyFavoriteIDE">IDE discussion page</a> in the Struts wiki.</p></li> -</ul> +<p>For more, see the <a href="http://wiki.apache.org/struts/StrutsMyFavoriteIDE">IDE discussion page</a> in the Struts wiki.</p> -<h2>Product Support</h2> +<h2 id="product-support">Product Support</h2> <ul> -<li><h3>Where can I get help with Apache Struts?</h3> + <li> + <h3 id="where-can-i-get-help-with-apache-struts">Where can I get help with Apache Struts?</h3> + </li> +</ul> <p>Each release of Struts comes with a User Guide or set of Tutorials to introduce people to the framework -and its underlying technologies. Various components also have their own in-depth Developers Guide, to cover -more advanced topics. Comprehensive Javadocs are provided for each release, along with the <strong>full source code</strong>.</p> + and its underlying technologies. Various components also have their own in-depth Developers Guide, to cover + more advanced topics. Comprehensive Javadocs are provided for each release, along with the <strong>full source code</strong>.</p> <p>The <a href="mail.html">Struts user mailing list</a> is also very active, and welcomes posts from new users. Before -posting a new question, be sure to consult the <strong><a href="mail.html#Archives">MAILING LIST ARCHIVE</a></strong> -and the very excellent <a href="http://www.catb.org/%7Eesr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a> -by Eric Raymond. Please do be sure to <a href="http://expita.com/nomime.html">turn off HTML</a> in your -email client before posting.</p></li> -<li><h3>Is commercial support available?</h3> + posting a new question, be sure to consult the <strong><a href="mail.html#Archives">MAILING LIST ARCHIVE</a></strong> + and the very excellent <a href="http://www.catb.org/~esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a> + by Eric Raymond. Please do be sure to <a href="http://expita.com/nomime.html">turn off HTML</a> in your + email client before posting.</p> + +<ul> + <li> + <h3 id="is-commercial-support-available">Is commercial support available?</h3> + </li> +</ul> <p>The Apache Software Foundation does not provide commercial support for any of our software products, -including Apache Struts. However, third parties may offer different degrees of support.</p></li> -<li><h3>If a product doesn't do what I want, can I request that a feature be added?</h3> + including Apache Struts. However, third parties may offer different degrees of support.</p> -<p>First, it's important to remember that Apache Struts is an all-volunteer project. We don't charge anyone -anything to use Apache Struts products. Committers and other developers work on Apache Struts products because -they need to use it with their own applications. If others can use it too, that's "icing on the cake". -If you <a href="helping.html">submit a patch</a> for a feature that a Committer finds useful, then that -Committer may choose to volunteer his or her time to apply the patch. -If you just submit an idea without a patch, it is much less likely to be added (since first someone else has to -volunteer their time to write the patch).</p> +<ul> + <li> + <h3 id="if-a-product-doesnt-do-what-i-want-can-i-request-that-a-feature-be-added">If a product doesnât do what I want, can I request that a feature be added?</h3> + </li> +</ul> + +<p>First, itâs important to remember that Apache Struts is an all-volunteer project. We donât charge anyone + anything to use Apache Struts products. Committers and other developers work on Apache Struts products because + they need to use it with their own applications. If others can use it too, thatâs âicing on the cakeâ. + If you <a href="helping.html">submit a patch</a> for a feature that a Committer finds useful, then that + Committer may choose to volunteer his or her time to apply the patch. + If you just submit an idea without a patch, it is much less likely to be added (since first someone else has to + volunteer their time to write the patch).</p> <p>We are grateful for any patches, and we welcome new ideas, but the best way to see that something gets added -to the framework is to do as much of the work as you can, rather than rely on the "kindness of strangers". -Worst case, you can apply the patch to your copy of the framework and still use the feature in your own application. -(Which is what open source is <em>really</em> all about.)</p></li> -<li><h3>Is there a press kit for Apache Struts?</h3> + to the framework is to do as much of the work as you can, rather than rely on the âkindness of strangersâ. + Worst case, you can apply the patch to your copy of the framework and still use the feature in your own application. + (Which is what open source is <em>really</em> all about.)</p> + +<ul> + <li> + <h3 id="is-there-a-press-kit-for-apache-struts">Is there a press kit for Apache Struts?</h3> + </li> +</ul> <p>Except for our <a href="announce.html">announcements page</a>, there is not a formal press or media kit for Apache Struts. -Queries from the press (and ONLY queries from the press, NOT support questions or anything else!) -should go to our media relations address: <a href="mailto:pr...@apache.org">pr...@apache.org</a>.</p></li> -<li><h3>Where can I report a potential security vulnerability?</h3> + Queries from the press (and ONLY queries from the press, NOT support questions or anything else!) + should go to our media relations address: <a href="mailto:press@apache.org">press@apache.org</a>.</p> -<p>If you believe you've found a security vulnerability in Apache Struts, please contact our security address - any -emails not relating to security vulnerabilities will be ignored without a reply (all security related information -will be kept confidential unless otherwise indicated): <a href="mailto:secur...@struts.apache.org">secur...@struts.apache.org</a>.</p></li> +<ul> + <li> + <h3 id="where-can-i-report-a-potential-security-vulnerability">Where can I report a potential security vulnerability?</h3> + </li> </ul> -<h2>Mailing Lists</h2> +<p>If you believe youâve found a security vulnerability in Apache Struts, please contact our security address - any + emails not relating to security vulnerabilities will be ignored without a reply (all security related information + will be kept confidential unless otherwise indicated): <a href="mailto:security@struts.apache.org">security@struts.apache.org</a>.</p> + +<h2 id="mailing-lists">Mailing Lists</h2> <ul> -<li><h3>Is there a digest for the User list?</h3> + <li> + <h3 id="is-there-a-digest-for-the-user-list">Is there a digest for the User list?</h3> + </li> +</ul> -<p>Yes. Send a blank message to <a href="mailto:user-digest-subscr...@struts.apache.org">user-digest-subscr...@struts.apache.org</a>.</p> +<p>Yes. Send a blank message to <a href="mailto:user-digest-subscribe@struts.apache.org">user-digest-subscribe@struts.apache.org</a>.</p> <p>If you are subscribed to the digest, you can also post to the list. Just be sure to send your post to -the <a href="mailto:u...@struts.apache.org">user list</a> rather than trying to reply to the digest.</p></li> -<li><h3>Is there an Apache Struts newsgroup?</h3> + the <a href="mailto:user@struts.apache.org">user list</a> rather than trying to reply to the digest.</p> + +<ul> + <li> + <h3 id="is-there-an-apache-struts-newsgroup">Is there an Apache Struts newsgroup?</h3> + </li> +</ul> <p>Not a usenet group, but the Apache Struts User list can be accessed with your favorite newsgroup reader from -the <a href="http://news.gmane.org/">GMane News Site</a>. Subscribe to groups <code>gmane.comp.jakarta.struts.user</code> -for the user list.</p></li> -<li><h3>Why didn't my posting show up on the user list?</h3> - -<p>You must be subscribed to the <a href="mailto:user-subscr...@struts.apache.org">user list</a> or -<a href="mailto:user-digest-subscr...@struts.apache.org">user digest</a> before posting (or use the -<a href="http://news.gmane.org">GMane Newsgroups</a> instead).</p></li> -<li><h3>Are there separate user lists for Struts 1 and Struts 2?</h3> + the <a href="http://news.gmane.org/">GMane News Site</a>. Subscribe to groups <code>gmane.comp.jakarta.struts.user</code> + for the user list.</p> + +<ul> + <li> + <h3 id="why-didnt-my-posting-show-up-on-the-user-list">Why didnât my posting show up on the user list?</h3> + </li> +</ul> -<p>No. Each major version has it's own JIRA project, but we share the mailing lists.</p> +<p>You must be subscribed to the <a href="mailto:user-subscribe@struts.apache.org">user list</a> or + <a href="mailto:user-digest-subscribe@struts.apache.org">user digest</a> before posting (or use the + <a href="http://news.gmane.org">GMane Newsgroups</a> instead).</p> + +<ul> + <li> + <h3 id="are-there-separate-user-lists-for-struts-1-and-struts-2">Are there separate user lists for Struts 1 and Struts 2?</h3> + </li> +</ul> + +<p>No. Each major version has itâs own JIRA project, but we share the mailing lists.</p> <p>To get the best response to an inquiry, please specify which version of Struts is being used, -including the milestone ("Struts 1.2.9", for example). You can also include the label <strong>[s1]</strong> -or <strong>[s2]</strong> in the subject line of your post.</p></li> -<li><h3>How do I unsubscribe from the mailing list?</h3> + including the milestone (âStruts 1.2.9â, for example). You can also include the label <strong>[s1]</strong> + or <strong>[s2]</strong> in the subject line of your post.</p> + +<ul> + <li> + <h3 id="how-do-i-unsubscribe-from-the-mailing-list">How do I unsubscribe from the mailing list?</h3> + </li> +</ul> <p><strong>From the email account used to subscribe to the list</strong>, send a blank message to -<a href="mailto:user-unsubscr...@struts.apache.org">user-unsubscr...@struts.apache.org</a>.</p> + <a href="mailto:user-unsubscribe@struts.apache.org">user-unsubscribe@struts.apache.org</a>.</p> <p>If you are receiving the digest, you must send a blank email to -<a href="mailto:user-digest-unsubscr...@struts.apache.org">user-unsubscr...@struts.apache.org</a> instead.</p></li> -</ul> + <a href="mailto:user-digest-unsubscribe@struts.apache.org">user-unsubscr...@struts.apache.org</a> instead.</p> </section> </article> @@ -307,5 +390,19 @@ or <strong>[s2]</strong> in the subject }(document, 'script', 'facebook-jssdk'));</script> +<script> +$(function() { + return $("h2, h3, h4, h5, h6").each(function(i, el) { + var $el, icon, id; + $el = $(el); + id = $el.attr('id'); + icon = '<i class="fa fa-link"></i>'; + if (id) { + return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon)); + } + }); +}); +</script> + </body> </html> Modified: websites/production/struts/content/mail.html ============================================================================== --- websites/production/struts/content/mail.html (original) +++ websites/production/struts/content/mail.html Wed Dec 31 10:10:27 2014 @@ -10,9 +10,11 @@ <title>Mailing Lists</title> <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css"> - <link rel="stylesheet" href="css/main.css"> + <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"> + <link href="css/main.css" rel="stylesheet"> + <link href="css/custom.css" rel="stylesheet"> - <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> + <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <script type="text/javascript" src="js/community.js"></script> </head> @@ -363,5 +365,19 @@ }(document, 'script', 'facebook-jssdk'));</script> +<script> +$(function() { + return $("h2, h3, h4, h5, h6").each(function(i, el) { + var $el, icon, id; + $el = $(el); + id = $el.attr('id'); + icon = '<i class="fa fa-link"></i>'; + if (id) { + return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon)); + } + }); +}); +</script> + </body> </html> Modified: websites/production/struts/content/primer.html ============================================================================== --- websites/production/struts/content/primer.html (original) +++ websites/production/struts/content/primer.html Wed Dec 31 10:10:27 2014 @@ -10,9 +10,11 @@ <title>Key Technologies Primer</title> <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css"> - <link rel="stylesheet" href="css/main.css"> + <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"> + <link href="css/main.css" rel="stylesheet"> + <link href="css/custom.css" rel="stylesheet"> - <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> + <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <script type="text/javascript" src="js/community.js"></script> </head> @@ -118,49 +120,49 @@ <article class="container"> <section class="col-md-12"> - <h1>Key Technologies Primer</h1> + <h1 id="key-technologies-primer">Key Technologies Primer</h1> <blockquote> -<p><em>"The time has come," the Walrus said, "To talk of many things: - Of shoes -- and ships -- and sealing-wax -- Of cabbages -- and kings -- - And why the sea is boiling hot -- And whether pigs have wings."</em></p> + <p><em>âThe time has come,â the Walrus said, âTo talk of many things: + Of shoes â and ships â and sealing-wax â Of cabbages â and kings â + And why the sea is boiling hot â And whether pigs have wings.â</em></p> </blockquote> -<h2>Intention</h2> +<h2 id="intention">Intention</h2> <p>If you would like to get started with Apache Struts you most likely want to know what technologies you need to learn. This document shall give you a brief overview what you need to successfully run a Struts project.</p> -<p>If you still can't decide if Struts is for you or if you have any questions, +<p>If you still canât decide if Struts is for you or if you have any questions, feel free to contact us via the <a href="mail.html">Struts user mailinglist</a>.</p> -<h2>Key Technologies</h2> +<h2 id="key-technologies">Key Technologies</h2> -<h3>What you need to know</h3> +<h3 id="what-you-need-to-know">What you need to know</h3> <p>The framework documentation is written for active web developers and assumes a working knowledge about how Java web applications are built. Before getting started, you should understand the basics of several key technologies:</p> <ul> -<li><a href="#http">HTTP and HTML</a></li> -<li><a href="#cycle">The HTTP Request/Response Cycle</a></li> -<li><a href="#java">The Java Language and Application Frameworks</a></li> -<li><a href="#javascript">JavaScript, AJAX, and SOAP</a></li> -<li><a href="#resources">Properties Files and ResourceBundles</a></li> -<li><a href="#containers">Servlets, Filters and Web Containers</a></li> -<li><a href="#jsp">JavaServer Pages and JSP Tag Libraries</a></li> -<li><a href="#xml">Extensible Markup Language (XML)</a></li> -<li><a href="#jaas">JAAS</a></li> -<li><a href="#mvc">Model View Controller</a></li> + <li><a href="#http">HTTP and HTML</a></li> + <li><a href="#cycle">The HTTP Request/Response Cycle</a></li> + <li><a href="#java">The Java Language and Application Frameworks</a></li> + <li><a href="#javascript">JavaScript, AJAX, and SOAP</a></li> + <li><a href="#resources">Properties Files and ResourceBundles</a></li> + <li><a href="#containers">Servlets, Filters and Web Containers</a></li> + <li><a href="#jsp">JavaServer Pages and JSP Tag Libraries</a></li> + <li><a href="#xml">Extensible Markup Language (XML)</a></li> + <li><a href="#jaas">JAAS</a></li> + <li><a href="#mvc">Model View Controller</a></li> </ul> <p>This primer briefly defines each of these technologies but does not describe them in detail. For your convenience, links to further information are often provided where it makes sense.</p> -<h3>General starting points</h3> +<h3 id="general-starting-points">General starting points</h3> <p>If you are not familiar with the Java language generally,then the best starting point is the <a href="http://docs.oracle.com/javase/tutorial/index.html">Java Tutorial</a>.</p> @@ -168,12 +170,12 @@ are often provided where it makes sense. <p>If you are familiar with Java, but not the mentioned technologies, the best overall starting point is the <a href="http://docs.oracle.com/javaee/7/tutorial/doc/">Java EE Tutorial</a>.</p> -<p>If you've created web applications for other platforms, you +<p>If youâve created web applications for other platforms, you may be able to follow along and visit the other references as needed. The core technologies used by Struts are also used by most other Java web development products, so -the background information will be useful in any Java project.</p></p> +the background information will be useful in any Java project.</p></p> -<h3><a name="http"></a>HTTP, HTML and User Agents</h3> +<h3 id="a-namehttpahttp-html-and-user-agents"><a name="http"></a>HTTP, HTML and User Agents</h3> <p>The World Wide Web was built over the Hypertext Transfer Protocol <a href="http://www.ietf.org/rfc/rfc2616.txt?number=2616">(HTTP)</a> @@ -185,7 +187,7 @@ transport more the HTML, HTML from the b <p>If you would like to learn HTML, we recommend <a href="http://www.w3.org/MarkUp/Guide/">Getting started with HTML</a> by Dave Raggett.</p> -<h3><a name="cycle"></a>The HTTP Request/Response cycle</h3> +<h3 id="a-namecycleathe-http-requestresponse-cycle"><a name="cycle"></a>The HTTP Request/Response cycle</h3> <p>A very important part of HTTP for the web developer is the request/response cycle. To use HTTP you have to make a request. A HTTP server, like a web server, is then obliged to respond. When you @@ -197,7 +199,7 @@ what is happening behind the scenes.</p> There is a lot of help available in the internet, like <a href="http://docs.webplatform.org/wiki/tutorials/How_does_the_Internet_work">How does the Internet work?</a></p> -<h3><a name="java"></a>The Java Language and Application Frameworks</h3> +<h3 id="a-namejavaathe-java-language-and-application-frameworks"><a name="java"></a>The Java Language and Application Frameworks</h3> <p>Struts is written in the <a href="http://www.oracle.com/us/technologies/java/overview/index.html">Java programming language</a>. @@ -206,7 +208,7 @@ object-orientated techniques. A good und object-orientated programming (OOP) and threading, will help you get the most out of Struts.</p> -<h4><a name="reflection"></a>Reflection and Introspection</h4> +<h4 id="a-namereflectionareflection-and-introspection"><a name="reflection"></a>Reflection and Introspection</h4> <p>Reflection is the process of determining which member fields and methods are available on an object. Introspection is a specialized form of reflection used by the JavaBean API. @@ -214,13 +216,13 @@ Using Introspection, we can determine wh The getters and the setters, for example.</p> <p>Struts uses Introspection to convert HTTP parameters into JavaBean properties and to populate HTML -fields from JavaBean properties. This technique makes it easy to "roundtrip" properties +fields from JavaBean properties. This technique makes it easy to âroundtripâ properties between HTML forms and JavaBeans.</p> <p>While it is not necessary to have a deep understanding of these concepts when you start with Apache Struts, it will help you when your application grows and becomes more complex.</p> -<h4><a name="resources"></a>Properties Files and ResourceBundles</h4> +<h4 id="a-nameresourcesaproperties-files-and-resourcebundles"><a name="resources"></a>Properties Files and ResourceBundles</h4> <p>Java applications, including web applications, are often configured using <a href="http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html">Properties</a> @@ -238,14 +240,14 @@ Support for localizing an application wa <p>Again the Java Tutorials provide <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/concept.html">more information</a>.</p> -<h4><a name="threads"></a>Threads</h4> +<h4 id="a-namethreadsathreads"><a name="threads"></a>Threads</h4> <p>With Struts 1 you were required to know a lot about how to write code which can run in a multi-threaded environment. With Struts 2 this is no longer necessary. In an Struts 2 environment each action caused by a HTTP request is a plain old Java object which is instanced for each request.</p> -<h3><a name="javascript"></a>JavaScript, AJAX, and SOAP</h3> +<h3 id="a-namejavascriptajavascript-ajax-and-soap"><a name="javascript"></a>JavaScript, AJAX, and SOAP</h3> <p>WIth HTTP and HTML you can already provide static web pages. Today this is much often not longer enough and your application users might expect a interactive user interface. @@ -257,7 +259,7 @@ to create web applications that are as i It is possible, to load a view parts of the website or just the data from the (Struts) application instead of regenerating the whole view.</p> -<p>Apache Struts provides plugins to easily work with AJAX and even JavaScript. Where Struts can't provide +<p>Apache Struts provides plugins to easily work with AJAX and even JavaScript. Where Struts canât provide the necessary functionality, third parties provide extensions for the required behavior.</p> <p>Another technology that can enhance the HTTP request/response cycle is <a href="http://en.wikipedia.org/wiki/SOAP">SOAP</a>. @@ -267,13 +269,13 @@ requests directly to a remote server, wh the business logic and the page markup. Depending on your applications need, it might be not necessary for you to learn about SOAP.</p> -<h3><a name="containers"></a>Servlets, Filters, and Web Containers</h3> +<h3 id="a-namecontainersaservlets-filters-and-web-containers"><a name="containers"></a>Servlets, Filters, and Web Containers</h3> <p>Since Java is an object-orientated language, the <a href="http://docs.oracle.com/javaee/6/tutorial/doc/bnafd.html">Java Servlet</a> platform strives to cast HTTP into an object-orientated form. This strategy makes it easier for Java developers to concentrate on what they need their -application to do -- rather than the mechanics of HTTP.</p> +application to do â rather than the mechanics of HTTP.</p> <p>A Java-aware HTTP server can pass a request to a servlet container. The container can fulfill the request or it can pass the request back to the HTTP server. @@ -283,14 +285,14 @@ If there is a servlet registered for the <p>When a request comes in, the container checks to see if there is a servlet registered for that request. If there is a match, the request is given to the servlet. If not, the request is returned to the HTTP server.</p> -<p>It's the container's job to manages the servlet lifecycle. The container creates the servlets, invokes the servlets, +<p>Itâs the containerâs job to manages the servlet lifecycle. The container creates the servlets, invokes the servlets, and ultimately disposes the servlets.</p> <p>The old Struts 1 version relied heavily on servlets and good knowledge about it usually helped a lot with developing web applications.</p> -<p>With Struts 2, you'll need only a basic understanding of Servlets. Struts actually uses a so called -ServletFilter to "make things work". In general you are not required to write Servlets when +<p>With Struts 2, youâll need only a basic understanding of Servlets. Struts actually uses a so called +ServletFilter to "make things work". In general you are not required to write Servlets when using Struts 2. It still helps to know what Servlets, Filters and Containers are.</p> <p>Filters let you compose a set of components that will process a request or @@ -298,7 +300,7 @@ response. Filters are aggregated into a has a chance to process the request and response before and after it is processed by subsequent filters (and the servlet that is ultimately called).</p> -<h3><a name="session"></a>Sessions</h3> +<h3 id="a-namesessionasessions"><a name="session"></a>Sessions</h3> <p>One of the key characteristics of HTTP is that it is <em>stateless</em>. In other words, there is nothing built in to @@ -315,7 +317,7 @@ interface. The servlet container will us same user will include the <em>session id</em> for this session, so that state information saved in the session can be associated with multiple requests. This state information is stored in -<em>session attributes</em> (in JSP, they are known as "session scope beans").</p> +<em>session attributes</em> (in JSP, they are known as âsession scope beansâ).</p> <p>To avoid occupying resources indefinitely when a user fails to complete an interaction, sessions have a configurable <em>timeout interval</em>. @@ -329,7 +331,7 @@ bypass this.</p> <p>Struts 2 provides easy ways to create and access a session.</p> -<h3><a name="webapp"></a>Web Applications</h3> +<h3 id="a-namewebappaweb-applications"><a name="webapp"></a>Web Applications</h3> <p>Just as a HTTP server can be used to host several distinct websites, a servlet container can be used to host more than one web @@ -347,7 +349,7 @@ application and deploy it to your server build tools like <a href="http://maven.apache.org">Maven</a> and addition reading in the documentation of your server vendor.</p> -<h3><a name="security"></a>Security</h3> +<h3 id="a-namesecurityasecurity"><a name="security"></a>Security</h3> <p>One detail that can be configured in the Web application deployment descriptor is container-managed security. Declarative security can be used to protect requests for URIs that match given patterns. @@ -361,7 +363,7 @@ Other projects, like <a href="http://shi <a href="http://www.springframework.org/spring-security/">Spring Security</a> might also help you to secure your web application.</p> -<h3><a name="jsp"></a>JavaServer Pages, JSP Tag Libraries, and JavaServer Faces</h3> +<h3 id="a-namejspajavaserver-pages-jsp-tag-libraries-and-javaserver-faces"><a name="jsp"></a>JavaServer Pages, JSP Tag Libraries, and JavaServer Faces</h3> <p>If you write a classic web app, you might need a view component. One of the first of its kind was <a href="http://www.oracle.com/technetwork/java/javaee/jsp/index.html">JSP</a>.</p> @@ -388,14 +390,14 @@ as a front end layer and even completely presentation technologies available to Struts:</p> <ul> -<li><a href="http://www.freemarker.org/">Freemarker</a></li> -<li><a href="http://www.lowagie.com/iText/">iText (PDF)</a></li> -<li><a href="http://jaspersoft.com/">JasperReports</a></li> -<li><a href="http://velocity.apache.org/">Velocity</a></li> -<li><a href="http://www.w3.org/TR/xslt">XSLT</a></li> + <li><a href="http://www.freemarker.org/">Freemarker</a></li> + <li><a href="http://www.lowagie.com/iText/">iText (PDF)</a></li> + <li><a href="http://jaspersoft.com/">JasperReports</a></li> + <li><a href="http://velocity.apache.org/">Velocity</a></li> + <li><a href="http://www.w3.org/TR/xslt">XSLT</a></li> </ul> -<h3><a name="xml"></a>Extensible Markup Language (XML)</h3> +<h3 id="a-namexmlaextensible-markup-language-xml"><a name="xml"></a>Extensible Markup Language (XML)</h3> <p>The features provided by the framework rely on a number of objects that are sometimes deployed using a configuration file written in @@ -408,7 +410,7 @@ it is no longer crucial to write long XM application. If you would like to read more about it, please visit the page of the <a href="http://struts.apache.org/release/2.1.x/docs/convention-plugin.html">Convention plugin</a>.</p> -<h3><a name="mvc"></a>Model View Controller (MVC)</h3> +<h3 id="a-namemvcamodel-view-controller-mvc"><a name="mvc"></a>Model View Controller (MVC)</h3> <p>Web applications based on JavaServer Pages sometimes commingle database code, page design code, and control flow @@ -421,10 +423,10 @@ Model represents the business or databas represents the page design code, and the Controller represents the navigational code.</p> -<p>The term "MVC" originated with the SmallTalk +<p>The term âMVCâ originated with the SmallTalk Model-View-Controller framework. In Smalltalk MVC, the View updates itself from the Model, via -the "Observer" pattern. The original MVC pattern is like a +the âObserverâ pattern. The original MVC pattern is like a closed loop: The View talks to the Controller, which talks to the Model, which talks to the View.</p> @@ -438,7 +440,7 @@ by a central Controller. The Controller in our case, HTTP requests - to an appropriate handler. The handlers are tied to a Model, and each handler acts as an adapter between the request and the Model. The Model -represents, or encapsulates, an application's business logic or +represents, or encapsulates, an applicationâs business logic or state. Control is usually then forwarded back through the Controller to the appropriate View. The forwarding can be determined by consulting a set of mappings, usually loaded from a @@ -458,24 +460,24 @@ technologies to build the business, data <p>For more about MVC, see</p> <ul> -<li><a href="http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html">Smalltalk MVC framework</a>.</li> -<li><a href="http://en.wikipedia.org/wiki/Model_view_controller">Wikipedia - MVC</a></li> + <li><a href="http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html">Smalltalk MVC framework</a>.</li> + <li><a href="http://en.wikipedia.org/wiki/Model_view_controller">Wikipedia - MVC</a></li> </ul> -<h2><a name="logic_frameworks"></a>Business Logic Frameworks</h2> +<h2 id="a-namelogicframeworksabusiness-logic-frameworks"><a name="logic_frameworks"></a>Business Logic Frameworks</h2> <p>Most teams still roll their own business logic layer using plain old JavaBeans (POJOs). Though, business layer frameworks are beginning to emerge, and now include:</p> <ul> -<li><a href="http://springframework.org/">Spring</a></li> -<li><a href="http://code.google.com/p/google-guice/%E2%80%8E">Google Guice</a></li> -<li><a href="http://commons.apache.org/chain/">Commons Chain of Responsiblity</a></li> -<li>or you can rely on features of the bundled Struts XWork</li> + <li><a href="http://springframework.org/">Spring</a></li> + <li><a href="http://code.google.com/p/google-guice/â">Google Guice</a></li> + <li><a href="http://commons.apache.org/chain/">Commons Chain of Responsiblity</a></li> + <li>or you can rely on features of the bundled Struts XWork</li> </ul> -<h3><a name="data_frameworks"></a>Data Access Frameworks</h3> +<h3 id="a-namedataframeworksadata-access-frameworks"><a name="data_frameworks"></a>Data Access Frameworks</h3> <p>Most often, the business layer is seen to be distinct from the data access layer. Some teams roll their own data access objects (DAOs), @@ -483,10 +485,10 @@ but more and more teams are turning to o data access frameworks. Some popular data access frameworks include:</p> <ul> -<li><a href="http://cayenne.apache.org/">Apache Cayenne</a></li> -<li><a href="http://docs.oracle.com/javaee/5/tutorial/doc/bnblr.html">Enterprise Java Beans</a></li> -<li><a href="http://www.hibernate.org/">Hibernate</a></li> -<li><a href="http://code.google.com/p/mybatis">myBATIS</a></li> + <li><a href="http://cayenne.apache.org/">Apache Cayenne</a></li> + <li><a href="http://docs.oracle.com/javaee/5/tutorial/doc/bnblr.html">Enterprise Java Beans</a></li> + <li><a href="http://www.hibernate.org/">Hibernate</a></li> + <li><a href="http://code.google.com/p/mybatis">myBATIS</a></li> </ul> </section> @@ -528,5 +530,19 @@ data access frameworks. Some popular dat }(document, 'script', 'facebook-jssdk'));</script> +<script> +$(function() { + return $("h2, h3, h4, h5, h6").each(function(i, el) { + var $el, icon, id; + $el = $(el); + id = $el.attr('id'); + icon = '<i class="fa fa-link"></i>'; + if (id) { + return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon)); + } + }); +}); +</script> + </body> </html> Modified: websites/production/struts/content/releases.html ============================================================================== --- websites/production/struts/content/releases.html (original) +++ websites/production/struts/content/releases.html Wed Dec 31 10:10:27 2014 @@ -10,9 +10,11 @@ <title>Release Guidelines</title> <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css"> - <link rel="stylesheet" href="css/main.css"> + <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"> + <link href="css/main.css" rel="stylesheet"> + <link href="css/custom.css" rel="stylesheet"> - <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> + <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <script type="text/javascript" src="js/community.js"></script> </head> @@ -118,110 +120,110 @@ <article class="container"> <section class="col-md-12"> - <h1>Release Guidelines</h1> + <h1 id="release-guidelines">Release Guidelines</h1> <p>This document describes the Apache Struts release process and our <a href="#Coding">coding conventions</a>, which are applicable to all subprojects. Both stable and development releases are <a href="downloads.html">available for download.</a></p> -<h1>Release Process</h1> +<h1 id="release-process">Release Process</h1> <p>A <a href="http://commons.apache.org/releases/versioning.html">point release</a> should be made before and after -any product change that is not a "fully-compatible change" (see link). This includes moving a dependency from +any product change that is not a âfully-compatible changeâ (see link). This includes moving a dependency from an internal package to an external product, including products distributed through the Apache Commons. We should place any fully-compatible changes in the hands of the community before starting on a change that -is only "interface" or "external-interface" compatible.</p> +is only âinterfaceâ or âexternal-interfaceâ compatible.</p> <p>Additional remarks:</p> <ul> -<li>Every committer is encouraged to participate in the release process, either as the release manager or a + <li>Every committer is encouraged to participate in the release process, either as the release manager or a helper. Committers may also share the release manager role.</li> -<li>The release process can seem daunting when you review it for the first time. But, essentially, it breaks + <li>The release process can seem daunting when you review it for the first time. But, essentially, it breaks down into four phases of just a few steps each: - -<ul> -<li><strong>Rolling</strong> - Issues, dependencies, release notes, JAR manifest, licenses, copyrights, + <ul> + <li><strong>Rolling</strong> - Issues, dependencies, release notes, JAR manifest, licenses, copyrights, and build (using the release target).</li> -<li><strong>Testing</strong> - JUnit, Cactus, web apps (for all "supported" containers).</li> -<li><strong>Voting</strong> - Upload test build to internal directory, post majority vote on DEV list as to release + <li><strong>Testing</strong> - JUnit, Cactus, web apps (for all âsupportedâ containers).</li> + <li><strong>Voting</strong> - Upload test build to internal directory, post majority vote on DEV list as to release grade: Alpha, Beta, General Availability.</li> -<li><strong>Distributing</strong> - Checksum, sign, mirror, update download page, announce.</li> -</ul></li> -<li>Committers are <strong>required</strong> to post a release plan before tagging the repository and should wait + <li><strong>Distributing</strong> - Checksum, sign, mirror, update download page, announce.</li> + </ul> + </li> + <li>Committers are <strong>required</strong> to post a release plan before tagging the repository and should wait the traditional 72 hours before proceeding.</li> -<li>A checklist format can be used for the <a href="http://wiki.apache.org/struts/StrutsReleasePlans">release plan</a>, + <li>A checklist format can be used for the <a href="http://wiki.apache.org/struts/StrutsReleasePlans">release plan</a>, to help step through the process. The plan may be maintained in the repository or on the <a href="http://wiki.apache.org/struts/">Struts wiki</a>.</li> -<li>Our dependencies on external JARs (including Commons JARs) should be in line with our own release status. + <li>Our dependencies on external JARs (including Commons JARs) should be in line with our own release status. Our nightly build can be dependant on another nightly build. Our beta can be dependant on another beta (or -"release candidate"), but should avoid a dependance on a nightly build. Our General Availability release +ârelease candidateâ), but should avoid a dependance on a nightly build. Our General Availability release may only have dependencies on other GA, final, or stable releases.</li> -<li>Use your own discretion as to detail needed by the Release Notes. A high-level description of the changes + <li>Use your own discretion as to detail needed by the Release Notes. A high-level description of the changes is more important than providing uninterpreted detail. At a minimum, new features and deprecations should be summarized, since these are commonly asked questions. Ideally, the release notes should be maintained, continuously for the nightly build so that we they do not need to be assembled at the last minute.</li> -<li>Try building the distribution under prior version of J2SE, if possible, to ensure that we are still + <li>Try building the distribution under prior version of J2SE, if possible, to ensure that we are still backwardly-compatible. But, our distributions should be built using the <strong>latest production release of J2SE</strong>, to take advantage of all available compiler enhancements.</li> -<li>If you have multiple J2SE versions configured, run the JUnit and Cactus tests using the same configuration + <li>If you have multiple J2SE versions configured, run the JUnit and Cactus tests using the same configuration that will be used to build the distribution.</li> -<li>There is a "release" target in the buildfile that will zip and tar the distribution. Before uploading the -distribution, extract the sample web applications and deploy the WARs under each of the "supported" + <li>There is a âreleaseâ target in the buildfile that will zip and tar the distribution. Before uploading the +distribution, extract the sample web applications and deploy the WARs under each of the âsupportedâ containers (if you can). Play test each application under each container to be sure they operate nominally.</li> -<li>The test build can be posted to the internal distribution directory (svn.apache.org/struts/) and + <li>The test build can be posted to the internal distribution directory (svn.apache.org/struts/) and announced to the Struts DEV and PMC lists (only!). Do not announce a test build on any other Apache lists or link to it from an Apache website.</li> -<li>If the test build is voted to Alpha, Beta, or GA status, the release can announced to the User list and + <li>If the test build is voted to Alpha, Beta, or GA status, the release can announced to the User list and linked from the website.</li> -<li>Any formal release may be submitted for mirroring. All GA releases <strong>must</strong> be mirrored.</li> -<li>After announcing a release, remember to update the Downloads and Announcements pages. If the release is + <li>Any formal release may be submitted for mirroring. All GA releases <strong>must</strong> be mirrored.</li> + <li>After announcing a release, remember to update the Downloads and Announcements pages. If the release is to be mirrored, wait at least 24 hours after submittal before making public announcements (as stated in the <a href="http://apache.org/dev/mirrors.html">Apache Mirroring guidelines</a>.</li> -<li>If a serious flaw if found in a test build or release, it may be withdrawn by a majority vote of the PMC and + <li>If a serious flaw if found in a test build or release, it may be withdrawn by a majority vote of the PMC and removed from ASF distribution channels.</li> </ul> -<h1>Coding Conventions and Guidelines</h1> +<h1 id="coding-conventions-and-guidelines">Coding Conventions and Guidelines</h1> <p>Source code and documentation contributed to the Struts repositories should observe the: -- The <a href="http://www.oracle.com/technetwork/java/codeconvtoc-136057.html">"Code Conventions for the Java Programming Language"</a>, +- The <a href="http://www.oracle.com/technetwork/java/codeconvtoc-136057.html">âCode Conventions for the Java Programming Languageâ</a>, as published by Oracle.</p> -<h1>Clarifications</h1> - +<h1 id="clarifications">Clarifications</h1> <ul> -<li>First, "Observe the style of the original". Resist the temptation to make stylistic changes for their own + <li>First, âObserve the style of the originalâ. Resist the temptation to make stylistic changes for their own sake. But, if you must reformat code, commit style changes separately from code changes. Either change the style, commit, and then change the code, or vice-versa.</li> -<li>Set editors to replace tabs with spaces and do not trim trailing spaces. Tabs confound the version + <li>Set editors to replace tabs with spaces and do not trim trailing spaces. Tabs confound the version control alerts. Trimming trailing spaces creates unnecessary changes.</li> -<li>Specify imported classes (do not use <em>.*</em>).</li> -<li>Write all if/else statements as full blocks with each clause within braces, unless the entire statement fits + <li>Specify imported classes (do not use <em>.*</em>).</li> + <li>Write all if/else statements as full blocks with each clause within braces, unless the entire statement fits on the same line.</li> -<li>Use <code>FIXME:</code> and <code>TODO:</code> tokens to mark follow up notes in code. You may also + <li>Use <code>FIXME:</code> and <code>TODO:</code> tokens to mark follow up notes in code. You may also include your Apache username and the date.</li> -<li>Omit <code>@author</code> tags.</li> -<li><code>@since</code> to document changes between Struts versions, as in <code>@since Struts 2.1.</code></li> -<li>Wrap lines of code and JavaDoc at column 78. You can include a "comment rule" in the source to help with + <li>Omit <code>@author</code> tags.</li> + <li><code>@since</code> to document changes between Struts versions, as in <code>@since Struts 2.1.</code></li> + <li>Wrap lines of code and JavaDoc at column 78. You can include a âcomment ruleâ in the source to help with this.</li> -<li>Please do your best to provide high-quality Javadocs for all source code elements. Package overviews -(aka "Developer Guides") are also encouraged.</li> -<li>When working on a bugfix, please first write a test case that proves the bug exists, and then use the test + <li>Please do your best to provide high-quality Javadocs for all source code elements. Package overviews +(aka âDeveloper Guidesâ) are also encouraged.</li> + <li>When working on a bugfix, please first write a test case that proves the bug exists, and then use the test to prove the bug is fixed. =:0)</li> -<li>When working on an enhancement, please feel free to use test-driven design and write the test first <code><head-slap/></code></li> -<li>As files are updated from year to year, the copyright on each file should be extended to include the current + <li>When working on an enhancement, please feel free to use test-driven design and write the test first <code><head-slap/></code></li> + <li>As files are updated from year to year, the copyright on each file should be extended to include the current year. <em>You do not need to change the copyright year unless you change the file.</em> Every source file should include the ASF copyright notice and current Apache License and copyright.</li> -<li>Provide high-level API compatibility for any changes made within the same major release series (#.x.x). + <li>Provide high-level API compatibility for any changes made within the same major release series (#.x.x). Changes which adversely affect compatibility should be slotted for the next major release series (++#.x.x).</li> -<li>Our favorite books about programming are + <li>Our favorite books about programming are <a href="http://www.amazon.com/exec/obidos/ISBN=0201633612/apachesoftwar-20/">Design Patterns</a>, -<a href="http://www.amazon.com/exec/obidos/ISBN=0201485672/apachesoftwar-20/,%0Aand%20%5BCode%20Complete%5D(http://www.amazon.com/exec/obidos/ISBN=0735619670/apachesoftwar-20/">Refactoring</a></li> -<li>Our favorite book about open source development is the +[Refactoring](http://www.amazon.com/exec/obidos/ISBN=0201485672/apachesoftwar-20/, +and <a href="http://www.amazon.com/exec/obidos/ISBN=0735619670/apachesoftwar-20/">Code Complete</a></li> + <li>Our favorite book about open source development is the <a href="http://www.amazon.com/exec/obidos/ISBN=1565927249/apachesoftwar-20/">The Cathedral and the Bazaar</a></li> -<li>Our favorite science fiction author is + <li>Our favorite science fiction author is <a href="http://www.nitrosyncretic.com/rah/">Robert Heinlein</a>, <a href="http://jargon.net/jargonfile/t/TANSTAAFL.html">TANSTAAFL</a>, (Except on Friday, when we favor <a href="http://news.bbc.co.uk/1/hi/uk/1326657.stm">Douglas Adams</a>).</li> @@ -268,5 +270,19 @@ Changes which adversely affect compatibi }(document, 'script', 'facebook-jssdk'));</script> +<script> +$(function() { + return $("h2, h3, h4, h5, h6").each(function(i, el) { + var $el, icon, id; + $el = $(el); + id = $el.attr('id'); + icon = '<i class="fa fa-link"></i>'; + if (id) { + return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon)); + } + }); +}); +</script> + </body> </html>