<!DOCTYPE html>

<html lang="en-US" prefix="og: http://ogp.me/ns#" ng-app="hortonWorksApp"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>
        
        <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
        <link rel="profile" href="http://gmpg.org/xfn/11">
        <title>Apache Metron Community</title>

        <style type="text/css">
            img.wp-smiley,
            img.emoji {
                display: inline !important;
                border: none !important;
                box-shadow: none !important;
                height: 1em !important;
                width: 1em !important;
                margin: 0 .07em !important;
                vertical-align: -0.1em !important;
                background: none !important;
                padding: 0 !important;
            }
        </style>

    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-78972211-1', 'auto');
        ga('send', 'pageview');

    </script>

    <link rel="stylesheet" id="default-css" href="/css/default.css" type="text/css" media="all">
    <link rel="stylesheet" id="legacy-css" href="/css/legacy.css" type="text/css" media="all">
    <link rel="stylesheet" id="gravityforms-css" href="/css/gravityforms.css" type="text/css" media="all">
    <link rel="stylesheet" id="selectboxit-css" href="/css/selectBoxIt.css" type="text/css" media="all">
    <link href='http://fonts.googleapis.com/css?family=Roboto%20Condensed' rel='stylesheet' type='text/css'>

    <script type="text/javascript" src="/js/jquery.js"></script>
    <script type="text/javascript" src="/js/jquery-migrate.min.js"></script>
    <script type="text/javascript" src="/js/jquery.mobile.custom.min.js"></script>
    <script type="text/javascript" src="/js/isotope.pkgd.min.js"></script>
    <script type="text/javascript" src="/js/navigation.js"></script>
    <script type="text/javascript" src="/js/slider.js"></script>
    <script type="text/javascript" src="/js/jquery.classyloader.js"></script>
    <script type="text/javascript" src="/js/hero-slider.js"></script>
    <script type="text/javascript" src="/js/footer.js"></script>
    <script type="text/javascript" src="/js/top-form.js"></script>
    <script type="text/javascript" src="/js/local6.js"></script>
    <script type="text/javascript" src="/js/select-list.js"></script>
    <script type="text/javascript" src="/js/legacy.js"></script>
    <script type="text/javascript" src="/js/paralax-scroll.js"></script>
    <script type="text/javascript" src="/js/jquery-ui.min.js"></script>
    <script type="text/javascript" src="/js/jquery.selectBoxIt.min.js"></script>
    <script type="text/javascript" src="/js/scroll-slider.js"></script>
    <script type="text/javascript" src="/js/charts-animate.js"></script>
    <script type="text/javascript" src="/js/dotdotdot.js"></script>
    <script type="text/javascript" src="/js/products_scroll.js"></script>
    <script type="text/javascript" src="/js/parallax.min.js"></script>
    <script type="text/javascript" src="/js/parallax.js"></script>
    <script type="text/javascript" src="/js/shb0wjr.js"></script>

    <script>
    window.lsfDataLayer = window.lsfDataLayer || [];
    </script>
    
    <style>
      body {
        font-family: "roboto-condensed", sans-serif;
      }
    </style>

    <!-- Angular js files -->
    <script src="/js/angular.min.js"></script>
    <script src="/js/angular-animate.min.js"></script>
    <script src="/js/app.js"></script>
    <script src="/js/pressReleaseController.js"></script>
    <script src="/js/eventCtrl.js"></script>
    <!-- End Angular js files -->
    <link rel="stylesheet" type="text/css" href="/css/prettify.css">
    <script type="text/javascript" async="" src="/js/munchkin-beta.js"></script>
    <link type="text/css" href="/css/jquery-ui-insightera-custom-1.8.css" rel="stylesheet">
    <style id="style-1-cropbar-clipper">
    /* Copyright 2014 Evernote Corporation. All rights reserved. */
    
    .en-markup-crop-options {
        top: 18px !important;
        left: 50% !important;
        margin-left: -100px !important;
        width: 200px !important;
        border: 2px rgba(255, 255, 255, .38) solid !important;
        border-radius: 4px !important;
    }
    
    .en-markup-crop-options div div:first-of-type {
        margin-left: 0px !important;
    }
    </style>
</head>


<body class="wrap">
  <header>
    <div class="main-navigation" style="height: 85px;">
        <div class="main-nav fixed">
            <div class="wrapper">
                <div class="logo">
                    <a href=""><img src="/img/logo.png" alt="Logo"></a>
                </div>
                <nav>
                    <div class="toggle">
                        <span></span>
                        <span></span>
                        <span></span>
                    </div>
                    <div class="menu-wrapper" style="height: auto; display: block;">
                        <ul class="main-menu">
    <li class="products-menu"><a href="/">Home</a>
    </li>
    <li class="solutions-menu"><a href="/about/">About</a>
    </li>
    <li class="services-menu"><a href="/documentation/">Documentation</a>
    </li>
    <li class="services-menu"><a href="/community/">Community</a>
    </li>
    <li class="training-menu"><a href="/news/">News</a>
    </li>
    <li>
        <button class="button-default button-green" style="line-height:43px;"> <a>Download </a></button>
    </li>
</ul>

                    </div>
                </nav>
            </div>
        </div>
    </div>
</header>


  <section class="hero-second-level no-padding">
    <div class="bg-img">
        <img src="/img/metron_datacenter.jpg" alt="UNLOCK THE POWER OF YOUR DATA" style="width: 100%; left: 0px;" />
    </div>
    <div class="v-middle-wrapper">
        <div class="v-middle-inner">
            <div class="v-middle">
              <h1>real-time big data security </h1>
            </div>
        </div>
    </div>
</section>

<section class="no-padding">
      <div class="fixed-anchor" style="min-height: 99px;">
        <div class="fixed-links" style="top: 63px; transition: top 0.5s ease;">
            <ul>
                <li class="active"><a href="#projectmembers">Project Members</a></li>
                <li class=""><a href="#communityresources">Community Resources</a></li>
                <li class=""><a href="#getinvolved">Get Involved</a></li>
                <li class=""><a href="#mailinglist">Mailing List</a></li>
            </ul>  
        </div>
    </div>  
</section>

<section class="events-section feature body-content" id="projectmembers">
<div class="text-center">
        <h2>Project Members</h2>
</div>
<table class="padding30 img70 nomargin">
    <thead>
    <tr>
      <th style="text-align: left">Name</th> <th style="text-align: left">Apache Id</th> <th style="text-align: left">Role</th> </tr>
    </thead>
    <tbody>
    <tr>
      <td style="text-align: left">James Sirota</td> <td style="text-align: left">jsirota</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Owen O’Malley</td> <td style="text-align: left">omalley</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Sheetal Dolas</td> <td style="text-align: left">sheetal_dolas</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Casey Stella</td> <td style="text-align: left">cestella</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Vinod Kumar Vavilapalli</td> <td style="text-align: left">vinodkv</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">George Vetticaden</td> <td style="text-align: left">gvetticaden</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
       <td style="text-align: left">Ryan Merriman</td> <td style="text-align: left">rmerriman</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">P. Taylor Goetz</td> <td style="text-align: left">ptgoetz</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Jim Baker</td> <td style="text-align: left">jimbaker</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Mark Bittmann</td> <td style="text-align: left">mbittmann</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Brad Kolarov</td> <td style="text-align: left">bjkolly</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Dave Hirko</td> <td style="text-align: left">dbhirko</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Larry McCay</td> <td style="text-align: left">lmccay</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Charles Porter</td> <td style="text-align: left">cporter</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">David Lyle</td> <td style="text-align: left">lyle</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Nick Allen</td> <td style="text-align: left">nickallen</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Michael Miklavcic</td> <td style="text-align: left">mmiklavcic</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Justin Leet</td> <td style="text-align: left">leet</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Otto Fowler</td> <td style="text-align: left">otto</td> <td style="text-align: left">PMC</td> </tr>
    <tr>
      <td style="text-align: left">Kyle Richardson</td> <td style="text-align: left">kylerichardson</td> <td style="text-align: left">Committer</td> </tr>
    <tr>
      <td style="text-align: left">Matt Foley</td> <td style="text-align: left">mattf</td> <td style="text-align: left">Committer</td> </tr>
    <tr>
      <td style="text-align: left">Jon Zeolla</td> <td style="text-align: left">jonzeolla</td> <td style="text-align: left">Committer</td> </tr>
    <tr>
      <td style="text-align: left">JJ Meyer</td> <td style="text-align: left">jmeyer</td> <td style="text-align: left">Committer</td> </tr>
    <tr>
      <td style="text-align: left">Raghu Mitra</td> <td style="text-align: left">iraghumitra</td> <td style="text-align: left">Committer</td> </tr>
    <tr>
      <td style="text-align: left">Anand Subramanian</td> <td style="text-align: left">anandsubbu</td> <td style="text-align: left">Committer</td> </tr>
    </tbody>
</table>
</section>

<section class="intro-block darken" id="communityresources">
        <div class="text-center">
          <h2>Community Resources</h2>
        </div>
        <div class="content-960 hover-btn text-center">
            <p>Apache Metron provides user and development mailing lists, a Github repository, a JIRA site, and list of community members to enable you to learn more about Metron. Feel free to join any of the mailing lists and the Metron IRC channel, and view the code on Github.</p>
            <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Community+Resources#CommunityResources-ApacheMetronCommunityResources" target="_blank">LEARN MORE</a>
        </div>
</section>

<section class="intro-block" id="getinvolved">
        <div class="text-center">
          <h2>Get Involved</h2>
        </div>
        <div class="content-960 hover-btn text-center">
            <p> Do you want to contribute to Apache Metron? Follow these simple steps to subscribe to the user and development mailing lists, familiarize yourself with the Metron code, set up your development environment, and start contributing.</p>
            <a class="button-default" href="https://cwiki.apache.org/confluence/display/METRON/Community+Resources#CommunityResources-JointheCommunity-GetingStarted" target="_blank">Take Me There</a>
        </div>
</section>

<section class="intro-block darken mailing-list" id="mailinglist">
        <div class="text-center">
          <h2>Mailing List</h2>
        </div>
        <div class="content-960 hover-btn text-center">
            <h4> General &amp; Public Discussion </h4>
                [<a href="mailto:user-subscribe@metron.apache.org">Subscribe</a>]
                [<a href="mailto:user-unsubscribe@metron.apache.org">Unsubscribe</a>]
                [<a href="https://lists.apache.org/list.html?user@metron.apache.org">Archives</a>]
            <h4> Code &amp; Documentation Change </h4>
                [<a href="mailto:dev-subscribe@metron.apache.org">Subscribe</a>]
                [<a href="mailto:dev-unsubscribe@metron.apache.org">Unsubscribe</a>]
                [<a href="https://lists.apache.org/list.html?dev@metron.apache.org">Archives</a>]
            <h4> Issues &amp; Github updates </h4>
                [<a href="mailto:issues-subscribe@metron.apache.org">Subscribe</a>]
                [<a href="mailto:issues-unsubscribe@metron.apache.org">Unsubscribe</a>]
                [<a href="https://lists.apache.org/list.html?issues@metron.apache.org">Archives</a>]
        </div>
</section>



  </section>
<section class="intro-block darken" id="docshome">
    <div class="content-960 hover-btn text-center disclaimer">
        <p>Copyright © 2018, The Apache Software Foundation. Licensed under the <a class="white" href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
        <p>Apache Metron and its logo are trademarks of The Apache Software Foundation.</p>
    </div>
</section>

  <script>
  var anchorForId = function (id) {
    var anchor = document.createElement("a");
    anchor.className = "header-link";
    anchor.href      = "#" + id;
    anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
    anchor.title = "Permalink";
    return anchor;
  };

  var linkifyAnchors = function (level, containingElement) {
    var headers = containingElement.getElementsByTagName("h" + level);
    for (var h = 0; h < headers.length; h++) {
      var header = headers[h];

      if (typeof header.id !== "undefined" && header.id !== "") {
        header.appendChild(anchorForId(header.id));
      }
    }
  };

  document.onreadystatechange = function () {
    if (this.readyState === "complete") {
      var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
      if (!contentBlock) {
        return;
      }
      for (var level = 1; level <= 6; level++) {
        linkifyAnchors(level, contentBlock);
      }
    }
  };
</script>


</body>
</html>
