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

[align="left",width="50%,"frame="none"]
|=== 
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 


