////
     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.
////
= Who's Who
:jbake-type: page
:jbake-tags: community
:jbake-status: published
:icons: font
:keywords: Apache NetBeans Team Who is Who
:description: Apache NetBeans Who is Who
:toc: none
:toc-title: 

Apache NetBeans Project Management Committee and Committers are listed alphabetically below.

[width="70%"]
|=== 
a|=== Anton Epple| 
a|image::contributor-monacotoni.png[] a| * apache id: monacotoni
* Dukehoff GmbH
* Munich, Germany
* DukeScript, HTML/Java, NetBeans Platform 
|=== 

[width="70%"]
|=== 
a|=== Antonio Vieiro| 
a|image::contributor-vieiro.png[] a| * apache id: vieiro
* Spain
* Platform, editor, C, Java, Java EE  
|=== 

[width="70%"]
|=== 
a|=== Antonio Vieiro| 
a|image::contributor-avbravo.png[] a| * apache id: avbravo
* Panama
* Java EE, NetBeans Platform, NoSQL   
|=== 

[width="70%"]
|=== 
a|=== Bertrand Delacretaz| 
a|image::contributor-bertrand.png[] a| * apache id: bdelacretaz
* Switzerland
* http://grep.codeconsult.ch   
|=== 

[width="70%"]
|=== 
a|=== Bruno Flávio| 
a|image::contributor-brunoflavio.png[] a| * apache id: brunoflavio
* Porto, Portugal
* Groovy / Grails support 
|===   

|=== 
a|=== Christian Lenz| 
a|image::contributor-chrizzly.png[] a| * apache id: chrizzly
* Leipzig, Germany
|===  

=== Constantin Drabo 
Committer, PMC Member

  - apache id: pandaconstantin 
  - Université de Ouagadougou, Ouagadougou, Burkina Faso 
  - Q/A , JavaEE, C/C++ , Javascript, HTML 
  - http://twitter.com/@pandaconstantin , http://blog.fedora-fr.org/pandaconstantin/ 

=== David Heffelfinger 
Committer, PMC Member

  - apache id: dheffelfinger 
  - Ensode Technology, LLC,  Fairfax, VA, USA 
  - Java EE 
  -  http://www.ensode.net/roller/dheffelfinger/  
  
[width="70%"]
|=== 
a|=== Emmanuel Hugonnet| 
a|image::contributor-ehsavoie.png[] a| * apache id: ehsavoie
* Red Hat
* Barraux, France 
* WildFly
|===    
  
[width="70%"]
|=== 
a|=== Eric Barboni| 
a|image::contributor-skygo.png[] a| * apache id: skygo
* ICS - IRIT, Université Paul Sabatier
* Toulouse, France
* NetBeans Platform, Java Editor, Maven
|===   
  
[width="70%"]
|=== 
a|=== Florian Vogler| 
a|image::contributor-florian.png[] a| * apache id: fvogler
* Airbus Defence and Space
* Bodensee, Germany
* NetBeans Platform, Groovy, Maven
|===  

[width="70%"]
|=== 
a|=== Geertjan Wielenga| 
a|image::contributor-geertjan.png[] a| * apache id: geertjan
* Oracle
* Amsterdam, Netherlands
* NetBeans Platform, Java Editor
|===

=== Ioannis Kostaras 
Committer, PMC Member

  - apache id: ikost 
  - Liége, Belgium 
  - C/C++/Java/JavaEE/JavaFX/HTML5/CSS3, Platform, Ruby, RoR, Python, Tutorials 
  - , blog 

=== Jan Lahoda 
Committer, PMC Member

  - apache id: jlahoda 
  - Oracle, Czech Republic 
  - Java editor/support, Editor 

=== Jesse Glick 
Committer, PMC Member

  - apache id: jglick 
  - CloudBees, North Carolina USA 
  - API Support 
  - http://twitter.com/@tyvole 

=== Jim Jagielski
Mentor

  - apache id: jim 
  - Forest Hill, MD USA 
  - http://twitter.com/@jimjag 

=== Jiri Kovalsky 
Committer, PMC Member

  - apache id: jkovalsky 
  - Oracle, Bohumin, Czech Republic 
  - Java, Plugins, NetCAT 

=== John McDonnell
Committer, PMC Member

  - apache id: johnmcdonnell 
  - BearingPoint Ireland, Dublin, Ireland 
  - Maven, Java EE, Docker  

=== Junichi Yamamoto 
Committer, PMC Member

  - apache id: junichi11 
  - Fukuoka, Japan 
  - PHP 
  -  http://junichi11.com/ http://twitter.com/@junichi_11 

=== Ken Fogel
  - Dawson College, Montreal, Quebec, Canada 
  - Java, JavaFX, JavaServer Faces, Education 
  -  https://www.omnijava.com https://www.dawsoncollege.qc.ca/computer-science-technology/ http://twitter.com/@omniprof 

=== Laszlo Kishalmi 
Committer, PMC Member

  - apache id: lkishalmi 

=== Leonardo Zanivan 
Committer, PMC Member

  - apache id: panga 
  - Aurea Software, Criciúma, Brazil 
  - Java editor, JavaScript, Plugins 
  - http://twitter.com/@leonardopanga 

=== Mark Stephens 
Committer, PMC Member

  - apache id: markee174 
  - IDRsolutions, Tonbridge, Kent, UK 
  - Platform, API Support, JavaFX, HTML5 
  -  NetBeans articles on IDR blog 

=== Martin Klähn 
Committer, PMC Member

  - apache id: mklaehn 
  - Airbus Defence and Space, Bodensee, Germany 
  - Platform, JavaFX, JavaEE, Groovy, Gradle 

=== Michael Müller 
Committer, PMC Member

  - apache id: muellermi 
  - Germany 
  - Java EE, Evangelize 
  -  Michael's Blog Michael Müller 

=== Matthias Bläsing 
Committer, PMC Member

  - apache id: matthiasblaesing 
  - Germany 
  - Database, XML 

=== Neil C Smith 
Committer, PMC Member

  - apache id: neilcsmith 
  - Praxis LIVE, Oxford, UK 
  - Platform, API Support, Java editor/support 
  -  NetBeans articles in Praxis LIVE blog 

=== Sven Reimers 
Committer, PMC Member

  - apache id: sreimers 
  - Airbus Defence and Space, Bodensee, Germany 
  - Platform, JavaFX, JavaEE, Groovy, Gradle, XML 

=== Thilina Ranathunga
  - Nano Creations, Ekala, Sri Lanka 
  - RCP, API, EE, Spring, Angular, TypeScript 
  -  http://thilina01.com/
  -  https://www.linkedin.com/in/thilina-ranathunga-35bb2864/
  -  https://github.com/thilina01 

=== Timon Veenstra 
Committer, PMC Member

  - apache id: timon 
  - Corizon, Groningen, the Netherlands 
  - Platform, Maven, API Support, JavaFX 

=== Tushar Joshi 
Committer, PMC Member

  - apache id: tusharjoshi 
  - Persistent Systems, Nagpur, Maharashtra, India 
  - Platform, API Support 
  -  NetBeans IDE Blog by Tushar Joshi 

=== Vladimir Voskresensky 
Committer, PMC Member

  - apache id: vladimirvv 
  - Azul, St. Petersburg, Russia 
  - C/C++: code model (ANTLR and Clang-based), refactoring, code completion, reverese engineering, performance and memory optimizations 
  -  NetBeans C/C++ Support 

=== Wade Chandler 
Committer, PMC Member

  - apache id: wadechandler 
  - Knoxville, TN, USA 
  - Java, Groovy, Platform, API Support, Gradle, Maven, C++, Python 
  - http://twitter.com/@wadechandler, wadechandler.com 

=== Zoran Sevarac 
Committer, PMC Member

  - apache id: sevarac 
  - University of Belgrade, Faculty of Organizational Sciences, Belgrade, Serbia 
  - Platform, editor, code qualitty, artificial intelligence 
  - http://twitter.com/@zsevarac 


