<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you 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. 
-->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Community</title>
    <meta name="description" content="Apache Wink -- Community">
    <meta name="author" content="dev@wink.apache.org">

    <META http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <META name="Keywords" content="Apache Wink JSR-237 REST JavaEE6 JAX-RS" />
    <META name="Owner" content="dev@wink.apache.org" />
    <META name="Robots" content="index, follow" />
    <META name="Security" content="Public" />
    <META name="DC.Rights" content="Copyright &copy; 2009-2013, The Apache Software Foundation" />

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link href="assets/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
    <style type="text/css">
      body {
        padding-top: 60px;
        padding-bottom: 40px;
      }
    </style>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="images/wink.png">
    <link rel="shortcut icon" href="images/favicon.ico">
    <link rel="apple-touch-icon" href="images/apple-touch-icon-iphone.png" />
    <link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-ipad.png" />
    <link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-iphone-retina.png" />
    <link rel="apple-touch-icon" sizes="144x144" href="images/apple-touch-icon-ipad-retina.png" />
  </head>

  <body>
    <div class="navbar navbar-inverse navbar-fixed-top">
      <div class="navbar-inner fill">
          <div class="container">
            <!--<a class="brand" href="index.html"><img src="images/favicon.ico" width="15%" height="15%"/></a>-->

            <ul class="nav">
              <li class="active"><a href="index.html">Home</a></li>
              <li class="active"><a href="news.html">News</a></li>
              <li class="active"><a href="downloads.html">Downloads</a></li>
              <li class="active"><a href="documentation.html">Documentation</a></li>
              <li class="active"><a href="community.html">Community</a></li>
              <li class="active"><a href="source.html">Source</a></li>
              <li class="active"><a href="faq.html">FAQ</a></li>
              <li class="active"><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
              <li class="active"><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
              <li class="active"><a href="privacy.html">Privacy</a></li>
            </ul>


            <!-- Google CSE Search Box Begins  -->
              <FORM class="navbar-form pull-right" id="searchbox_007756850371322559056:un2ixevjhis" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="007756850371322559056:un2ixevjhis">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT name="q" type="text" placeholder="Search">
              </FORM>
              <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_007756850371322559056:un2ixevjhis"></SCRIPT>-->
              <!-- Google CSE Search Box Ends -->
        </div><!--/container -->
      </div><!--/navbar-inner -->
    </div><!--/navbar -->
    

    
    <div class="container" id="content">
      <h1>Apache Wink Community<a name="Apache_Community"></a></h1>

<hr>

<div class="row">
    <div class="span10">
        <p>Every volunteer project obtains its strength from the people involved in it. We invite you to participate as much or as little as you choose.</p>
        <p>You can:</p>
        <ul>
            <li>Use our project and provide a feedback.</li>
            <li>Provide us with the use-cases.</li>
            <li>Report bugs and submit patches.</li>
            <li>Contribute code, javadocs, documentation.</li>
        </ul>
        <p>Visit the <a href="http://cwiki.apache.org/confluence/display/WINK/Project+Guidelines">Project Guidelines</a> for more information.</p>
    </div>
</div>

<hr>

<h3>Communication<a name="Communication"></a></h3>

<div class="row">
    <div class="span10">

        <h4>Mailing Lists<a name="mailing_list"></a></h4>

        <p>The Apache Wink project uses mailing lists primarily to communicate with its members.</p>
        <p>These are the mailing lists that have been established for this project. For each list, there is a subscribe, unsubscribe, and an archive link.</p>

        <table class="table table-hover">
            <tr class="a">
                <th>Name</th>
                <th>Subscribe</th>
                <th>Unsubscribe</th>
                <th>Post</th>
                <th>Archive</th>
                <th>Other Archives</th>
            </tr>
            <tr>
                <td>Users</td>
                <td><a href="mailto:wink-user-subscribe@incubator.apache.org">Subscribe</a></td>
                <td><a href="mailto:wink-user-unsubscribe@incubator.apache.org">Unsubscribe</a></td>
                <td><a href="mailto:wink-user@incubator.apache.org">Post</a></td>
                <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-wink-user/">mail-archives.apache.org</a></td>
                <td><a href="http://n2.nabble.com/Apache-Wink-Users-f3471013.html">n2.nabble.com</a></td>
            </tr>
            <tr>
                <td>Development</td>
                <td><a href="mailto:wink-dev-subscribe@incubator.apache.org">Subscribe</a></td>
                <td><a href="mailto:wink-dev-unsubscribe@incubator.apache.org">Unsubscribe</a></td>
                <td><a href="mailto:wink-dev@incubator.apache.org">Post</a></td>
                <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-wink-dev/">mail-archives.apache.org</a></td>
                <td><a href="http://n2.nabble.com/Apache-Wink-Dev-f3470905.html">n2.nabble.com</a></td>
            </tr>
            <tr>
                <td>Commits</td>
                <td><a href="mailto:wink-commits-subscribe@incubator.apache.org">Subscribe</a></td>
                <td><a href="mailto:wink-commits-unsubscribe@incubator.apache.org">Unsubscribe</a></td>
                <td><a href="mailto:wink-commits@incubator.apache.org">Post</a></td>
                <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-wink-commits/">mail-archives.apache.org</a></td>
                <td>-</td>
            </tr>
        </table>

        <h4>IRC<a name="IRC"></a></h4>

        <p>IRC is also used for a real-time discussions. </p>
        <p>Log into #apache-wink on Freenode or use a <a class="externalLink" href="http://webchat.freenode.net/?channels=apache-wink">Web Client</a></p>
    </div>

</div>

<hr>

<h3>Issue Tracker<a name="Issue_Tracker"></a></h3>

<div class="row">
    <div class="span10">
        <h4>Bug Reports<a name="Bug_Reports"></a></h4>
        <p>Found bug? Enter an issue in the <a href="./issue-tracking.html">Issue Tracker</a>.</p>
        <p>Before submitting an issue, please:</p>
        <ul>
            <li>Verify that the bug does in fact exist.</li>
            <li>Search the issue tracker to verify there is no existing issue reporting the bug you've found.</li>
            <li>Consider tracking down the bug yourself in the Wink's source and submitting a patch along with your bug report. This is a great time saver for the Wink developers and helps ensure the bug will be fixed quickly. </li>
        </ul>

        <br/>

        <h4>Feature Request<a name="Feature_Request"></a></h4>
        <p>Enhancement requests for new features are also welcome. The more concrete and rationale the request is, the greater the chance it will incorporated into future releases.</p>
    </div>

</div>

<h3>Source Code<a name="Source_Code"></a></h3>

<div class="row">
    <div class="span10">
        <p>The project sources are accessible via the <a href="./source-repository.html">SVN</a>.</p>
    </div>
</div>
    </div> <!-- /container/content -->
    


    <hr>

    <div class="container">
      <footer>
        <div class="xright">
        Copyright &copy; 2009-2013 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.Licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.</br>
        Apache and the Apache feather logo are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.</br>
        </p>
    </footer>
  </div> <!-- /container/footer -->


  <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="assets/jquery/jquery-1.9.1.min.js"></script>
    <script src="assets/bootstrap/js/bootstrap.min.js"></script>

    <script type="text/javascript">
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-1174707-10']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
    
  </body>
</html>
