<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/>
  <title>Apache Gearpump (Incubating): Community</title>
  

  

  

  <link rel="stylesheet" href="./css/bootstrap-3.3.5.min.css">
  <style>
    body {
      padding-top: 60px;
      padding-bottom: 40px;
    }
  </style>
  <link rel="stylesheet" href="./css/main.css">
  <link rel="stylesheet" href="css/pygments-default.css">
  <script src="./js/vendor/modernizr-2.6.1-respond-1.1.0.min.js"></script>
</head>
<body>
  <!--[if lt IE 7]>
    <p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>l
  <![endif]-->

  <div class="navbar navbar-inverse navbar-fixed-top" id="topbar">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="/">Apache Gearpump (incubating)</a>
      </div>
      <div id="navbar" class="collapse navbar-collapse">
        <ul class="nav navbar-nav">
          <li><a href="overview.html">Overview</a></li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Docs<b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li><a href="releases/latest/index.html">Latest Release (0.8.3)</a></li>
              <li><a href="usecases.html">Use Cases</a></li>
              <li class="divider"></li>
              <li><a href="publications.html">Publications</a></li>
            </ul>
          </li>
          <li><a href="downloads.html">Downloads</a></li>
          <li><a href="faq.html">FAQ</a></li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Community<b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li class="dropdown-header">Community</li>
              <li><a href="community.html#mailing-lists">Mailing Lists</a></li>
              <li><a href="community.html#issue-tracker">Issue Tracker</a></li>
              <li><a href="community.html#source-code-repositories">Source Code Repositories</a></li>
              <li><a href="community.html#who-we-are">Who We Are</a></li>
              <li><a href="https://twitter.com/ApacheGearpump" target="_blank">Follow us on Twitter</a></li>
              <li class="divider"></li>
              <li class="dropdown-header">Contribute</li>
              <li><a href="how-to-contribute.html">How to Contribute</a></li>
              <li><a href="coding-style.html">Coding Style</a></li>
            </ul>
          </li>
        </ul>

        <ul class="nav navbar-nav">
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF<b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li><a href="license.html">License</a></li>
              <li><a href="//apache.org/foundation/how-it-works.html" target="_blank">How Apache Works</a></li>
              <li><a href="//apache.org/foundation" target="_blank">Foundation</a></li>
              <li><a href="//www.apache.org/foundation/sponsorship.html" target="_blank">Sponsoring Apache</a></li>
            </ul>
          </li>
        </ul>

<a class="ribbon hidden-xs" href="//github.com/apache/incubator-gearpump"><img src="img/forkme_right_red_aa0000.png" alt="Fork me on GitHub"/></a>

      </div>
    </div>
  </div>

  <div class="container" id="content" style="margin-bottom: 50px">
   
    <h1 class="title">Community</h1>
   

   <p>There are many ways to get help from the Apache Gearpump community. The mailing lists are the primary place where all Gearpump committers are present. These are the mailing lists that have been established for this project. For each list, there is a subscribe, unsubscribe and an archives link. Report bugs and submit feature requests can either be discussed on dev mailing list or on JIRA. Those interested in contributing to Gearpump should check out the <a href="how-to-contribute.html">contribution guide</a> section.</p>

<h2 id="mailing-lists">Mailing Lists</h2>

<table class="table table-striped">
  <thead>
    <tr>
      <th>Name</th>
      <th>Subscribe</th>
      <th>Unsubscribe</th>
      <th>Post</th>
      <th>Archives</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>User support and questions mailing list<br /><strong>user</strong>@gearpump.incubator.apache.org</td>
      <td><a href="mailto:user-subscribe@gearpump.incubator.apache.org?subject=Subscribe">Subscribe</a></td>
      <td><a href="mailto:user-unsubscribe@gearpump.incubator.apache.org?subject=Unsubscribe">Unsubscribe</a></td>
      <td><a href="mailto:user@gearpump.incubator.apache.org">Compose</a></td>
      <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-gearpump-user/">View Online</a></td>
    </tr>
    <tr>
      <td>Development related discussions<br /><strong>dev</strong>@gearpump.incubator.apache.org</td>
      <td><a href="mailto:dev-subscribe@gearpump.incubator.apache.org?subject=Subscribe">Subscribe</a></td>
      <td><a href="mailto:dev-unsubscribe@gearpump.incubator.apache.org?subject=Unsubscribe">Unsubscribe</a></td>
      <td><a href="mailto:dev@gearpump.incubator.apache.org">Compose</a></td>
      <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-gearpump-dev/">View Online</a></td>
    </tr>
    <tr>
      <td>All commits to the repository<br /><strong>commits</strong>@gearpump.incubator.apache.org</td>
      <td><a href="mailto:commits-subscribe@gearpump.incubator.apache.org?subject=Subscribe">Subscribe</a></td>
      <td><a href="mailto:commits-unsubscribe@gearpump.incubator.apache.org?subject=Unsubscribe">Unsubscribe</a></td>
      <td>N/A</td>
      <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-gearpump-commits/">View Online</a></td>
    </tr>
  </tbody>
</table>

<h2 id="issue-tracker">Issue Tracker</h2>

<p>We use <a href="https://issues.apache.org/jira/browse/GEARPUMP">JIRA</a> to track all code related issues. All issue activity is also mirrored to the issues mailing list.</p>

<h2 id="source-code-repositories">Source Code Repositories</h2>

<p>Main source repositories:</p>

<ul>
  <li><strong>ASF writable</strong>: https://git-wip-us.apache.org/repos/asf/incubator-gearpump.git</li>
  <li><strong>ASF read-only</strong>: git://git.apache.org/repos/asf/incubator-gearpump.git</li>
  <li><strong>GitHub mirror</strong>: https://github.com/apache/incubator-gearpump.git</li>
</ul>

<p>Website repositories:</p>

<ul>
  <li><strong>ASF writable</strong>: https://git-wip-us.apache.org/repos/asf/incubator-gearpump-site.git</li>
  <li><strong>ASF read-only</strong>: git://git.apache.org/repos/asf/incubator-gearpump-site.git</li>
  <li><strong>GitHub mirror</strong>: https://github.com/apache/incubator-gearpump-site.git</li>
</ul>

<h2 id="who-we-are">Who We Are</h2>

<p>A successful project requires many people to play many roles. Some members write code or documentation, while others are valuable as testers, submitting patches and suggestions.</p>

<p>The team is comprised of Members and Contributors. Members have direct access to the source of a project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. Get involved today. All contributions to the project are greatly appreciated.</p>

<h3 id="gearpump-committers">Gearpump Committers</h3>

<p>The following people with commit privileges that have directly contributed to the project in one way or another.</p>

<table class="table table-striped">
  <thead>
    <tr>
      <th>Name</th>
      <th>Roles</th>
      <th>Apache ID</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Xiang Zhong</td>
      <td>Committer</td>
      <td>seanzhong</td>
    </tr>
    <tr>
      <td>Tianlun Zhang</td>
      <td>Committer</td>
      <td>mauzhang</td>
    </tr>
    <tr>
      <td>Qian Xu</td>
      <td>Committer</td>
      <td>qxu</td>
    </tr>
    <tr>
      <td>Huafeng Wang</td>
      <td>Committer</td>
      <td>huafengw</td>
    </tr>
    <tr>
      <td>Kam Kasravi</td>
      <td>Committer</td>
      <td>kamkasravi</td>
    </tr>
    <tr>
      <td>Weihua Jiang</td>
      <td>Committer</td>
      <td>whjiang</td>
    </tr>
    <tr>
      <td>Tomasz Targonski</td>
      <td>Committer</td>
      <td>tomasztargonski</td>
    </tr>
    <tr>
      <td>Karol Brejna</td>
      <td>Committer</td>
      <td>karolbrejna</td>
    </tr>
    <tr>
      <td>Gang Wang</td>
      <td>Committer</td>
      <td>garyw</td>
    </tr>
    <tr>
      <td>Mark Chmarny</td>
      <td>Committer</td>
      <td>mchmarny</td>
    </tr>
    <tr>
      <td>Xinglang Wang</td>
      <td>Committer</td>
      <td>xinglang</td>
    </tr>
    <tr>
      <td>Lan Wang</td>
      <td>Committer</td>
      <td>lanwang</td>
    </tr>
    <tr>
      <td>Jianzhong Chen</td>
      <td>Committer</td>
      <td>centiteo</td>
    </tr>
    <tr>
      <td>Xuefu Zhang</td>
      <td>Committer</td>
      <td>xuefu</td>
    </tr>
    <tr>
      <td>Rui Li</td>
      <td>Committer</td>
      <td>lirui</td>
    </tr>
  </tbody>
</table>

<p>You can reach individual directly at <code>&lt;apache-id&gt;@apache.org</code>.</p>

<h3 id="mentors">Mentors</h3>

<p>The following people are very kind to mentor the incubating project.</p>

<table class="table table-striped">
  <thead>
    <tr>
      <th>Name</th>
      <th>Roles</th>
      <th>Apache ID</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Andrew Purtell</td>
      <td>PPMC, Mentor</td>
      <td>apurtell</td>
    </tr>
    <tr>
      <td>Jarek Jarcec Cecho</td>
      <td>PPMC, Mentor</td>
      <td>jarcec</td>
    </tr>
    <tr>
      <td>Todd Lipcon</td>
      <td>PPMC, Mentor</td>
      <td>todd</td>
    </tr>
    <tr>
      <td>Xuefu Zhang</td>
      <td>Apache Member, Mentor</td>
      <td>xuefu</td>
    </tr>
    <tr>
      <td>Reynold Xin</td>
      <td>PPMC, Mentor</td>
      <td>rxin</td>
    </tr>
  </tbody>
</table>

<p>You can reach individual directly at <code>&lt;apache-id&gt;@apache.org</code>.</p>

  </div> <!-- /container -->

  <footer class="navbar navbar-default navbar-fixed-bottom">
    <div class="container text-center" style="padding: 14px 0 10px 0; line-height: 150%">
      <p class="text-muted">
        Copyright © 2017 <a href="//apache.org" target="_blank">The Apache Software Foundation</a>.
        All Rights Reserved.<br/>
        Apache and the Apache feather logo are trademarks of The Apache Software Foundation.
      </p>
    </div>
  </footer>

  <script src="js/vendor/jquery-2.1.4.min.js"></script>
  <script src="js/vendor/bootstrap-3.3.5.min.js"></script>
  <script src="js/vendor/anchor-1.1.1.min.js"></script>
  <script src="js/main.js"></script>

  <!-- MathJax Section -->
  <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      TeX: { equationNumbers: { autoNumber: "AMS" } }
    });
  </script>
  <script>
    // Note that we load MathJax this way to work with local file (file://), HTTP and HTTPS.
    // We could use "//cdn.mathjax...", but that won't support "file://".
    (function(d, script) {
      script = d.createElement('script');
      script.type = 'text/javascript';
      script.async = true;
      script.onload = function(){
        MathJax.Hub.Config({
          tex2jax: {
            inlineMath: [ ["$", "$"], ["\\\\(","\\\\)"] ],
            displayMath: [ ["$$","$$"], ["\\[", "\\]"] ],
            processEscapes: true,
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre']
          }
        });
      };
      script.src = ('https:' == document.location.protocol ? 'https://' : 'http://') +
        'cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
      d.getElementsByTagName('head')[0].appendChild(script);
    }(document));
  </script>
</body>
</html>

