<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PragmaticCoding</title><link>http://localhost:1313/</link><description>Recent content on PragmaticCoding</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>nuno@n9o.xyz (Blowfish)</managingEditor><webMaster>nuno@n9o.xyz (Blowfish)</webMaster><copyright>© 2026 Blowfish</copyright><lastBuildDate>Wed, 04 Nov 2026 12:00:00 -0500</lastBuildDate><atom:link href="http://localhost:1313/index.xml" rel="self" type="application/rss+xml"/><item><title>Whole Home Audio With SnapCast - Part I</title><link>http://localhost:1313/homelab/snapcast/part0/</link><pubDate>Wed, 20 May 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/snapcast/part0/</guid><description>A way to stream audio around your entire house using inexpensive RaspberryPi computers and SnapCast</description></item><item><title>Reactive Programming in JavaFX</title><link>http://localhost:1313/javafx/techniques/reactive-javafx/</link><pubDate>Wed, 16 Jul 2025 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/reactive-javafx/</guid><description>What is Reactive programming, and how does it work in JavaFX</description></item><item><title>Should You Use FXML?</title><link>http://localhost:1313/javafx/techniques/nofxml/fxml-or-not/</link><pubDate>Mon, 10 Mar 2025 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/nofxml/fxml-or-not/</guid><description>FXML. There are all kinds of claims about its value, but are they right?</description></item><item><title>Observable Lists - The Basics</title><link>http://localhost:1313/javafx/elements/observable-lists-basics/</link><pubDate>Tue, 12 Nov 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/observable-lists-basics/</guid><description>ObservableLists are used in a number of JavaFX elements, such as TableView, ListView and ComboBox. But what are they, and what can you do with them?</description></item><item><title>An Introduction to Properties</title><link>http://localhost:1313/javafx/elements/beginners-properties/</link><pubDate>Sun, 29 Sep 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/beginners-properties/</guid><description>If you are a beginner with JavaFX and are wondering, &amp;ldquo;What are all these &lt;code&gt;Property&lt;/code&gt; things anyway?&amp;rdquo;, then this is the article for you. Besides the &lt;code&gt;Properties&lt;/code&gt; themselves, we also cover the basics of using them with &lt;code&gt;Bindings&lt;/code&gt; and &lt;code&gt;Listeners&lt;/code&gt;. Read this article and you should have a good idea how to start out with JavaFX &lt;code&gt;Properties&lt;/code&gt;.</description></item><item><title>Guide To the Observable Classes - Part I</title><link>http://localhost:1313/javafx/elements/observables/properties/observable-classes/observable-classes-generics/</link><pubDate>Sat, 03 Aug 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/observables/properties/observable-classes/observable-classes-generics/</guid><description>&lt;p&gt;The place to start looking at the &lt;code&gt;Observable&lt;/code&gt; types is with the generic classes and interfaces. These are the observable wrappers that you can use around any other class of object.&lt;/p&gt;&#10;&lt;p&gt;More importantly, the hierarchy here is &lt;em&gt;exactly&lt;/em&gt; the same as the hierarchy that is used for all of the typed observables. If you can understand how generic observable classes and interfaces relate to each other, without worrying about what kind of data is inside them, and special classes added to handle those types, then you&amp;rsquo;ll automatically be able to understand how they work when they are typed.&lt;/p&gt;&#10;</description></item><item><title>EventHandlers, Listeners and Bindings - What to Use Where</title><link>http://localhost:1313/javafx/elements/events_and_listeners/</link><pubDate>Mon, 01 Apr 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/events_and_listeners/</guid><description>Taking a look at how EventHandlers, Listeners, Subscriptions and Bindings are different, and how they should be used in a JavaFX application.</description></item><item><title>EventHandlers, Listeners and Bindings - What to Use Where</title><link>http://localhost:1313/javafx/elements/events_and_listeners/</link><pubDate>Mon, 01 Apr 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/events_and_listeners/</guid><description>Taking a look at how EventHandlers, Listeners, Subscriptions and Bindings are different, and how they should be used in a JavaFX application.</description></item><item><title>Use Subscriptions Instead of Listeners</title><link>http://localhost:1313/javafx/elements/subscribe_and_map/</link><pubDate>Sun, 18 Feb 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/subscribe_and_map/</guid><description>In JavaFX 19 and 21, new methods have been added to the Observables library that should change the way you write Bindings and Listeners</description></item><item><title>Understanding ListView</title><link>http://localhost:1313/javafx/elements/nodes/tableview-listview/listview-basics/</link><pubDate>Sun, 19 Nov 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/tableview-listview/listview-basics/</guid><description>An introduction to ListView and understanding how to use it to display something more than just lists of Strings.</description></item><item><title>Layout Classes 101</title><link>http://localhost:1313/javafx/elements/layout_classes/</link><pubDate>Fri, 06 Jan 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/layout_classes/</guid><description>&lt;p&gt;In order to put anything onto the GUI you&amp;rsquo;ll need to use one of the layout &lt;code&gt;Nodes&lt;/code&gt; to control how the screen is organized. There are a variety of different layout classes, each of which handles the organization of its content differently.&lt;/p&gt;&#10;&lt;p&gt;This article gives you a summary of how each different layout class works, and explains how each one differs from the others.&lt;/p&gt;&#10;</description></item><item><title>Getting Started With Styling in JavaFX Using CSS</title><link>http://localhost:1313/javafx/elements/stylesheets/intro/</link><pubDate>Thu, 12 May 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/stylesheets/intro/</guid><description>This article contains all of the information you need to get started with cascading stylesheets in JavaFX.</description></item><item><title>Everything You Really Need to Know About the FXAT</title><link>http://localhost:1313/javafx/elements/fxat/introduction/</link><pubDate>Sat, 09 Apr 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/fxat/introduction/</guid><description>&amp;ldquo;Hey, you jobs! Get off my FXAT!&amp;rdquo; Learn how to deal with the JavaFX Application Thread - How to get your background jobs onto their own threads the right way, and how process the results back on the FXAT.</description></item><item><title>All About Image and ImageView</title><link>http://localhost:1313/javafx/elements/buttons/</link><pubDate>Fri, 11 Mar 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/buttons/</guid><description>The basic component of image display in JavaFX is the &lt;code&gt;ImageView&lt;/code&gt;. In this article, we&amp;rsquo;ll look at how to use &lt;code&gt;ImageView&lt;/code&gt; to display images in your GUI and how to incorporate them your components.</description></item><item><title>TextFields and TextFormatter - Part 1</title><link>http://localhost:1313/javafx/elements/nodes/textformatter/part-1/</link><pubDate>Tue, 11 May 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/textformatter/part-1/</guid><description>An introduction to &lt;code&gt;TextFormatter&lt;/code&gt;, showing you how to integrate it into a &lt;code&gt;TextField&lt;/code&gt; and how to use it to convert the input from &lt;code&gt;String&lt;/code&gt; to some other kind of value. Then we&amp;rsquo;ll look at how to add a filter to prevent the user from entering invalid data.</description></item><item><title>Part 1 - A Quick Start</title><link>http://localhost:1313/beginners/part1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part1/</guid><description>The very first step. What else? &amp;ldquo;Hello World&amp;rdquo; in JavaFX.</description></item><item><title>Whole Home Audio With SnapCast - Part II</title><link>http://localhost:1313/homelab/snapcast/part1/</link><pubDate>Sun, 21 Jun 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/snapcast/part1/</guid><description>Part 2 of a 3 part series describing how to set up whole-home audio using SnapCast, Mopidy and Rasberry Pi&amp;rsquo;s. In this article, we look at how to configure a Raspberry Pi Zero as a SnapCast client.</description></item><item><title>Dealing With Modena</title><link>http://localhost:1313/javafx/elements/modena/</link><pubDate>Wed, 20 Nov 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/modena/</guid><description>If you are going to do any custom styling in JavaFX, you need to understand at least the basics about the Modena stylesheet and how it works with the standard JavaFX Nodes.</description></item><item><title>Guide To the Observable Classes - Part II</title><link>http://localhost:1313/javafx/elements/observables/properties/observable-classes/observable-classes-typed/</link><pubDate>Thu, 22 Aug 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/observables/properties/observable-classes/observable-classes-typed/</guid><description>&lt;p&gt;This article is about the all of the typed observable classes and interfaces except the ones concerned with &lt;code&gt;List&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;You&amp;rsquo;ll find that all of the relationships and structure found in the generic classes is just about exactly the same, but then there are a few extra classes and interfaces added to the hierarchy depending on the type of data that they hold. We&amp;rsquo;ll concentrate mostly on two types, &lt;code&gt;String&lt;/code&gt; and &lt;code&gt;Integer&lt;/code&gt; here, because dealing with the others would just be redundant. &lt;code&gt;String&lt;/code&gt; is typical of stand-alone types, and &lt;code&gt;Integer&lt;/code&gt; is typical of types that are included in &lt;code&gt;Number&lt;/code&gt;.&lt;/p&gt;&#10;</description></item><item><title>Tracking Task Progress</title><link>http://localhost:1313/javafx/elements/fxat/task-progress/</link><pubDate>Thu, 20 Jun 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/fxat/task-progress/</guid><description>A deeper look at the Task class and how to monitor progress while a Task in running on a background thread.</description></item><item><title>Using ListView Cell Layouts</title><link>http://localhost:1313/javafx/elements/nodes/tableview-listview/listview-layouts/</link><pubDate>Mon, 18 Mar 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/tableview-listview/listview-layouts/</guid><description>Looking at ListView as a scrolling region of customized layouts, not just a list of String.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://localhost:1313/javafx/elements/nodes/tableview-listview/listview-layouts/featureImage.png"/></item><item><title>JavaFX: How to Customize Custom Controls</title><link>http://localhost:1313/javafx/techniques/custom_controls/customizing/</link><pubDate>Wed, 15 Mar 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/custom_controls/customizing/</guid><description>Once you&amp;rsquo;ve decided extend Region to create a custom control, there are some basic things you should do to make your new control look professional and unified. Here&amp;rsquo;s how to do that.</description></item><item><title>FXML is NOT Model-View-Controller</title><link>http://localhost:1313/javafx/techniques/nofxml/fxml_isnt_mvc/</link><pubDate>Mon, 20 Feb 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/nofxml/fxml_isnt_mvc/</guid><description>Lots of programmers and websites think that FXML instantly gives them a step up on Model-View-Controller, with the FXML File yielding the View and the FXML Controller acting as the Controller. We&amp;rsquo;ll look at why this isn&amp;rsquo;t correct, and how you should implement FXML in the context of MVC.</description></item><item><title>Understanding the JavaFX Bindings Class</title><link>http://localhost:1313/javafx/elements/bindings/bindings_class/</link><pubDate>Wed, 08 Feb 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/bindings/bindings_class/</guid><description>The Bindings class is a utility library that provides a huge number of helper methods that can create and manipulate Bindings. Understanding how to use this library can make your code much simpler and easier to read.</description></item><item><title>Sprites and Scrolling Images</title><link>http://localhost:1313/javafx/elements/nodes/images/sprites/</link><pubDate>Sun, 10 Apr 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/images/sprites/</guid><description>How to handle image animation with Sprites and scrolling backgrounds</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://localhost:1313/javafx/elements/nodes/images/sprites/featureImage.jpg"/></item><item><title>All About Buttons</title><link>http://localhost:1313/javafx/elements/buttons/</link><pubDate>Mon, 03 Jan 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/buttons/</guid><description>Buttons are the basic component that triggering actions in your applications. While there is just one basic &lt;code&gt;Button&lt;/code&gt; class, it can be styled and configured in a multitude of ways that make it look and behave quite differently to suit a variety of uses.</description></item><item><title>All About Events</title><link>http://localhost:1313/javafx/elements/events/</link><pubDate>Mon, 03 Jan 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/events/</guid><description>Everything you need to know about Events.</description></item><item><title>TextFields and TextFormatter - Part 2</title><link>http://localhost:1313/javafx/elements/nodes/textformatter/part-2/</link><pubDate>Tue, 11 May 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/textformatter/part-2/</guid><description>A more in-depth look into how to build a &lt;code&gt;TextFormatter&lt;/code&gt; that can be used to turn a &lt;code&gt;TextField&lt;/code&gt; into sophisticated input field. We&amp;rsquo;ll look at designing a &lt;code&gt;TextFormatter&lt;/code&gt; that is tailored to handle fixed place decimal input, using the decimal point itself as a control to toggle between the ordinal and mantissa of the number.</description></item><item><title>Part 2 - Configuring Layouts</title><link>http://localhost:1313/beginners/part2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part2/</guid><description>Some basics about building layouts and making your screens look the way you want.</description></item><item><title>Whole Home Audio With SnapCast - Part III</title><link>http://localhost:1313/homelab/snapcast/part3/</link><pubDate>Mon, 22 Jun 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/snapcast/part3/</guid><description>The final installment of a 3 part series describing how to set up whole-home audio using SnapCast, Mopidy and Rasberry Pi&amp;rsquo;s. In this article, we look at how to install and configure Mopidy as a streaming service, and how to connect it to a SnapCast server.</description></item><item><title>ObservableLists: Extractors</title><link>http://localhost:1313/javafx/elements/observable-lists/extractors/</link><pubDate>Tue, 05 Aug 2025 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/observable-lists/extractors/</guid><description>ObservableList extractors allow you to track changes to elements inside your ObservableLists.</description></item><item><title>Task Partial Results: Lists</title><link>http://localhost:1313/javafx/elements/fxat/task-list-progress/</link><pubDate>Wed, 02 Jul 2025 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/fxat/task-list-progress/</guid><description>What if you want to monitor the progress of a Task that is collecting data into a List? This article shows an approach to handling accumulated data in on ObserableList while a Task is running while still playing nicely with the FXAT.</description></item><item><title>Understanding the ComboBox</title><link>http://localhost:1313/javafx/elements/comboboxes/</link><pubDate>Fri, 30 Aug 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/comboboxes/</guid><description>The &lt;code&gt;ComboBox&lt;/code&gt; is the classic &amp;ldquo;choose from a list&amp;rdquo; screen widget that you see everywhere. In JavaFX, the &lt;code&gt;ComboBox&lt;/code&gt; is a fairly complex structure that involves a &lt;code&gt;TextBox&lt;/code&gt; and a &lt;code&gt;ListView&lt;/code&gt; tied together. In this article you&amp;rsquo;ll learn how to configure the &lt;code&gt;ComboBox&lt;/code&gt; to fit a variety of uses.</description></item><item><title>Guide To the Observable Classes - Part III</title><link>http://localhost:1313/javafx/elements/observables/properties/observable-classes/observable-classes-lists/</link><pubDate>Wed, 28 Aug 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/observables/properties/observable-classes/observable-classes-lists/</guid><description>&lt;p&gt;You can work with a JavaFX for a long time before you realize that &lt;code&gt;ListProperty&lt;/code&gt; is even a thing. And when you do, you&amp;rsquo;ll probably be extremely confused by it.&lt;/p&gt;&#10;&lt;p&gt;That&amp;rsquo;s because &lt;code&gt;ListProperty&lt;/code&gt; (and all of the other types that descend from &lt;code&gt;ObservableValue&amp;lt;List&amp;gt;&lt;/code&gt;) implements all of the methods of &lt;code&gt;ObservableList&lt;/code&gt; as well as everything implied by &lt;code&gt;ObservableValue&lt;/code&gt; and its descendants. This is a little mind boggling, because &lt;code&gt;ObservableList&amp;lt;T&amp;gt;&lt;/code&gt; is generic itself, and implements everything in &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt;, and this means that &lt;code&gt;ListProperty&amp;lt;T&amp;gt;&lt;/code&gt; does everything that &lt;code&gt;Property&amp;lt;T&amp;gt;&lt;/code&gt; does, as well as everything that &lt;code&gt;ObservableList&amp;lt;T&amp;gt;&lt;/code&gt; and, therefore, &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt; does.&lt;/p&gt;&#10;&lt;p&gt;But don&amp;rsquo;t worry, read this and it will all make sense - and actually be really useful.&lt;/p&gt;&#10;</description></item><item><title>Non-Binary PseudoClasses</title><link>http://localhost:1313/javafx/elements/stylesheets/nonbinary-pseudoclass/</link><pubDate>Tue, 04 Jun 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/stylesheets/nonbinary-pseudoclass/</guid><description>What if you need to control the styling of a Node over a range of values? How can you do that, and is there any way create a framework that you can use over and over again?</description></item><item><title>TableView Basics</title><link>http://localhost:1313/javafx/elements/tableview-basics/</link><pubDate>Tue, 10 Oct 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/tableview-basics/</guid><description>What is a TableView and how do you use it? Here&amp;rsquo;s enough information to get you started with TableView the right way.</description></item><item><title>Custom Binding Classes</title><link>http://localhost:1313/javafx/elements/custom_binding/</link><pubDate>Sat, 19 Mar 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/custom_binding/</guid><description>Custom binding classes aren&amp;rsquo;t used that often, but understanding them is the key to understanding how to use the Bindings library builder methods.</description></item><item><title>Observable Listeners in JavaFX</title><link>http://localhost:1313/javafx/elements/listeners/</link><pubDate>Tue, 01 Feb 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/listeners/</guid><description>ChangeListener or InvalidationListener, which is right kind of listener to use?</description></item><item><title>Demystifying PseudoClasses in JavaFX</title><link>http://localhost:1313/javafx/elements/pseudo_classes/</link><pubDate>Mon, 24 Jan 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/pseudo_classes/</guid><description>Pseudo Classes are the best way to handle on/off state changes in a Node in JavaFX. But it&amp;rsquo;s very badly explained in the JavaDocs and hard to understand. This article should clear that up.</description></item><item><title>How to Write a JavaFX Screen without FXML &amp; Scene Builder</title><link>http://localhost:1313/javafx/techniques/nofxml/layouts-without-fxml/</link><pubDate>Tue, 24 Aug 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/nofxml/layouts-without-fxml/</guid><description>I&amp;rsquo;ve always advised that Scene Builder and FXML are a waste of time, and that you should just write your screens in Java code.&lt;br&gt; It&amp;rsquo;s easier to build, it&amp;rsquo;s easier to customize, easier to maintain, and much, much easier to do really sophisticated things. But how do you start?</description></item><item><title>Part 3 - User Interaction</title><link>http://localhost:1313/beginners/part3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part3/</guid><description>GUI applications need a way for the user to interact with them. In this lesson we&amp;rsquo;ll show how to allow user input with TextField, and to launch an action with a Button.</description></item><item><title>Custom Styleable Properties</title><link>http://localhost:1313/javafx/elements/styleable-properties/</link><pubDate>Sun, 15 Dec 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/styleable-properties/</guid><description>With CSS you can control fonts, sizes, borders, alignment, padding an lots of other standard Properties of your layouts. This allows you to control the styling from outside your code. But what if there&amp;rsquo;s some aspect of your layout that isn&amp;rsquo;t available through the standard CSS attributes? This article will show you how to create StyleableProperties and then how to link them back to your Style Sheets via CssMetaData.</description></item><item><title>Handling TableView Cell Data</title><link>http://localhost:1313/javafx/elements/nodes/tableview/cell-data/</link><pubDate>Fri, 17 Nov 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/tableview/cell-data/</guid><description>In this article, we taka a look at how TableView handles data, the mechanism that move data in and out of TableCells, and how to work with it.</description></item><item><title>Part 4 - Styling</title><link>http://localhost:1313/beginners/part4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part4/</guid><description>JavaFX includes Cascading Style Sheets for styling the elements of your GUI. This is a quick guide about how to use them.</description></item><item><title>Converting FXML to Code</title><link>http://localhost:1313/javafx/techniques/nofxml/fxml-to-code/</link><pubDate>Tue, 22 Jul 2025 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/nofxml/fxml-to-code/</guid><description>I&amp;rsquo;ve talked a lot about how coded layouts are better than FXML. In this article we take a fairly large FXML based layout which is part of a larger project, convert it to code, and implement a framework using a Reactive design. Is the final result better than FXML? See for yourself.</description></item><item><title>Type Specific TableColumns</title><link>http://localhost:1313/javafx/elements/custom-table-columns/</link><pubDate>Tue, 10 Jun 2025 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/custom-table-columns/</guid><description>Generally, certain kinds of data need to be displayed in TableViews in certain, specific ways. This article will show you how to create custom TableColumns, along with matching custom TableCells, that you can use over and over in every application that you build.</description></item><item><title>Conditional Bindings</title><link>http://localhost:1313/javafx/elements/conditional-binding/</link><pubDate>Sat, 20 Jul 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/conditional-binding/</guid><description>A look at how to extend the idea of Bindings to include internal state to encapsulate the mechanics of more complicated relationships between ObservableValues in your GUI and your Model.</description></item><item><title>The Myth of the Lengthy GUI Task</title><link>http://localhost:1313/javafx/elements/fxat/lengthy-task/</link><pubDate>Sun, 15 Aug 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/fxat/lengthy-task/</guid><description>Is the Single-Threaded JavaFX GUI a Limitation?</description></item><item><title>Part 5 - Application Framework</title><link>http://localhost:1313/beginners/part5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part5/</guid><description>Building an application that &amp;ldquo;does something&amp;rdquo; means adopting a framework that works well with JavaFX. Here we build the skeleton of the Model-View-Controller-Interactor framework that we&amp;rsquo;re going to use for our CRUD application.</description></item><item><title>JavaFX Styling Guide: TableView</title><link>http://localhost:1313/javafx/elements/nodes/tableview/styling-guide/</link><pubDate>Sun, 08 Dec 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/tableview/styling-guide/</guid><description>A comprehensive guide to styling TableView with tutorials and a reference of all of the styling selectors available.</description></item><item><title>Part 6A - First Feature: Minimal Create</title><link>http://localhost:1313/beginners/part6a/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part6a/</guid><description>The first feature for our CRUD application has to be &amp;ldquo;Create&amp;rdquo;. In this lesson we&amp;rsquo;ll get started by designing the GUI and connecting it to the Controller.</description></item><item><title>Part 6B - Adding Persistence</title><link>http://localhost:1313/beginners/part6b/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part6b/</guid><description>In this lesson we finish up a &amp;ldquo;bare-bones&amp;rdquo; Create function by building the back-end and connecting it to the business logic in the Interactor. Part of this involves creating a simulated database.</description></item><item><title>Part 7 - What Next?</title><link>http://localhost:1313/beginners/part7/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part7/</guid><description>Now we&amp;rsquo;ve completed the core programming for our &amp;ldquo;Create&amp;rdquo; function, where do go next. We&amp;rsquo;ll look at the idea of a &amp;ldquo;Product Backlog&amp;rdquo;, and talk about how we should prioritize our next steps.</description></item><item><title>Part 8 - Dealing With Latency and Blocking</title><link>http://localhost:1313/beginners/part8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part8/</guid><description>Our simulated database doesn&amp;rsquo;t really do a good job standing in for a real database because it works too fast. We&amp;rsquo;ll slow it down and see what horrible things this does to our application. Then we&amp;rsquo;ll see how to deal with this.</description></item><item><title>Part 9 - GUI Validation</title><link>http://localhost:1313/beginners/part9/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part9/</guid><description>We&amp;rsquo;ve also got a big problem with our application because there&amp;rsquo;s no data validation in our screen. This means that users can save invalid customer data. We&amp;rsquo;ll look at how to cope with this properly.</description></item><item><title>Part 10 - Handling Database Errors</title><link>http://localhost:1313/beginners/part10/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part10/</guid><description>The last problem with our application is that it can save duplicate customer records, corrupting our database. This means adding some rules to our database and telling our GUI when those rules have been broken. We&amp;rsquo;ll see how to handle exceptions from the back-end in our application.</description></item><item><title>Part 11 - A "Working" Application</title><link>http://localhost:1313/beginners/part11/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part11/</guid><description>At this point we have a pretty clean &amp;ldquo;Create&amp;rdquo; application. It&amp;rsquo;s error resistant, doesn&amp;rsquo;t corrupt our database and ready to add some more functionality. Let&amp;rsquo;s look at what we&amp;rsquo;ve done so far.</description></item><item><title>Part 12 - Adding a New Field: eMail</title><link>http://localhost:1313/beginners/part12/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part12/</guid><description>It&amp;rsquo;s finally time to add a third field to our screen! In this article we&amp;rsquo;re going to add just a single new field, for email, to our screen. We&amp;rsquo;re going to see how the process goes from the View all the way down to the Broker. Most importantly, we going to see how we need to be vigilant in ensuring that our code stays clean as we add more features.</description></item><item><title>Part 13 - Feature Envy</title><link>http://localhost:1313/beginners/part13/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/beginners/part13/</guid><description>In this article we&amp;rsquo;re going to look at how Feature Envy has crept into our View code. We&amp;rsquo;re going to look at why this happens, and how to deal with it. Finally, we&amp;rsquo;re going to see how clearing out Feature Envy makes our code much cleaner and easier to understand.</description></item><item><title>Homelab Security and Firewalls</title><link>http://localhost:1313/homelab/security/</link><pubDate>Wed, 04 Nov 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/security/</guid><description>Understanding basic Internet security, and how your firewall works</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="http://localhost:1313/homelab/security/feature.png"/></item><item><title>A New Website</title><link>http://localhost:1313/blog/new-website/</link><pubDate>Sun, 01 Nov 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/blog/new-website/</guid><description>After 5 years with my old, blog-based, website it was time to transition to a new modern website design that integrates blogging with structured content. Here&amp;rsquo;s how things have changed.</description></item><item><title>You Need a Public Domain</title><link>http://localhost:1313/homelab/public-domain/</link><pubDate>Wed, 24 Jun 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/public-domain/</guid><description>If you are self-hosting, then you should probably have a public domain registered. In this article, we&amp;rsquo;ll look at why you should do this, and the things that it helps.</description></item><item><title>Managing DNS Services</title><link>http://localhost:1313/homelab/dns-concepts/</link><pubDate>Tue, 23 Jun 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/dns-concepts/</guid><description>Everything you need to know about DNS if you are self-hosting. How to use Technitium to host a private DNS server in your homelab.</description></item><item><title>Lenovo M910Q Tiny Homelab Server</title><link>http://localhost:1313/homelab/lonovo_tiny/</link><pubDate>Sat, 20 Jun 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/lonovo_tiny/</guid><description>A look at the Lenovo M910Q Tiny computers I&amp;rsquo;ve chosen as homelab servers.</description></item><item><title>VLAN's and Subnets For Home Networks</title><link>http://localhost:1313/homelab/vlans/</link><pubDate>Fri, 06 Feb 2026 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/homelab/vlans/</guid><description>How to secure your home network from threats from inside the house.</description></item><item><title>CSS Transitions</title><link>http://localhost:1313/javafx/elements/css-transitions/</link><pubDate>Tue, 08 Oct 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/css-transitions/</guid><description>JavaFX 23 delivers a new feature - CSS Transitions! Let&amp;rsquo;s take a look at how this works and what you can do with it.</description></item><item><title>JavaFX: Quick Guide to MVCI</title><link>http://localhost:1313/javafx/elements/mvci-quick/</link><pubDate>Thu, 01 Aug 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/mvci-quick/</guid><description>Looking for a framework that works with JavaFX as a Reactive platform? Here&amp;rsquo;s how to get started with Model-View-Controller-Interactor (MVCI) without a lot of theory.</description></item><item><title>Application Structure With MVCI</title><link>http://localhost:1313/javafx/techniques/mvci/applications/</link><pubDate>Sat, 25 May 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/mvci/applications/</guid><description>Understanding the Model-View-Controller-Interactor framework is one thing, but putting it all together to create a large and complicated application means that you&amp;rsquo;ll need to know how to integrate it with external services.</description></item><item><title>More Beginner Mistakes</title><link>http://localhost:1313/javafx/techniques/codingstyle/beginner-mistakes-2/2024-04-15-more-beginner-mistakes/</link><pubDate>Tue, 30 Apr 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/codingstyle/beginner-mistakes-2/2024-04-15-more-beginner-mistakes/</guid><description>&lt;h1 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;After literally a decade writing JavaFX applications, it can be hard to remember how I thought things were supposed to be done when I started out. Thankfully, there seems to be a nearly endless supply of beginners having trouble, posting their code and giving us a glimpse into their thought processes.&lt;/p&gt;</description></item><item><title>Getting Started with Gradle in Intellij Idea</title><link>http://localhost:1313/javafx/gradle-intellij/</link><pubDate>Mon, 22 Apr 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/gradle-intellij/</guid><description>A quick guide get started with Gradle in the Intellij IDEA IDE.</description></item><item><title>Action Properties</title><link>http://localhost:1313/javafx/action-properties/</link><pubDate>Mon, 15 Apr 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/action-properties/</guid><description>There a little known, but very useful function call in most Properties. This can be overridden to turn a Property into a class that transforms a value change into an action.</description></item><item><title>Common JavaFX Mistakes</title><link>http://localhost:1313/javafx/techniques/codingstyle/beginner-mistakes-1/</link><pubDate>Sun, 07 Apr 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/codingstyle/beginner-mistakes-1/</guid><description>Taking a look at a JavaFX application that suffers from some very common beginner mistakes, converting it to Kotlin and sorting out the issues.</description></item><item><title>Example: Hexadecimal Editor</title><link>http://localhost:1313/examples/hex-editor/</link><pubDate>Sat, 06 Apr 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/examples/hex-editor/</guid><description>Here&amp;rsquo;s a sample application that uses a ListView to display and edit bytes in a data file, showing the values in hex, octal, binary, decimal and as characters.</description></item><item><title>Creating a Custom Component: LabelledPane</title><link>http://localhost:1313/javafx/techniques/custom_controls/label_pane/</link><pubDate>Mon, 25 Mar 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/custom_controls/label_pane/</guid><description>Another example of creating a custom class. This time to build a container with a border and a Label that sits on the border.</description></item><item><title>Is There a Right or Wrong Way to Program Something?</title><link>http://localhost:1313/programming/right-wrong/</link><pubDate>Mon, 11 Mar 2024 00:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/right-wrong/</guid><description>Is there such a thing as a &amp;ldquo;Right&amp;rdquo; or &amp;ldquo;Wrong&amp;rdquo; when looking at different approaches to solving a programming problem? Can one approach be objectively better than another? Spoiler alert: yes, it can.</description></item><item><title>Custom Control: Radial Menu</title><link>http://localhost:1313/javafx/techniques/custom_controls/radial-menu/</link><pubDate>Mon, 04 Mar 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/custom_controls/radial-menu/</guid><description>How to build a radial menu in JavaFX. Maybe not the most useful idea itself, but building this custom component lets us take a look at some more complex layout challenges.</description></item><item><title>It's All About (Loose) Coupling</title><link>http://localhost:1313/programming/coupling/</link><pubDate>Fri, 09 Feb 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/coupling/</guid><description>&lt;h1 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;I think most programming taught in schools and courses concentrates on creating &lt;em&gt;working&lt;/em&gt; code. Beginning programmers are left with the impression that creating code that runs and gives the correct result is the &lt;em&gt;hard part&lt;/em&gt;; that this is somehow the end goal of software development.&lt;/p&gt;</description></item><item><title>Where Are My Resources?</title><link>http://localhost:1313/java/resources/</link><pubDate>Wed, 07 Feb 2024 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/java/resources/</guid><description>One of the toughest problems beginners encounter is resources that won&amp;rsquo;t load. Here&amp;rsquo;s how to figure out how to organize your resources and how find them with your code.</description></item><item><title>Reskinning ToggleButton</title><link>http://localhost:1313/javafx/techniques/toggle-button-reskin/</link><pubDate>Wed, 19 Jul 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/toggle-button-reskin/</guid><description>An introduction to JavaFX Skins and Skinnable and how to create your own skin.</description></item><item><title>When and How to Create Custom Controls</title><link>http://localhost:1313/javafx/techniques/custom_controls_when/</link><pubDate>Mon, 27 Feb 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/custom_controls_when/</guid><description>Creating a custom control really isn&amp;rsquo;t that hard to do. But when should you use one, and when should you just use a builder to create a layout?</description></item><item><title>JavaFX Custom Control - The Triple Toggle Switch</title><link>http://localhost:1313/javafx/techniques/tripletoggle/</link><pubDate>Thu, 16 Feb 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/tripletoggle/</guid><description>How to create custom control in JavaFX. Here we look at how to build a three position toggle switch.</description></item><item><title>Kotlin For JavaFX</title><link>http://localhost:1313/programming/kotlin/kotlin_for_javafx/</link><pubDate>Sat, 28 Jan 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/kotlin/kotlin_for_javafx/</guid><description>Interested in programming JavaFX in Kotlin? Here&amp;rsquo;s what you need to know to write JavaFX code that is so much better than anything you can write in Java.</description></item><item><title>Dealing With Dialogs</title><link>http://localhost:1313/javafx/elements/nodes/dialogs/</link><pubDate>Wed, 25 Jan 2023 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/elements/nodes/dialogs/</guid><description>Dialogs are the basic tools for interacting with the user in a controlled way as part of a procedural flow. They are best thought of as a way to collect and return information from the user.</description></item><item><title>Kotlin For Java Programmers</title><link>http://localhost:1313/programming/kotlin/kotlin_for_java_programmers/</link><pubDate>Mon, 19 Dec 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/kotlin/kotlin_for_java_programmers/</guid><description>Need to understand a Kotlin program, but you only know Java? This article should give you everything you need to know to get started.</description></item><item><title>An Introduction to Model-View-Controller-Interactor</title><link>http://localhost:1313/javafx/Mvci-Introduction/</link><pubDate>Mon, 07 Nov 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/Mvci-Introduction/</guid><description>An introduction to a framework that works better with JavaFX than MVC or MVVM.</description></item><item><title>Multi-MVCI Projects</title><link>http://localhost:1313/javafx/techniques/mvci/multimvci/</link><pubDate>Sun, 02 Oct 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/mvci/multimvci/</guid><description>How to set up a more complex project with multiple screens with varying levels of connectedness.</description></item><item><title>Unravelling MVC, MVP and MVVM</title><link>http://localhost:1313/javafx/techniques/mvci/other-frameworks/</link><pubDate>Tue, 30 Aug 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/mvci/other-frameworks/</guid><description>Taking a look at the three most common design patterns for building systems with user interfaces. How are they different? Which one is best? Is there anything better?</description></item><item><title>Introducing the Absolute Beginners Guide to JavaFX</title><link>http://localhost:1313/javafx/beginners/2022-07-05-introducing_beginners/</link><pubDate>Tue, 05 Jul 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/beginners/2022-07-05-introducing_beginners/</guid><description>&lt;h1 class="relative group"&gt;Why?&#10; &lt;div id="why" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Most of the tutorial articles I&amp;rsquo;ve written here have been of the &amp;ldquo;deep dive&amp;rdquo; nature. I try to go way beyond the information available in the JavaDocs, and to give some insight into how to get the most out of the tools that JavaFX provides. These articles tend to be on the long side, Jekyll tells me that they average about 13 minutes of reading, and there&amp;rsquo;s usually lots of code examples and pontification about clean coding and on and on.&lt;/p&gt;</description></item><item><title>How to Swap Scenes Properly</title><link>http://localhost:1313/javafx/techniques/swap-scenes/</link><pubDate>Tue, 24 May 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/swap-scenes/</guid><description>Taking a look at the three most common design patterns for building systems with user interfaces. How are they different? which one is best? Is there anything better?</description></item><item><title>Building Views - The "Set It and Forget It" Approach</title><link>http://localhost:1313/javafx/techniques/setitforgetit/</link><pubDate>Mon, 14 Mar 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/setitforgetit/</guid><description>The best way to structure an application is to separate the presentation of your data from the logic of your application. That can be hard to do. But not if you take an approach where you configure your screen elements, put them in the layout and then discard any reference to them.</description></item><item><title>How To Build a Hex Map Based Application</title><link>http://localhost:1313/javafx/projects/2022-02-09-hexmap/</link><pubDate>Sun, 06 Feb 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/projects/2022-02-09-hexmap/</guid><description>&lt;h1 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Hex Maps, or hex boards are a popular platform for tabletop games, especially wargames and Role Playing Games. They are uniquely useful because hexagons fit nicely into a grid and there are 6 directions from each hexagon (or just, &amp;ldquo;hex&amp;rdquo;), compared to just 4 with a grid made up of squares.&lt;/p&gt;</description></item><item><title>How to Build a JavaFX Application That Does Something</title><link>http://localhost:1313/javafx/projects/weatherfx/</link><pubDate>Sun, 06 Feb 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/projects/weatherfx/</guid><description>Maybe you&amp;rsquo;ve figured out how to build a working GUI that looks good. Now, how do you connect it to the rest of the world and make it do something?</description></item><item><title>Optional Isn't About Avoiding Null</title><link>http://localhost:1313/java/optional/</link><pubDate>Sun, 06 Feb 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/java/optional/</guid><description>A look at how Optional works, and how it isn&amp;rsquo;t really about Null values - at least not if you were doing it right before Optional.</description></item><item><title>Wordle in Kotlin JavaFX</title><link>http://localhost:1313/javafx/projects/wordlefx/</link><pubDate>Sat, 29 Jan 2022 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/projects/wordlefx/</guid><description>The original Wordle is JavaScript in a browser, here&amp;rsquo;s an implementation of it in Reactive JavaFX written in Kotlin.</description></item><item><title>What's the Point of Agile?</title><link>http://localhost:1313/programming/agile/</link><pubDate>Fri, 17 Dec 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/agile/</guid><description>Stand-ups, Retrospectives, Sprints, Scrum Masters. Is it just bureaucratic nonsense that gets in the way of good programmers doing their thing? It shouldn&amp;rsquo;t be.</description></item><item><title>Kotlin - Should You?</title><link>http://localhost:1313/programming/kotlin/kotlin-should-you/</link><pubDate>Sat, 11 Dec 2021 10:33:44 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/kotlin/kotlin-should-you/</guid><description>Kotlin has been described as, &amp;ldquo;The language that Java would have been if it had been designed 25 years later&amp;rdquo;. It&amp;rsquo;s starting to pick up popularity, and has had a boost from being endorsed by Google for Android development.&lt;br&gt;&lt;br&gt;But you&amp;rsquo;re not an Android developer, so should you learn, and use, Kotlin?</description></item><item><title>Kotlin: JavaFX Properties</title><link>http://localhost:1313/programming/kotlin/kotlin_properties/</link><pubDate>Tue, 24 Aug 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/kotlin/kotlin_properties/</guid><description>An approach to implementing the JavaFX Property &amp;ldquo;bean&amp;rdquo; structure for observable objects in an idiomatic Kotlin fashion.</description></item><item><title>Are Your Code Comments Helping Anyone?</title><link>http://localhost:1313/programming/code-comments/</link><pubDate>Tue, 24 Aug 2021 10:33:44 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/code-comments/</guid><description>Comments in code are supposed to help other programmers understand your code so that they can build on it, improve it and, sometimes, fix it. Are the comments that you&amp;rsquo;re leaving in your code helping anyone to do that?</description></item><item><title>Hangman in JavaFX</title><link>http://localhost:1313/javafx/hangman/</link><pubDate>Sun, 15 Aug 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/hangman/</guid><description>How much code does it take to build a complete Hangman game in JavaFX?&lt;br&gt;It turns out &amp;hellip; Not much!</description></item><item><title>Stop Using PropertyValueFactory</title><link>http://localhost:1313/javafx/techniques/propertyvaluefactory/</link><pubDate>Thu, 24 Jun 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/propertyvaluefactory/</guid><description>PropertyValueFactory is an obsolete convenience method designed to eliminate boilerplate. We don&amp;rsquo;t don&amp;rsquo;t need it any more now that we have Lambda expressions.</description></item><item><title>What About the Cover Page?</title><link>http://localhost:1313/programming/cover-page/</link><pubDate>Fri, 28 May 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/programming/cover-page/</guid><description>There&amp;rsquo;s a lot of ways that software development projects can fail, or partially fail. Some of these happen when the users don&amp;rsquo;t understand as much as you think they do about what you&amp;rsquo;re building, how it will look and how it will work.</description></item><item><title>Implementing MVC in JavaFX</title><link>http://localhost:1313/javafx/MVC_In_JavaFX/</link><pubDate>Tue, 11 May 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/MVC_In_JavaFX/</guid><description>Model-View-Controller is generally accepted as a good way to structure an application with a user interface. Since JavaFX implements Reactive programming there&amp;rsquo;s a natural way to incorporate MVC into a JavaFX application. However, it doesn&amp;rsquo;t seem to be widely documented and there&amp;rsquo;s little evidence on the Web that many people have figured out how to do it properly.</description></item><item><title>MineSweeper in JavaFX</title><link>http://localhost:1313/javafx/projects/minesweeper/</link><pubDate>Mon, 03 May 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/projects/minesweeper/</guid><description>MineSweeper! Everyone&amp;rsquo;s favourite time-waster Windows game. Implemented in JavaFX showing how the reactive nature of JavaFX can be used with MVC to create a game.</description></item><item><title>JavaFX Anti-Pattern: The Dispatch EventHandler</title><link>http://localhost:1313/javafx/techniques/dispatchEventHandler/</link><pubDate>Mon, 19 Apr 2021 12:00:00 -0500</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/techniques/dispatchEventHandler/</guid><description>&lt;p&gt;The &amp;ldquo;Dispatch EventHandler&amp;rdquo;. For some reason I see this in examples on the web all over the place, I think because it&amp;rsquo;s a technique that seems to integrate with FXML. The idea is that you create a single &lt;code&gt;EventHandler&lt;/code&gt; and you invoke it from all of the &lt;code&gt;Buttons&lt;/code&gt; (or whatever) on your GUI. In that &lt;code&gt;EventHandler&lt;/code&gt;, you check the passed &lt;code&gt;Event&lt;/code&gt; and run different code depending on which &lt;code&gt;Button&lt;/code&gt; triggered it.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s a bad approach that adds complexity to your code and returns you nothing. In this article you&amp;rsquo;ll see how this approach fails, and how to properly write &lt;code&gt;EventHandlers&lt;/code&gt; in a clear and simple way.&lt;/p&gt;&#10;</description></item><item><title>Moving On - Building A CRUD Application</title><link>http://localhost:1313/javafx/beginners/crud/crud/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nuno@n9o.xyz (Blowfish)</author><guid>http://localhost:1313/javafx/beginners/crud/crud/</guid><description>&lt;h1 class="relative group"&gt;Introduction&#10; &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;So far we&amp;rsquo;ve built an application that does little, but demonstrates a lot. Now we&amp;rsquo;re going to write one of the most common types of application out there - CRUD (Create, Retrieve, Update and Delete).&lt;/p&gt;</description></item></channel></rss>