#
# 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.
#

# Database of contributors to Apache Calcite.
# Pages such as developer.md use this data.
- name: Alan Gates
  apacheId: gates
  githubId: alanfgates
  org: Hortonworks
  role: PMC
- name: Aman Sinha
  apacheId: amansinha
  githubId: amansinha100
  org: MapR
  role: PMC
- name: Ashutosh Chauhan
  apacheId: hashutosh
  githubId: ashutoshc
  org: Hortonworks
  role: PMC
- name: Francis Chuang
  apacheId: francischuang
  githubId: F21
  org: Boostport
  role: Committer
- name: James R. Taylor
  apacheId: jamestaylor
  githubId: JamesRTaylor
  org: Salesforce
  role: PMC
- name: Jacques Nadeau
  apacheId: jacques
  githubId: jacques-n
  org: Dremio
  role: PMC
- name: Jesús Camacho Rodríguez
  apacheId: jcamacho
  githubId: jcamachor
  org: Hortonworks
  role: PMC Chair
- name: Jinfeng Ni
  apacheId: jni
  githubId: jinfengni
  org: MapR
  role: PMC
- name: John Pullokkaran
  apacheId: jpullokk
  githubId: jpullokkaran
  org: Hortonworks
  role: PMC
- name: Josh Elser
  apacheId: elserj
  githubId: joshelser
  org: Hortonworks
  role: PMC
- name: Julian Hyde
  apacheId: jhyde
  githubId: julianhyde
  org: Hortonworks
  role: PMC
  homepage: http://people.apache.org/~jhyde
- name: Maryann Xue
  apacheId: maryannxue
  githubId: maryannxue
  org: Intel
  role: Committer
- name: Michael Mior
  apacheId: mmior
  githubId: michaelmior
  org: University of Waterloo
  role: Committer
  homepage: http://michael.mior.ca/
- name: Milinda Pathirage
  apacheId: milinda
  githubId: milinda
  org: Indiana University
  role: Committer
  homepage: http://milinda.pathirage.org/
- name: MinJi Kim
  apacheId: minji
  githubId: minji-kim
  org: Dremio
  role: Committer
  avatar: http://web.mit.edu/minjikim/www/minji.png
  homepage: http://web.mit.edu/minjikim/www/
- name: Nick Dimiduk
  apacheId: ndimiduk
  githubId: ndimiduk
  org: Hortonworks
  role: PMC
  homepage: http://www.n10k.com
- name: Steven Noels
  apacheId: stevenn
  githubId: stevenn
  org: NGData
  role: PMC
- name: Ted Dunning
  apacheId: tdunning
  githubId: tdunning
  org: MapR
  role: PMC
  avatar: https://www.mapr.com/sites/default/files/otherpageimages/ted-circle-80.png
- name: Vladimir Sitnikov
  apacheId: vladimirsitnikov
  githubId: vlsi
  org: NetCracker
  role: PMC
# End contributors.yml
