////
     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.
////
= Apache NetBeans Team
: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: left
:toc-title: 

The Apache NetBeans Project Management Committee and Committers are as follows:

=== Anton Epple 
Committer, PMC Member

  - apache id: monacotoni 
  - Dukehoff GmbH, Munich, Germany 
  - DukeScript, HTML/Java, NetBeans Platform 
  -  http://dukescript.com http://twitter.com/@monacotoni 

=== Antonio Vieiro 
Committer, PMC Member

  - apache id: vieiro 
  - Spain 
  - Platform, editor, C, Java, Java EE 
  -  http://vieiro.net 

=== Aristides Villarreal 
Committer, PMC Member

  - apache id: avbravo 
  - Panama 
  - Java EE, NetBeans Platform, NoSQL 
  - http://twitter.com/@avbravo, http://avbravo.blogspot.com 

=== Bertrand Delacretaz 
PMC Member

  - apache id: bdelacretaz 
  - Switzerland 
  - I'm just a NetBeans user so far 
  - http://grep.codeconsult.ch 

=== Bruno Flávio 
Committer, PMC Member

  - apache id: brunoflavio 
  - Porto, Portugal 
  - Groovy / Grails support  

=== Christian Lenz 
Committer, PMC Member

  - apache id: chrizzly 
  - Leipzig, Germany 
  - JavaScript, HTML5, Node, PHP, Java Editor, Database, Maven, Hints, C/C++, Plugin Dev. 
  -  https://github.com/Chris2011 https://www.facebook.com/Chrizzly42 

=== 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/ 

=== Emmanuel Hugonnet 
Committer, PMC Member

  - apache id: ehsavoie 
  - Red Hat, Barraux, France 
  - WildFly plugin 

=== Eric Barboni
  - apache id: skygo 
  - ICS - IRIT, Université Paul Sabatier, Toulouse, France 
  - maven, platform, java editor 

=== Fabrizio Giudici
  - Tidalwave s.a.s., Genoa / Milan, Italy 
  - IDE, Maven, Docker, JavaFX 
  -  http://tidalwave.it/fabrizio/blog/ 

=== Florian Vogler 
Committer, PMC Member

  - apache id: fvogler 
  - Airbus Defence and Space, Bodensee, Germany 
  - Platform, JavaEE, Groovy, Gradle, Maven, Module System 

=== Geertjan Wielenga (geertjan)

[width="50%",frame="none", align="left"]
|===
|  | 
a|image::contributor-geertjan.png[]
a| * Oracle
* Amsterdam, Netherlands
|===

=== 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 


