The SINGA Team
==============

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.

Mentors
-------

==================   ============
Name                 Email
==================   ============
Daniel Dai           daijy@apache.org
Ted Dunning	     tdunning@apache.org
Alan Gates	     gates@apache.org
Thejas Nair	     thejas@apache.org
==================   ============

Developers
----------

+-------------------+--------------------------------+----------------------------------------------+
| Name              |  Email                         |  Organization                                |
+-------------------+--------------------------------+----------------------------------------------+
|Gang Chen          |  cg@zju.edu.cn                 |   Zhejiang University                        |
+-------------------+--------------------------------+----------------------------------------------+
| Haibo Chen        | hzchenhaibo@corp.netease.com   |  NetEase                                     |
+-------------------+--------------------------------+----------------------------------------------+
| Anh Dinh	    |     dinhtta@apache.org	     |         National University of Singapore     |                       
+-------------------+--------------------------------+----------------------------------------------+
| Jinyang Gao	    |     jinyang@apache.org	     |         National University of Singapore	    |
+-------------------+--------------------------------+----------------------------------------------+
| Xing Ji	    |         jixin@comp.nus.edu.sg  |          National University of Singapore    |
+-------------------+--------------------------------+----------------------------------------------+
| Chonho Lee	    |  chonho@gmail.com              |   National University of Singapore           |
+-------------------+--------------------------------+----------------------------------------------+
| Zhaojing Luo	    | zhaojing@apache.org	     | National University of Singapore	            |
+-------------------+--------------------------------+----------------------------------------------+
| Beng Chin Ooi	    | ooibc@comp.nus.edu.sg          | National University of Singapore	            |
+-------------------+--------------------------------+----------------------------------------------+
| Kian-Lee Tan	    |    tankl@apache.org            | National University of Singapore	            |
+-------------------+--------------------------------+----------------------------------------------+
|Anthony K. H. Tung |  atung@comp.nus.edu.sg         |   National University of Singapore	    |
+-------------------+--------------------------------+----------------------------------------------+
| Ji Wang	    |         wangji@comp.nus.edu.sg |	      National University of Singapore	    |
+-------------------+--------------------------------+----------------------------------------------+
| Sheng Wang	    |    wangsh@apache.org           | National University of Singapore	            |
+-------------------+--------------------------------+----------------------------------------------+
| Wei Wang	    |    wangwei@apache.org	     |         National University of Singapore	    |
+-------------------+--------------------------------+----------------------------------------------+
| Yuan Wang         |  wangyuan@corp.netease.com     |   NetEase                                    |
+-------------------+--------------------------------+----------------------------------------------+
| Wenfeng Wu	    |     wuwf@comp.nus.edu.sg       |  National University of Singapore            |
+-------------------+--------------------------------+----------------------------------------------+
| Zhongle Xie	    |     zhongle@apache.org	     |        National University of Singapore      |
+-------------------+--------------------------------+----------------------------------------------+
| Meihui Zhang	    |     meihui_zhang@sutd.edu.sg   |Singapore University of Technology and Design |
+-------------------+--------------------------------+----------------------------------------------+
| Kaiping Zheng     |     kaiping@apache.org	     |         National University of Singapore	    |
+-------------------+--------------------------------+----------------------------------------------+
| Ming Zhong        | hzzhongming15@corp.netease.com |   Zhejiang University                        |
+-------------------+--------------------------------+----------------------------------------------+



