MQTT.fx 1.3.0 is released!

MQTTfx_icon_256

Here’s the latest MQTT.fx release: MQTT.fx 1.3.0!
I continued to spend some effort on stability and performance along with some UI additions.

As always you can download latest binaries/installers at mqttfx.org.

Please Report bugs and feature requests  via the issue tracker.

Release Notes

  • [New] Settings: Option to set buffer sizes (per topic & received messages)
  • [New] Settings: Option to set max characters of logging output console and scripting output console
  • [New] Settings: Support for dark,light and custom themes
  • [New] Bundled with JRE 1.8.0_112
  • [Fixed] memory leak in logging output console and scripting output console
  • [Fixed] Issue: autoscroll enable/disable

Performance and memory saving improvements

You can now set the size (max. characters) for the scripting output console as well as for the logging output:
mqttfx130_max_characters

And you can now set the buffer sizes for received messages and the messages history per topic:
mqttfx130_buffer_settings

Support for Color Themes

I have added an option to change the color theme of MQTT.fx.
The choice is: Light, Dark (experimental) and Custom:

mqttfx130_light_theme

mqttfx130_dark_theme

mqttfx130_custom_theme

You can start a new custom theme by choosing “Create custom CSS template” which will create a (light) color theme css template. You will be prompted with a dialog showing the actual location of the created template. A click on “Edit” opens the selected CSS file in your preferred Editor.

FontAwesomeFX 8.13 released

Just released FontAwesomeFX 8.13 to Bintray.

Revisited and updated Icon Fonts:

Font Version What's new?
FontAwesome 4.7.0 7 new icons (many thanks to Steffen for his pull-request)
525Icons 3.0 Font updated on 30-10-2016
Material Design Font 1.7.22 73 new icons
FontAwesomeFX 8.13
compile 'de.jensd:fontawesomefx-fontawesome:4.7.0'
compile 'de.jensd:fontawesomefx-icons525:3.0.0'
compile 'de.jensd:fontawesomefx-materialdesignfont:1.7.22'
compile 'de.jensd:fontawesomefx-materialicons:2.2.0-1'
compile 'de.jensd:fontawesomefx-octicons:4.3.0-1'
compile 'de.jensd:fontawesomefx-weathericons:2.0.10-1'
they all depend on:
compile 'de.jensd:fontawesomefx-commons:8.13'
optional:
compile 'de.jensd:fontawesomefx-controls:8.13'
Demo apps
de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp
de.jensd.fx.glyphs.materialdesignicons.demo.MaterialDesignIconsDemoApp
de.jensd.fx.glyphs.materialicons.demo.MaterialIconsDemoApp
de.jensd.fx.glyphs.octicons.demo.OctIconsDemoApp
de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp
de.jensd.fx.glyphs.icons525.demo.Icons525DemoApp

You can find the FontAwesomeFX bintray package here.

Source code available at Bitbucket

Please report issues here

fafx813

MQTT.fx 1.2.0 is here!

It’s time for the next MQTT.fx release: MQTT.fx 1.2.0!
Most of the changes are under the hood, but in fact there also some new usability improvements.

MQTTfx_icon_256

As always you can download latest binaries/installers at mqttfx.org.

Please Report bugs and feature requests  via the issue tracker.

Release Notes

  • [New] Payload can now be decoded and exported in JSON format
  • [New] Topic of received messages can now be copied (and pasted)
  • [New] Eclipse Paho 1.1.0 included
  • [New] Bundled with JRE 1.8.0_102
  • [Fixed] Memory leak in terms of received and published messages
  • [Fixed] Issue when clearing the received messages buffer
  • [Fixed] Issue when last choosen import/export location is no longer valid

Display payload as JSON

Introcuding a new payload decoding option:
decodings

Publish unformatted JSON demo message:

publish_json

Display plain JSON message:

receive_json_plain

Display formatted JSON message:

receive_json_formatted

Speaking of decoding payload: next release is going to support custom payload decoder plugins!

Copy Topic

You now can copy (and paste) the topics of received messages:

copy_topic

Introducing fontawesomefx-examples project

Some people asked me about a FontAwesomeFX tutorial.
Now I started a new project: fontawesomefx-examples at GitHub!

basic_1

The examples will always reflect the latest version of FontAwesomeFX (currently 8.12 which can be loaded from Bintray) and I am going to extend it soon to show all stuff which provided by the lib.

FontAweseomFX 8.12 release informations

Introducing FontAwesomeFX Glyphs-Browser 1.0

I created a GlyphsBrowser application to browse all Icon Fonts provided by  FontAweseomFX 8.12:

fontawesomefx-glyphsbrowser-1.0

(Given Java 8 > update 40 is installed on you machine)

Download Run
OneJar java -jar fontawesomefx-glyphsbrowser-all-1.0.jar
Distribution ZIP bin/fontawesomefx-glyphsbrowser

You can find the code at GitHub.

Download FontAwesomeFX 8.12 from Bintray.

FontAweseomFX 8.12 release informations

FontAwesomeFX 8.12 is released!

Just released FontAwesomeFX 8.12 to Bintray.

Revisited and updated all Icon Fonts:

Font Version What's new?
FontAwesome 4.6.3 7 new icons
Material Icons 2.2.0 81 new icons
Material Design Font 1.6.50 193 new icons
Octicons 4.3.0 Icons refined (cleanup/22 icons removed)
525Icons 2.6.0 Font updated on 24-06-2016
FontAwesomeFX 8.12
compile 'de.jensd:fontawesomefx-fontawesome:4.6.3'
compile 'de.jensd:fontawesomefx-materialdesignfont:1.6.50'
compile 'de.jensd:fontawesomefx-materialicons:2.2.0'
compile 'de.jensd:fontawesomefx-octicons:4.3.0'
compile 'de.jensd:fontawesomefx-icons525:2.6.0'
compile 'de.jensd:fontawesomefx-weathericons:2.0-3'
They all depend on
compile 'de.jensd:fontawesomefx-commons:8.12'
Optional
compile 'de.jensd:fontawesomefx-controls:8.12'
Demo apps
de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp
de.jensd.fx.glyphs.materialdesignicons.demo.MaterialDesignIconsDemoApp
de.jensd.fx.glyphs.materialicons.demo.MaterialIconsDemoApp
de.jensd.fx.glyphs.octicons.demo.OctIconsDemoApp
de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp
de.jensd.fx.glyphs.icons525.demo.Icons525DemoApp

fafx812

Here you can find the FontAwesomeFX bintray package.

Source code available at Bitbucket

Please report issues here

Docker Beta on OSX with NetBeans 8.2 workaround

The next release of NetBeans (8.2) has a cool new build-in support for Docker.

Get latest NetBeans development build here.

nb_dev
docker_beta

But since I switched to native Docker integration on my Mac the connection broke as now Docker communicates via socket instead of docker-machine URL:

unix:///var/tmp/docker.sock

NetBeans would like to get a valid http or https URL, thus this URI scheme is currently not supported:

nb_docker1

But with help of socat (e.g. via brew install socat) you can create a TCP port (e.g. 9090) listening on localhost attached to the Docker socket to establish a bidirectional connection:

socat tcp-listen:9090,fork UNIX:///var/run/docker.sock

socat

Now we are talking

nb_docker2

nb_docker3

nb_docker4

nb_docker5

nb_docker6

Links

http://wiki.netbeans.org/Docker

https://blogs.oracle.com/geertjan/entry/docker_hub_in_netbeans_ide

http://bits.netbeans.org/download/trunk/nightly/latest/

http://www.dest-unreach.org/socat/

dockerw – A simple Docker command wrapper for the rest of us

help

I am regularly working on Docker images and have to play with different settings. Thus I periodically find myself in the “build, run, clean-up, change something, re-build, run, …” rat race.

dockerw is a little tool for working with Docker images and containers. And it aims to help you (and me ;-)) to build and (locally) run Docker images while it hides all the command line pain.

Note: dockerw targets only ‘latest’ tagged images (does not impact /touch implicit tagged images)!

Usage

./dockerw [ build | run | stop | clean | status | env | help ]

Targets

Command Description
build builds the Docker image
run runs a Docker container in foreground based on the image
stop stops all running container based on the image and removes them
clean stop and then removes ALL (latest) images/artifacts<
status shows the status if the Docker image
env list current environment variables
help display help

“build”
build1[…]
build2

“run”
run

“clean”
clean

Installation

  1. Clone dockerw from GitHub.
  2. Create a dockerw directory ahead your Docker working dir and copy the dockerw.sh script to that location.
  3. Copy/create a script named “dockerw"located into the working directory of a your Docker image.

If you are using default values only: the dockerw script just calls the dockerw.sh:

#!/bin/bash
# call dockerw.sh, passing arguments and using env variables
. ../dockerw/dockerw.sh

You can overule the default environment like this:

#!/bin/bash
# env
BASE_NAME="my_container_context"
CONTAINER_NAME="my_container"
DOCKER_RUN_ARGS="-ti -p 1883:1883 -p 8883:8883"

# call dockerw.sh, passing arguments and using env variables
. ../dockerw/dockerw.sh

tree

Conventions

The CONTAINER_NAME is the parent working directory base name.
The default base name (BASE_NAME_DEFAULT) and default docker run arguments (DOCKER_RUN_ARGS_DEFAULT) can be changed in dockerw/dockerw.sh.
The image name (IMAGE_NAME) is build like this: BASE_NAME_DEFAULT/CONTAINER_NAME (e.g. jerady/ubuntu).

Environment Variables

the name of the docker image”${`BASE_NAME`}/${`CONTAINER_NAME`}”jerady/mosquitto

Name Description Default Example
BASE_NAME the base name of the Docker container jerady jerady
CONTAINER_NAME the name of the Docker container $(`basename 'pwd'`) mosquitto
IMAGE_NAME the name of the Docker image ${BASE_NAME}/${CONTAINER_NAME} jerady/mosquitto
DOCKER_RUN_ARGS the arguments to run the container -ti -ti
DOCKER_RUN the docker run command to be called by ./dockerw run docker run ${DOCKER_RUN_ARGS} --name ${CONTAINER_NAME} ${IMAGE_NAME} docker run -ti --name mosquitto jerady/mosquitto

I added two example Docker images/projects to show how the custom dockerw script can be implemented, e.g. this simple script for mosquitto:

#!/bin/bash

# env variables
DOCKER_RUN_ARGS="-ti -p 1883:1883 -p 8883:8883"

. ../dockerw/dockerw.sh

leads to these implicit values:
env

GitHub

dockerw project on GitHub

 

FontAwesomeFX 8.11 is here!

Just uploaded FontAwesomeFX 8.11 to Bintray.

Now included:
FontAweseme 4.6.1 with 23 additional icons

and a new kid on the block:

525icons

525icons Font coming with (…surprise!) 525 icons on board.
Due to naming conventions and restrictions 525icons related stuff is called “icons525” in FontAwesomeFX, e.g. de.jensd.fx.glyphs.icons525.Icons525.

FontAwesomeFX 8.11

compile ‘de.jensd:fontawesomefx-fontawesome:4.6.1-2’
compile ‘de.jensd:fontawesomefx-materialdesignfont:1.4.57-2’
compile ‘de.jensd:fontawesomefx-materialicons:2.1-2’
compile ‘de.jensd:fontawesomefx-octicons:3.3.0-2’
compile ‘de.jensd:fontawesomefx-weathericons:2.0-2’
compile ‘de.jensd:fontawesomefx-icons525:2.0-2’

They all depend on

compile ‘de.jensd:fontawesomefx-commons:8.11’

Optional

compile ‘de.jensd:fontawesomefx-controls:8.11’

Demo apps

Did you know there is a little test app included in each font artifact?

de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp
de.jensd.fx.glyphs.materialdesignicons.demo.MaterialDesignIconsDemoApp
de.jensd.fx.glyphs.materialicons.demo.MaterialIconsDemoApp
de.jensd.fx.glyphs.octicons.demo.OctIconsDemoApp
de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp
de.jensd.fx.glyphs.icons525.demo.Icons525DemoApp

525icons2

Here you can find the bintray package.

Sources are here at Bitbucket

Report issues here

Button of Choice: Use ToggleButtons as RadioButtons

For MQTT.fx I wanted to use ToggleButtons to e.g. choose the de
coding of a MQTT Message or the QoS Level:

decode

qos

 

I found out that in context of a ToggleGroup ToggleButtons behave different than RadioButtons in terms of selection/deselection: unlike RadioButtons ToggleButtons can still be set to unselected state.

 

A RadioButton extends ToggleButton and overrides fire() (which is invoked when a user gesture indicates that an event for this ButtonBase should occur aka “Button was clicked”):
RadioButton:

@Override public void fire() {
  // we don't toggle from selected to not selected if part of a group
  if (getToggleGroup() == null || !isSelected()) {
    super.fire();
  }
}

ToggleButton:

@Override public void fire() {
  setSelected(!isSelected());
  fireEvent(new ActionEvent());
}

In a ToogleGroup ToggleButtons should behave like RadioButtons, so IMHO this is a bug worth a pull request for ToggleButton 😉

One way to handle this is for sure to create a custom extension of ToggleButton implementing fire() in respect to the RadioButton.
But I like more to add behavior to existing controls.
This is my tweak to modify default behavior by adding filters to all ToogleButtons of a ToggleGroup consuming unwanted MouseEvents:

public class JavaFXUtil {

    private static JavaFXUtil me;

    private JavaFXUtil() {
    }

    public static JavaFXUtil get() {
        if (me == null) {
            me = new JavaFXUtil();
        }
        return me;
    }

    public EventHandler<MouseEvent> consumeMouseEventfilter = (MouseEvent mouseEvent) -> {
        if (((Toggle) mouseEvent.getSource()).isSelected()) {
            mouseEvent.consume();
        }
    };

    public void addAlwaysOneSelectedSupport(final ToggleGroup toggleGroup) {
        toggleGroup.getToggles().addListener((Change<? extends Toggle> c) -> {
            while (c.next()) {
                for (final Toggle addedToggle : c.getAddedSubList()) {
                    addConsumeMouseEventfilter(addedToggle);
                }
            }
        });
        toggleGroup.getToggles().forEach(t -> {
            addConsumeMouseEventfilter(t);
        });
    }

    private void addConsumeMouseEventfilter(Toggle toggle) {
        ((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_PRESSED, consumeMouseEventfilter);
        ((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_RELEASED, consumeMouseEventfilter);
        ((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_CLICKED, consumeMouseEventfilter);
    }

}
public class ButtonDemoController {
    @FXML
    private ToggleGroup g2;

    @FXML
    private ToggleGroup g3;

    public void initialize() {
        JavaFXUtil.get().addAlwaysOneSelectedSupport(g2);
        JavaFXUtil.get().addAlwaysOneSelectedSupport(g3);
    }

}

buttonofchoice

Example code at GitHub.