<!DOCTYPE html>
<html lang="en-US">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="/assets/css/custom.css">
    <link rel="stylesheet" href="/assets/css/main.css">
    <link rel="stylesheet" href="/assets/css/font-awesome.min.css">

    <link rel="shortcut icon" href="/favicon.ico?1">
    <!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Team | Nemo</title>
<meta name="generator" content="Jekyll v3.9.3" />
<meta property="og:title" content="Team" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Contributing to Nemo Your contributation is always welcome :) If you would like to contribute to Nemo, please subscribe to our mailing list: dev@nemo.apache.org [subscribe]. We have a Slack channel for active discussions. Join us on Slack by requesting for an invitation by sending an e-mail to dev@ after subscription." />
<meta property="og:description" content="Contributing to Nemo Your contributation is always welcome :) If you would like to contribute to Nemo, please subscribe to our mailing list: dev@nemo.apache.org [subscribe]. We have a Slack channel for active discussions. Join us on Slack by requesting for an invitation by sending an e-mail to dev@ after subscription." />
<link rel="canonical" href="http://nemo.apache.org//pages/team/" />
<meta property="og:url" content="http://nemo.apache.org//pages/team/" />
<meta property="og:site_name" content="Nemo" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2023-05-11T14:14:28+09:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Team" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebPage","dateModified":"2023-05-11T14:14:28+09:00","datePublished":"2023-05-11T14:14:28+09:00","description":"Contributing to Nemo Your contributation is always welcome :) If you would like to contribute to Nemo, please subscribe to our mailing list: dev@nemo.apache.org [subscribe]. We have a Slack channel for active discussions. Join us on Slack by requesting for an invitation by sending an e-mail to dev@ after subscription.","headline":"Team","url":"http://nemo.apache.org//pages/team/"}</script>
<!-- End Jekyll SEO tag -->


    <link rel="canonical" href="http://nemo.apache.org//pages/team/">
    <link rel="alternate" type="application/rss+xml" title="Nemo" href="http://nemo.apache.org//feed.xml" />
</head>


<body>

    <nav class="navbar navbar-default navbar-fixed-top">
    <div class="container navbar-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="/">
                <span><img src="/assets/img/nemo-logo.png" alt="Logo"></span>
            </a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li ><a href="/docs/home/">Docs</a></li>
                <li ><a href="/apidocs">APIs</a></li>
                <li ><a href="/pages/downloads">Downloads</a></li>
                <li ><a href="/pages/talks">Talks</a></li>
                <li  class="active" ><a href="/pages/team">Team</a></li>
                <li ><a href="/pages/license">License</a></li>
                <li ><a href="/blog/2022/09/10/release-note-0.4/">Blog</a></li>
                <li class="dropdown">
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">ASF<span class="caret"></span></a>
                  <ul class="dropdown-menu">
                    <li><a href="http://www.apache.org/">Apache Software Foundation</a></li>
                    <li><a href="https://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li>
                    <li><a href="https://www.apache.org/licenses/">License</a></li>
                    <li><a href="https://www.apache.org/security/">Security</a></li>
                    <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a></li>
                    <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsoring Apache</a></li>
                    <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
                  </ul>
                </li>
            </ul>
            <div class="navbar-right">
                <form class="navbar-form navbar-left">
                    <div class="form-group has-feedback">
                        <input id="search-box" type="search" class="form-control" placeholder="Search...">
                        <i class="fa fa-search form-control-feedback"></i>
                    </div>
                </form>
                <ul class="nav navbar-nav">
                    <li><a href="https://github.com/apache/incubator-nemo"><i class="fa fa-github" aria-hidden="true"></i></a></li>
                </ul>
            </div>
        </div>
    </div>
</nav>


    <div class="page-content">
        <div class="wrapper">
            <div class="post container">

    <header class="post-header">
        <h1 class="post-title">Team</h1>
    </header>

    <article class="post-content">
        <h2 id="contributing-to-nemo">Contributing to Nemo</h2>
<p>Your contributation is always welcome :)
If you would like to contribute to Nemo, please subscribe to our mailing list: dev@nemo.apache.org [<a href="mailto:dev@nemo.apache.org">subscribe</a>].
We have a Slack channel for active discussions. Join us on Slack by requesting for an invitation by 
sending an e-mail to dev@ after subscription.</p>

<h2 id="committers">Committers</h2>

<table>
  <thead>
    <tr>
      <th>Apache ID</th>
      <th style="text-align: right">Full Name</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>bgchun</td>
      <td style="text-align: right">Byung-Gon Chun</td>
    </tr>
    <tr>
      <td>gwkim</td>
      <td style="text-align: right">Geon-Woo Kim</td>
    </tr>
    <tr>
      <td>gwlee</td>
      <td style="text-align: right">Gyewon Lee</td>
    </tr>
    <tr>
      <td>haeyoon</td>
      <td style="text-align: right">Haeyoon Cho</td>
    </tr>
    <tr>
      <td>hwarim</td>
      <td style="text-align: right">Hwarim Hyun</td>
    </tr>
    <tr>
      <td>jangho</td>
      <td style="text-align: right">JangHo Seo</td>
    </tr>
    <tr>
      <td>jeongyoon</td>
      <td style="text-align: right">Jeongyoon Eo</td>
    </tr>
    <tr>
      <td>jglee</td>
      <td style="text-align: right">Jung-Gil Lee</td>
    </tr>
    <tr>
      <td>johnyangk</td>
      <td style="text-align: right">Youngseok Yang</td>
    </tr>
    <tr>
      <td>jooykim</td>
      <td style="text-align: right">Joo Yeon Kim</td>
    </tr>
    <tr>
      <td>sanha</td>
      <td style="text-align: right">Sanha Lee</td>
    </tr>
    <tr>
      <td>taegeonum</td>
      <td style="text-align: right">Taegeon Um</td>
    </tr>
    <tr>
      <td>wonook</td>
      <td style="text-align: right">Won Wook SONG</td>
    </tr>
    <tr>
      <td>wylee</td>
      <td style="text-align: right">Wooyeon Lee</td>
    </tr>
    <tr>
      <td>yunseong</td>
      <td style="text-align: right">Yunseong Lee</td>
    </tr>
  </tbody>
</table>


    </article>
</div>

        </div>
    </div>

    <footer class="footer">
    <div class="container">
        <div class="row">
            <div class="col-sm-11">
                <p class="text-center">
                    Nemo 2023 |
                    Powered by <a href="https://github.com/aksakalli/jekyll-doc-theme">Jekyll Doc Theme</a>
                </p>
                <br>
                <p class="text-muted text-center">
                    Disclaimer: Apache Nemo (incubating) is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
                    <br>
                    <br>
                    Copyright © 2022 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation 
                </p>
                <!-- <p class="text-muted">Place sticky footer content here.</p> -->
            </div>
            <div class="col-sm-1">
                <a href="https://www.apache.org/events/current-event.html">
                    <img src="https://www.apache.org/events/current-event-125x125.png">            
                </a>
            </div>
        </div>
    </div>
</footer>

    <script>
  var baseurl = ''
</script>
<script src="/assets/js/jquery-1.12.4.min.js "></script>
<script src="/assets/js/bootstrap.min.js "></script>
<script src="/assets/js/typeahead.bundle.min.js "></script>

<script src="/assets/js/main.js "></script>

</body>

</html>
