Monday Jan 11, 2016

Signal & Power Integrity Simulation on the NetBeans Platform

SPISim is a leading consulting firm of EDA tools for platform signal and power integrity analysis. Many of the electronics products, such as cell phone, laptop and PC need to go through electrical analysis at various design and production stages. This is to make sure signal communications between components and interfaces like DDR, USB3, PCIe, will meet the desired speed and throughput.

SPIPro is a NetBeans Platform application developed by SPISim to meet these design challenges. It makes use of many NetBeans Platform solutions and techniques, such as the Visual Library, modular design, and the flexible file system. Combined with SPISim's domain expertise, SPIPro demonstrates the advantages of building applications on top of the NetBeans Platform and has been adopted by several of the fortune 500 high tech companies around the world.

Also watch the related YouTube screencasts here.

Sunday Jan 10, 2016

Tactical Link-16 Line of Sight Software on the NetBeans Platform

Simtec in Switzerland provides services in the area of technical software development and associated consulting. One of their applications on the NetBeans Platform is Icasim Line of Sight. Developed with the flight-test department of armasuisse and the Swiss Air Force, the software collects data messages from Link-16, ADS-B, GPS, radar and other sources and combines, evaluates and displays the data in a single user interface. The software processes among many other messages the J1.1 (Connectivity Status), J2.2 (Air PPLI), J2.5 (Land Point PPLI) and J3.2 (Air Track) Link-16 J-messages.

Some screenshots to give a general impression of the software:

Detail from the above screenshot:

For further information, go here.

Saturday Jan 09, 2016

Diffraction Data Analysis on the NetBeans Platform

The Netcrystals software, created in Austria, is a multipurpose scientific software that is mainly related to crystallography and diffraction. The software allows the user to create crystals from an asymmetric cell, using Wyckoff positions and symmetry information.

Crystals can be displayed and manipulated graphically in a 3D environment.

Zooming into the bottom left window above, the crystal and associated data is structured in a logical manner:

The software can also be used to easily build molecules and use the molecules as a motif for constructing the appropriate crystal using symmetry operations.

Future releases of the software will allow the user to use the crystal data to calculate precise diffraction patterns. The final version of the software should enable the user to use empirical diffraction data for recalculation of the crystal structure using appropriate scientific methods.

Friday Jan 08, 2016

Java, ADF, and Oracle JET Seminar for University of Applied Sciences in Utrecht

I'm participating in a seminar on Monday at Oracle Netherlands in Utrecht, for students from the University of Applied Sciences in Utrecht. As you can see below, my part is to introduce the concepts of Oracle JET ( to the group. I am looking forward to it.

Thursday Jan 07, 2016

HTML Palette for Oracle JET Users

Here's a super handy tip for anyone using Oracle JET ( or, in fact, anyone doing anything at all with HTML in NetBeans IDE. But, since I am convinced Oracle JET is pretty awesome, I'll focus in particular on Oracle JET components here.

Let's take this scenario as a starting point, i.e., you're in the process of creating a modular Oracle JET application. Right now, you've opened the "home.html" document and you press Ctrl-Space. That brings up the code completion box for HTML files, which by default shows the content shown in the screenshot:

Of course, Oracle JET comes with its own set of HTML components. For example, from the Oracle JET Cookbook, you can see that a basic 'ojChart' component is expressed as follows, within a DIV element:

<div id="areaChart" data-bind="ojComponent: {
    component: 'ojChart', 
    type: 'area', 
    series: areaSeriesValue, 
    groups: areaGroupsValue, 
    animationOnDisplay: 'auto',
    animationOnDataChange: 'auto',
    orientation: orientationValue,
    stack: stackValue,
    hoverBehavior: 'dim'

Wouldn't it be handy if you could press Ctrl-Space... and then see the 'ojChart' component provided there, exactly the same way as other HTML components are provided, which you can then press Enter on, which will cause the IDE to create the complete DIV element shown above? You'd never need to cut and paste it from the Oracle JET Cookbook again.

Something like this:

How to achieve the above yourself? The key to all of this is that whatever is found in the HTML Palette is automatically made available in the code completion box for HTML files. That's pretty cool and so all we now need to do is get out snippet into the HTML Palette.

Take the following steps:

  1. Open an HTML file and then open the HTML Palette (Ctrl-Shift-8).
  2. Right-click in the Palette and click "Create New Category". Name the category "Oracle JET".
  3. From the HTML Editor, drag the snippet into the Oracle JET category in the HTML Palette. The "Add to Palette" dialog appears. At least enter a name. Optionally, provide a tooltip and icons. Click Add to Palette.

Now your Oracle JET component is in the HTML Palette. You can drag it from there into the HTML Editor. You can also press Ctrl-Space and then the code completion box opens, which now includes your Oracle JET component.

But... best of all is that you can start typing the first few letters of the name of your code snippet and then press Ctrl-Space and you'll be able to click Enter on the item and very quickly have generated for you the HTML content you need:

Note: I have created an issue to have the Oracle JET components included in the palette by default:

Monday Jan 04, 2016

Selecting a Row in Oracle JET ojTable (Part 3)

Following on from part 2, our requirements have now changed. Instead of showing the values of the selected row below the table, we want to remove the table when a row has been selected and replace that table with a new table that shows detailed information about the selected row. I'm not going to address the question of whether this is good UI design, since I have a feeling that rather than removing the table, you'd want the second table to appear below the first, to show the details of the row selected in the master table. There, I addressed the question of UI design after all.

Anyway, let's implement the requirement as given. The beautiful thing about Oracle JET is that it's all Knockout right the way through, i.e., the solution is not specific to Oracle JET—because Knockout runs right the way through it. 

Start by using the "visible" binding, as follows. 

<div data-bind="visible: showMainTable">
    <table data-bind="ojComponent: {component: 'ojTable', 
            beforecurrentrow: currentRowListener,
            data: datasource,
            columns: [
                {headerText: 'Id', field: 'DepartmentId'},
                {headerText: 'Name', field: 'DepartmentName'}]

Now, back in the JavaScript side of your module, right beneath the "var self = this", add this statement:

self.showMainTable = ko.observable(true); 

Next, toggle the "showMainTable" observable whenever a row is selected, i.e., in the listener that is assigned to the "beforecurrentrow" event:

self.currentRowListener = function (event, ui) {
    var newCurrentRow = ui.currentRow;['rowIndex']).
            then(function (rowObj) {
                var obj = rowObj['data'];

OK, right now, you've hidden the table whenever a row is selected. 

Go back to your HTML file, copy everything in the DIV that makes use of the "visible" binding and bind it to "showDetailTable". In the JavaScript file, define that observable property as being initially false. Then set it to true at the point where you're setting the main table to false. Finally, replace the content of the "datasource" variable with the content you'd like to have populate the details table.

That should be all that needs to be done to meet the new requirements. 

Sunday Jan 03, 2016

Reading XML in Oracle JET

There's an interesting question on the Oracle JET forum about reading an XML file into an Oracle JET application. The person asking the question is using a 'require' block, whereas below I'm using a 'define' block, since the code below is in a custom Oracle JET module, since Oracle JET is perfect for creating modular JavaScript applications.

Here's the JavaScript side...

define(['ojs/ojcore', 'knockout', 'ojs/ojtable'
], function (oj, ko) {
    function mainContentViewModel() {
        var self = this;
        var deptObservableArray = ko.observableArray([]);
        self.datasource = new oj.ArrayTableDataSource(deptObservableArray, {idAttribute: 'id'});
        self.addData = function () {
                url: "cd_catalog.xml",
                type: 'GET',
                dataType: 'xml',
                success: function (data, textStatus, jqXHR) {
                    var x = data.getElementsByTagName("CD");
                    for (i = 0; i < x.length; i++) {
                        l_artist = x[i].getElementsByTagName("ARTIST")[0].
                        l_title = x[i].getElementsByTagName("TITLE")[0].
                            id: i, 
                            artist: l_artist, 
                            title: l_title});
        //Maybe call the function from the 'click' binding of a button,
        //but for the moment let's just call it automatically:
    return mainContentViewModel;

And here's the HTML side, which is identical to how it is in the questioner's post in the forum:

<table id="table2" summary="Album List" aria-label="Album Table"
       data-bind="ojComponent: {component: 'ojTable',
                        data: datasource,
                        columnsDefault: {sortable: 'none'},
                        columns: [{headerText: 'Id',
                                   field: 'id'},
                                  {headerText: 'Artist',
                                   field: 'artist'},
                                  {headerText: 'Title',
                                   field: 'title'}]}">

Make sure your XML file is in the 'public_html' folder, as shown below, and everything will work as you'd expect:

Also it's a good idea to watch this recent YouTube screencast by JB Brock, though he uses JSON, not XML, as in the example above. I can now see this in the browser:

The XML file comes from here:

Saturday Jan 02, 2016

Selecting a Node in Oracle JET ojTree

We've looked at selecting a row in an ojTable, by making use of the "beforecurrentrow" event callback as an ojComponent binding property. Let's do the same now for an ojTree, again in a custom module, i.e., using a 'define' block instead of a 'require' block as done in the Oracle JET Cookbook

For this simple scenario, whenever a node is selected, an H2 below the tree appears, showing information about the current selection, i.e., you can see above that 'News' is selected and hence the H2 below the tree reflects that selection. 

Here's the ojTree in the HTML side of our custom module:

<div data-bind="ojComponent: {component: 'ojTree', 
    before: currentRowListener, 
    data: datasource
<h2><span id="selectedNode"></span></h2>

The key to this blog entry is the "before" property that you see above, in bold. In the code completion in NetBeans IDE, you will not be offered that property, because right now (and I think this should be a new enhancement request), event callbacks are not shown as potential properties to be used, i.e., you'll not see 'before' in the code completion, even though it is in the list of events, as can be seen in the ojTree javadoc. The rule is that all event callbacks should be available as properties.

Now that we've assigned our event listener as shown above, rather than in the way described in the Oracle JET Cookbook where JQuery is used directly after the 'ko.applyBindings', we can use 'func' and 'item' on the 'ui' returned to us in the callback handler, as described in the 'before' javadoc:

define(['ojs/ojcore', 'knockout',
    'ojs/ojknockout', 'ojs/ojtree'
], function (oj, ko) {
    function homeContentViewModel() {
        var self = this;
        self.datasource = [
            {"title": "Home", "attr": {"id": "home"}, 
                "children": [
                    {"title": "Overview", "attr": {"id": "overview"}},
                    {"title": "Section1", "attr": {"id": "section1"}},
                    {"title": "Section2", "attr": {"id": "section2"}}
            {"title": "News", "attr": {"id": "news"}},
            {"title": 'Contact', "attr": {"id": "contact"}},
            {"title": 'About', "attr": {"id": "about"}}
        self.currentRowListener = function (event, ui) {
            if (ui.func === 'select') {
                var selectedNode = _arrayToStr(ui.item);
    function _arrayToStr(arr) {
        var s = "";
        $.each(arr, function (i, val) {
            if (i) {
                s += ", ";
            s += $(arr[i]).attr("id");
        return s;
    return homeContentViewModel;

The '_arrayToStr' function is a bit clunky, though it comes directly from the abovementioned javadoc and is the current best way of retrieving our 'id', or whatever we need, from the 'ui.item'.

With the above, we have everything we need to hook up a listener to an 'ojTree' and respond to the 'selection' event by retrieving relevant information from the current selection. 

Friday Jan 01, 2016

Selecting a Row in Oracle JET ojTable (Part 2)

I got some help from my colleague Max Starets yesteday, who told me about the 'beforecurrentrow' property of the 'ojComponent' binding expression... which was exactly what I was looking for:

Make sure to type 'beforecurrentrow' exactly as shown above, i.e., all lower case. It's strange that 'beforecurrentrow' is not shown in the code completion box in NetBeans IDE for the 'ojTable' component. Maybe it's a new property, I don't know.

Anyway, now that I don't need to assign the listener via JQuery anymore, i.e., as shown yesterday, which only appears to work when you set that right after the 'ko.applyBindings' statement, it's simple to use the code shown yesterday within a custom module, i.e., within a 'define' block, as shown below, which works perfectly and exactly how I wanted:

define(['ojs/ojcore', 'knockout', 
    'ojs/ojknockout', 'ojs/ojtable'
   ], function(oj, ko) {
        function homeContentViewModel() {
            var self = this;
            var deptArray = [
                {DepartmentId: 20, DepartmentName: 'History'},
                {DepartmentId: 10, DepartmentName: 'Geography'},
                {DepartmentId: 30, DepartmentName: 'Biology'}];
            self.datasource =
                    new oj.ArrayTableDataSource(
                            {idAttribute: 'DepartmentId'});
            self.currentRowListener = function (event, ui) {
                var newCurrentRow = ui.currentRow;
                        then(function (rowObj) {
                            var obj = rowObj['data'];
   return homeContentViewModel;

Thursday Dec 31, 2015

Selecting a Row in Oracle JET ojTable (Part 1)

Let's let the user select a row in an ojTable and display the related values.

There are two scenarios here. In the first, you've not created a custom module. Instead, you're using the 'main.js' and the 'index.html' files for all your code. Not ultimately what you want to do, though it's a start. Here it is:

<table id="table" 
       data-bind="ojComponent: {component: 'ojTable', 
            data: datasource, 
            columns: [
                {headerText: 'Id',  field: 'DepartmentId'},
                {headerText: 'Name',  field: 'DepartmentName'}
<span id="selectedDepartmentId"></span>
<span id="selectedDepartmentName"></span>

And here's the 'require' block in the 'main.js' file:

require(['ojs/ojcore', 'knockout', 'jquery', 
    'ojs/ojknockout', 'ojs/ojmodule', 'ojs/ojtable'], 
        function (oj, ko) 
            function RootViewModel() {
                var self = this;
                var deptArray = [
                    {DepartmentId: 20, DepartmentName: 'History'},
                    {DepartmentId: 10, DepartmentName: 'Geography'},
                    {DepartmentId: 30, DepartmentName: 'Biology'}];
                self.datasource = 
                        new oj.ArrayTableDataSource(
                            {idAttribute: 'DepartmentId'});
            var vm = new RootViewModel;
                    function () {
            function currentRowListener(event, ui) {
                var newCurrentRow = ui.currentRow;
                        then(function (rowObj) {
                    var obj = rowObj['data'];

The above is a simplified version of the code described here in the Cookboook.

Next, let's look at how the above would work within a custom module, i.e., using a 'define' block instead of a 'require' block. And... I don't know the answer to this yet.

The problem for me in the above code is here:

    function () {

As you can see, the event listener is being set right after the 'ko.applyBindings', which is all fine and good, and it works. However, I'd prefer to avoid using JQuery and, instead, use the 'event' binding provided by Knockout, which would be like this, notice the part in bold:

<table id="myTable" 
    event: {ojbeforecurrentrow: tableListener},
    ojComponent: {component: 'ojTable',
    selectionMode: {row: 'multiple', column: 'multiple'}, 
    columnsDefault: {sortable: 'enabled'}, 
    data: datasource, 
    columns: [
        {headerText: 'Id',  field: 'DepartmentId'},
        {headerText: 'Name',  field: 'DepartmentName'}

Then, back in my JavaScript, I would expect to be able to use this, i.e., I would expect to have access to the 'ui', which is the ojTable:

self.tableListener = function (event, ui) {

But, even though the event works, i.e., when I select a row, the event is called, I am not given access to the 'ui'. Instead I have this, since the 'ui' is not returned: the 'data' is returned, which is not what I want. I want to be able to call 'ui.currentRow', which I can't do right now because the listener is not returning the 'ui', i.e., the ojTable, and instead gives me the data:

self.tableListener = function (data, event) {

Were this to be possible, I'd be (1) be able to avoid JQuery, which is nice, i.e., I'd be able to use Knockout bindings throughout and (2) it would be simpler to set my event listeners because I'd do so in the HTML rather than in the JavaScript, so that I wouldn't need to do this during initialization, which I haven't been able to do in any other way than via JQuery.

Related references for the above, e.g., for relevant tables and events:

Note: The solution to the problem described above is in part 2.

Wednesday Dec 30, 2015

Brazil's WEG Industrial Electrical Systems on the NetBeans Platform

The entrepreneurial success of Werner Ricardo Voigt, Eggon João da Silva, and Geraldo Werninghaus began in Brazil in 1961, when they started Eletromotores Jaraguá. Later, the company created by an electrician, a manager, and a mechanic changed its name to Eletromotores WEG SA, the name composed of the initials of the three founders. Currently Latin America's largest electric motor manufacturer, as well as being one of the largest in the world, WEG specializes in command and protection, speed variation, industrial process automation, power generation and distribution, as well as industrial paints and varnishes. Production is concentrated in eight sites in Brazil, three in Argentina, two in Mexico, one in China, and one in Portugal.

Initially focused on manufacturing electric motors, WEG started to diversify during the 80's with the production of electronic components, industrial automation products, power and distribution transformers, liquid and powdered paints and insulating varnishes. Increasingly, the company has been consolidating itself not only as an electric motor manufacturer, but also as a supplier of complete industrial electrical systems.

In that light, the WEG Programming Suite (WPS) plays a central role. WPS is a software tool to support the WEG domain-specific programming language that is designed to meet the needs related to putting together user interface panels and machines created by WEG. WPS is created in Java on the NetBeans Platform, which out of the box provides its modularity, window system, and much more:

For more information, go here:

Tuesday Dec 29, 2015

SCADA System on the NetBeans Platform

Zapli SCADA is developed by Apli in Bratislava, Slovakia, on NetBeans Platform 8.1.

The application is a client-server, with an unlimited number of clients. The primary communication protocol used to communicate with PLCs is Bacnet/IP, though the system can support many other protocols too. The big advantage of this system over classical black box SCADA systems is the full accessibility of the source code for each component, so that the features of the system are constrained only by the limits in terms of knowledge and skill of the developer team. Interesting features include the fact that the system is able to generate alarms by means of a speech synthesizer. Moreover, you can write code for individual SCADA screens at runtime and all changes are immediately applied to the connected clients.

Zapli SCADA is used by Veolia energy in the energy district system of Petrzalka, which is the largest city district in Slovakia. The system is connected to more than 200 PLCs of various brands, with a total number of measurement points of more than 23 000, while these numbers grow as more locations are connected. Zapli SCADA is currently installed at a nuclear power plant and is used in a system for the disposal of nuclear waste.

Generally, SCADA is designed primarily for use with recurring technological units, such as boiler rooms and heat transfer stations. Unlike other conventional SCADA systems, Zapli SCADA doesn’t statically define point names in graphical sections. Instead, it uses a system of dynamic filters. By maintaining customized nomenclature it is possible to use the same graphical technology for multiple technological units, saving time and money. A built-in graphical editor is included, as well as the ability to distribute new features to clients without their needing to re-install or restart the application.

Monday Dec 28, 2015

Underwater Vehicle Design & Control on the NetBeans Platform

VCT specializes in underwater vehicle design and control. The organization has been serving the US Navy market since 1993 with hydrodynamic analysis and design expertise on towed systems, torpedoes, swimmer delivery vehicles, unmanned underwater vehicles, underwater gliders, and submarines. 

The NetBeans Platform is the basis of the VCT software. 

The VCT Data Review Tool provides quick processing and visualization of all VCT vehicle data:

The VCT Operator Console provides the user interface for all VCT vehicles: 

For more details, go here:

For a similar story, go here:

Wednesday Dec 23, 2015

Mobile Advertizing Client on the NetBeans Platform

Adsperity is a platform for creating mobile advertizing.

To help its users, Adsperity has a "robust desktop client that puts everything you need to create ads right at the tip of your mouse. Just drag and drop the campaign assets you already have into the client to create your ads. The client automatically creates all necessary coding so all you have to worry about is getting your message right."

The robust desktop client is clearly created on the NetBeans Platform, making use of its Window System, Visual Library, and much more:

Sometimes the question is asked whether the NetBeans Platform is only used in back office scenarios, i.e., whether there are use cases for the NetBeans Platform where it is the basis of applications used by non-technical end users, rather than experts, programmers, or internal staff. Well, the above is one example.

Tuesday Dec 22, 2015

Hong Kong Trading & Settlement Systems on the NetBeans Platform

Wise Information Service Engineering Ltd. is engaged in the development and service provision of financial related application solutions.

The primary products are trading and settlement systems of financial products which are targeted for brokerage firms in Hong Kong.

The existing trading and settlement systems are used to streamline operations of financial institutions and can cover the whole lifecycle of trading and settlement processes from order placing, risk management, and settlement to compliance.

The NetBeans Platform is used to develop the client side GUI of the stock trading platform, named "WiseTrade". The NetBeans Platform helps primarily because it is easy to save UI layout settings without needing extra code. 


Similar applications on the NetBeans Platform:

Monday Dec 21, 2015

Preview: Multicursor Selection in NetBeans IDE (Part 2)

In Part 1, I mentioned we're working on multi-cursor selection (also known as "multi caret support"). Now, you too, can try it!

Watch the screencast, a quick 5 minutes, as an introduction:

Go here, as explained above, to try it too:


This is great work done over a long period by NetBeans engineers Ralph Ruijs and Miloslav Metelka. 

Saturday Dec 19, 2015

Oracle JET Enhancements for NetBeans IDE

I've been doing quite a bit of work, in many different ways, with Oracle JET ( over the past months, at quite a lot of conferences, meetups, and on-line things, etc.

And, in doing so, I've been focusing a lot on doing code demos, i.e., live coding, with NetBeans IDE, showing how to set up Oracle JET applications, how to create modular Oracle JET applications, how to integrate Oracle JET components from the on-line Cookbook, etc.

NetBeans IDE clearly provides a range of helpful features to simplify working with Oracle JET. Nevertheless, it can always be better.

Here are issues I have filed over the past few days to make NetBeans IDE even better for developers using Oracle JET:

These are mostly pretty small enhancements, all quite doable. Does anyone out there getting familiar with Oracle JET see other areas in NetBeans IDE where its support could be even better?

Go here to file your enhancement requests, a special category for Oracle JET enhancements and bugs in NetBeans Bugzilla:

Friday Dec 18, 2015

Oracle WebLogic Server in the Cloud with NetBeans IDE

Today my colleague Frank Brink introduced me to Oracle WebLogic Server in the Oracle Cloud, while I introduced him to NetBeans IDE.

Here you see in the Services window that I have made a connection to the server, which is made available by the Oracle Java Cloud Service. We also deployed two applications to the server in the Cloud, the ones highlighted below, from NetBeans IDE, while the others below were already there:

The view in NetBeans above is an accurate reflection of the deployed apps, which I can see in the browser, by looking at the Administration Console of Oracle WebLogic Server in the Cloud:

However, there are 4 managed server instances, while from NetBeans IDE you're not able to see or select them. I.e., NetBeans IDE needs to have an extra subnode within the server's node in the Services window to show the server instances, as well as the possibility to select the one you want to deploy to:

In the absence of the above functionality, applications deployed from NetBeans IDE are always deployed to the first instance, which can inconveniently end up being an administration instance, as you can see below:

However, after deployment, you can reconfigure the instance to which an application is deployed, i.e., you can correct deployment so that the correct instance is used.

Nevertheless, NetBeans IDE needs to have more finegrained support for server instances, as outlined above, and I'll be making an issue about this soon.

Wednesday Dec 16, 2015

YouTube: Using the Base Distribution of Oracle JET

I've found it really handy to start with the base distribution of Oracle JET, rather than the quick start basic template. I did this demo last night at Transfer Solutions, as reported yesterday. Here's how:

Tuesday Dec 15, 2015

Oracle JET at Transfer Solutions

I did an overview this evening of Oracle JET, at Oracle partner Transfer Solutions in Leerdam, the Netherlands.

Staff from Transfer Solutions attended, as well as developers and consultants from several other organizations. 

I did several demos, all using NetBeans IDE 8.1, while showing off all the cool NetBeans features for Require, Knockout, and JET, as well as the NetBeans Connector plugin for Chrome. My approach, I've done this kind of overview a few times now, is to first demonstrate Require, then demonstrate Knockout, then demonstrate responsive JavaScript... and only then demonstrate JET itself. In this way, the key pieces are introduced, enabling the point to be made that JET is a very thin layer of JavaScript components, and a few other handy techniques and solutions, on top of a set of well established open source libraries. I also spent a lot of time going through all of the many resources, examples, cookbook snippets, etc etc etc, offered by the Oracle JET website.

Speaking to attendees during and after the session—who had never seen Oracle JET in action before—what's especially appreciated about Oracle JET is that it is based on existing solutions, rather than re-inventing the wheel, as well as the nice architecture/structure that Oracle JET gives you out of the box. A true enterprise solution in the JavaScript jungle. 

Here's the slides:

And... good news. Transfer Solutions is offering a course on Oracle JET. The first course offered on Oracle JET, in the world, I believe:

(I blocked out the discount code above, since it's only for those who attended the session!) 

It was a good evening, hoping to be there again soon, as well as anywhere else where there's interest in this new JavaScript toolkit.


Geertjan Wielenga (@geertjanw) is a Principal Product Manager in the Oracle Developer Tools group living & working in Amsterdam. He is a Java technology enthusiast, evangelist, trainer, speaker, and writer. He blogs here daily.

The focus of this blog is mostly on NetBeans (a development tool primarily for Java programmers), with an occasional reference to NetBeans, and sometimes diverging to topics relating to NetBeans. And then there are days when NetBeans is mentioned, just for a change.


« February 2016