# 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 Rya.
# Pages such as community.md use this data.
# Please keep the list in alphabetical order.
#
- name: Jennifer Brown
  apacheId: jbrown
#  githubId: 
  role: Committer, PPMC member
  org: Parsons

- name: Sean Busbey 
  apacheId: busbey
  githubId: busbey
  role: Former Mentor
  org: 

- name: Kevin Chilton
  apacheId:
#  githubId:
  role: Contributor

- name: Adina Crainiceanu
  apacheId: adina
  githubId: adinancr
  role: Committer, PPMC member
  org: US Naval Academy

- name: Jeff Dash
  apacheId:
  githubId: jdash
  org:
  role: Contributor

- name: Josh Elser
  apacheId: elserj
  githubId: joshelser
  org: 
  role: Mentor
  homepage: 

- name: Adam Fuchs
  apacheId: afuchs
#  githubId: 
  role: Champion
  org:

- name: Craig Hahn
  apacheId:
#  githubId:
  org:
  role: Contributor

- name: Susan H&auml;rtig
  apacheId: 
  githubId: 
  org: Semantic Web Company
  role: Contributor

- name: Jesse Hatfield
  apacheId:
  githubId: jessehatfield
  org:
  role: Contributor

- name: Jakobitsch J&uuml;rgen
  apacheId: 
  githubId: jj-semantic-web-com
  org: Semantic Web Company
  role: Contributor

- name: David Lotts
  apacheId: dlotts
  githubId: dlotts
  org: Parsons
  role: Commiter, PPMC member

- name: Caleb Meier
  apacheId: caleb
  githubId: meiercaleb
  org: Parsons
  role: Commiter, PPMC member

- name: Aaron Mihalik
  apacheId: mihalik
  githubId: amihalik
  org: Parsons
  role: Committer, PPMC member

- name: Roshan Punnoose
  apacheId: roshanp
  githubId: roshanp
  org: 
  role: Committer, PPMC member

- name: David Rapp
  apacheId: dnrapp
  githubId: dnrapp
  org:
  role: Committer, PPMC member

- name: Billie Rinaldi
  apacheId: billie
  githubId: 
  org:
  role: Mentor

- name: Guilherme Rodrigues
  apacheId: 
  githubId: Grave
  org: Semantic Web Company
  role: Contributor

- name: Andrew Smith
  apacheId:
  githubId: isper3at
  org:
  role: Contributor

- name: Puja Valiyil
  apacheId: pujav65
  githubId: pujav65
  org: Parsons
  role: Committer, PPMC member

- name: Seetharam Venkatesh
  apacheId: venkatesh
  githubId: 
  org: 
  role: Former Mentor

- name: Steve Wagner
  apacheId: swagner
  githubId: steverwagner
  org:
  role: Committer, PPMC member

- name: Eric White
  apacheId:
  githubId: ejwhite922
  org:
  role: Contributor

- name: Amila Wijayarathna
  apacheId: 
#  githubId: 
  org:
  role: Contributor

- name: Jonathan Wonders
  apacheId:
  githubId: jwonders
  org:
  role: Contributor

- name: Edward J. Yoon
  apacheId: edwardyoon
#  githubId: 
  org: 
  role: Former Mentor


# End contributors.yml
