<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Uwe's Blog</title><link>https://uwesander.de/</link><description>Grumpy old man codes</description><atom:link href="https://uwesander.de/feeds/all.rss.xml" rel="self"/><lastBuildDate>Sun, 06 Mar 2022 21:23:00 +0100</lastBuildDate><item><title>Persisting an NFS4 mount point on macOS Monterey</title><link>https://uwesander.de/nfs4-macos-monterey.html</link><description>&lt;p&gt;How to auto-mount an NFS4 share after startup on macOS Monterey?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://tisgoud.nl/2020/10/persistent-nfs-mount-points-on-macos/"&gt;This blog post&lt;/a&gt;
explains how to do it with basically one line in &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;192.168.200.200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nfs_share&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kr"&gt;Sys&lt;/span&gt;&lt;span class="n"&gt;tem&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Volumes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kd"&gt;Data&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my_nfs_share&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nfs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;resvport&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;hard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;nfc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;rsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;65536&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;wsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;65536 …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sun, 06 Mar 2022 21:23:00 +0100</pubDate><guid>tag:uwesander.de,2022-03-06:/nfs4-macos-monterey.html</guid><category>Sysadmin</category><category>mac</category><category>nfs</category></item><item><title>Setting up an NFS Server with Linux, Mac, and Kodi Clients</title><link>https://uwesander.de/setting-up-nfs-linux-mac-kodi.html</link><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;We'd like to set up an NFS 3 server on a Raspberry Pi with Linux, Mac, and Kodi clients.
Kodi does not support NFS 4 out of the box, so we'll stick with NFS 3 for now.&lt;/p&gt;
&lt;h2&gt;Set up the Server&lt;/h2&gt;
&lt;p&gt;As a starting point, follow &lt;a href="https://www.raspberrypi.org/documentation/configuration/nfs.md"&gt;this tutorial&lt;/a&gt; to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Tue, 22 Jun 2021 19:25:00 +0200</pubDate><guid>tag:uwesander.de,2021-06-22:/setting-up-nfs-linux-mac-kodi.html</guid><category>Sysadmin</category><category>nfs</category><category>mac</category><category>linux</category><category>kodi</category></item><item><title>Fixing the Bootloader of a Ubuntu RAID System</title><link>https://uwesander.de/fixing-the-bootloader-of-a-ubuntu-raid-system.html</link><description>&lt;p&gt;If the remote Ubuntu machine does not boot showing the following error &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;unknown&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filesystem&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Entering&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rescue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;grub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rescue&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;the GRUB bootloader is broken and can be fixed in one of the following ways.&lt;/p&gt;
&lt;h2&gt;Using the GRUB rescue concole&lt;/h2&gt;
&lt;p&gt;Follow the steps described in &lt;a href="https://it-muecke.de/grub-rescue"&gt;this blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Using a …&lt;/h2&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Mon, 19 Aug 2019 17:18:00 +0200</pubDate><guid>tag:uwesander.de,2019-08-19:/fixing-the-bootloader-of-a-ubuntu-raid-system.html</guid><category>Sysadmin</category><category>Ubuntu</category><category>GRUB</category><category>RAID</category><category>bootloader</category><category>web server</category></item><item><title>Mounting a Samba Share on the Raspberry Pi</title><link>https://uwesander.de/mounting-a-samba-share-on-the-raspberry-pi.html</link><description>&lt;p&gt;Install the following packages:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt-get install  samba-common smbclient samba-common-bin smbclient  cifs-utils
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Create a local directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir /mnt/abc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mount the Samba share using your username:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mount -t cifs //server/share /mnt/abc -o user=uwe
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If the Samba share is provided by a FritzBox via its NAS feature and assuming …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 07 Dec 2018 20:24:00 +0100</pubDate><guid>tag:uwesander.de,2018-12-07:/mounting-a-samba-share-on-the-raspberry-pi.html</guid><category>Sysadmin</category><category>Raspberry Pi</category><category>Samba</category><category>Raspbian</category></item><item><title>Upgrade Your Apache to a Newer PHP Version</title><link>https://uwesander.de/upgrade-your-apache-to-a-newer-php-version.html</link><description>&lt;p&gt;Upgrading PHP from 7.0 to 7.1 or 7.2 on Ubuntu 16.04 LTS is almost trivial as &lt;a href="https://markus-blog.de/index.php/2018/01/15/nextcloud-12-mit-php-7-1-auf-ubuntu-16-04-lts-beschleunigen/"&gt;this blog post (in German)&lt;/a&gt; explains:&lt;/p&gt;
&lt;p&gt;First, add a PPA (personal package archive):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo apt-get install -y python-software-properties (falls nicht bereits installiert)
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get …&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 08 Jun 2018 16:30:00 +0200</pubDate><guid>tag:uwesander.de,2018-06-08:/upgrade-your-apache-to-a-newer-php-version.html</guid><category>Sysadmin</category><category>Nextcloud</category><category>PHP</category><category>Apache</category></item><item><title>Setting up a new Ubuntu Webserver</title><link>https://uwesander.de/setting-up-a-new-ubuntu-webserver.html</link><description>&lt;p&gt;Here's a collection of links that provide helpful information when you have a brandnew Ubuntu machine with root access and you want to set it up as a webserver:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04"&gt;https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers"&gt;https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linode.com/docs/security/securing-your-server"&gt;https://www.linode.com/docs/security/securing-your-server …&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sat, 11 Nov 2017 20:15:00 +0100</pubDate><guid>tag:uwesander.de,2017-11-11:/setting-up-a-new-ubuntu-webserver.html</guid><category>Sysadmin</category><category>Ubuntu</category><category>webserver</category></item><item><title>Setting up a systemd Service under Ubuntu</title><link>https://uwesander.de/setting-up-a-systemd-service-under-ubuntu.html</link><description>&lt;p&gt;Starting with 15.04, Ubuntu uses &lt;a href="https://freedesktop.org/wiki/Software/systemd/"&gt;systemd&lt;/a&gt; instead of &lt;a href="http://upstart.ubuntu.com/"&gt;Upstart&lt;/a&gt; as the default system and service manager. &lt;a href="https://wiki.ubuntu.com/SystemdForUpstartUsers"&gt;This page&lt;/a&gt; offers a good comparison between the two systems.&lt;/p&gt;
&lt;p&gt;If you want to add a new systemd service (e.g. for running a Java application everytime your machine boots), create the following …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sat, 11 Nov 2017 19:15:00 +0100</pubDate><guid>tag:uwesander.de,2017-11-11:/setting-up-a-systemd-service-under-ubuntu.html</guid><category>Sysadmin</category><category>Ubuntu</category><category>systemd</category><category>service</category></item><item><title>Redirecting Requests from Apache to Jetty</title><link>https://uwesander.de/redirecting-from-apache-to-jetty.html</link><description>&lt;p&gt;Assuming you are running an Apache server with a virtual host for abs.mydomain.com, put this into the virtual host's &lt;code&gt;.conf&lt;/code&gt; file to redirect all traffic to a Jetty web server running locally behind your Apache:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Proxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;Order&lt;span class="w"&gt; &lt;/span&gt;deny,allow
&lt;span class="w"&gt;    &lt;/span&gt;Allow&lt;span class="w"&gt; &lt;/span&gt;from&lt;span class="w"&gt; &lt;/span&gt;all
&lt;span class="nt"&gt;&amp;lt;/Proxy&amp;gt;&lt;/span&gt;

ProxyPass&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;http://localhost:1234/&lt;span class="w"&gt; &lt;/span&gt;retry …&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sun, 05 Nov 2017 21:55:00 +0100</pubDate><guid>tag:uwesander.de,2017-11-05:/redirecting-from-apache-to-jetty.html</guid><category>Sysadmin</category><category>Apache</category><category>Jetty</category><category>Ubuntu</category><category>web server</category><category>SSL</category><category>proxy</category></item><item><title>40 Falsehoods Programmers Believe about Names</title><link>https://uwesander.de/40-falsehoods-programmers-believe-about-names.html</link><description>&lt;p&gt;&lt;a href="http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/"&gt;Patrick McKenzie has never seen a computer system that handles names
properly&lt;/a&gt;.
Sad!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 27 Jul 2017 07:25:00 +0200</pubDate><guid>tag:uwesander.de,2017-07-27:/40-falsehoods-programmers-believe-about-names.html</guid><category>General Software Development</category><category>names</category><category>Patrick McKenzie</category></item><item><title>Programming as if the Domain (and Performance) Mattered</title><link>https://uwesander.de/programming-as-if-the-domain-and-performance-mattered.html</link><description>&lt;p&gt;&lt;a href="http://goo.gl/L68zpH"&gt;A long read by my man Carlo
Pescio&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Wed, 26 Jul 2017 18:55:00 +0200</pubDate><guid>tag:uwesander.de,2017-07-26:/programming-as-if-the-domain-and-performance-mattered.html</guid><category>General Software Development</category><category>Carlo Pescio</category><category>performance</category></item><item><title>It's not CI, it's just CI Theatre</title><link>https://uwesander.de/its-not-ci-its-just-ci-theatre.html</link><description>&lt;p&gt;Are you practising CI? Find out by reading &lt;a href="https://www.gocd.io/2017/05/16/its-not-CI-its-CI-theatre/"&gt;this post by Suzie
Prince&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 26 May 2017 18:32:00 +0200</pubDate><guid>tag:uwesander.de,2017-05-26:/its-not-ci-its-just-ci-theatre.html</guid><category>General Software Development</category><category>continuous integration</category><category>Suzie Prince</category><category>ThoughtWorks</category></item><item><title>The Initializer Pattern in Java</title><link>https://uwesander.de/the-initializer-pattern-in-java.html</link><description>&lt;p&gt;&lt;a href="https://michid.wordpress.com/2008/08/13/type-safe-builder-pattern-in-java/"&gt;A "type-safe builder pattern in
Java"&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sat, 18 Mar 2017 20:55:00 +0100</pubDate><guid>tag:uwesander.de,2017-03-18:/the-initializer-pattern-in-java.html</guid><category>Design Patterns</category><category>builder pattern</category><category>Heinz Kabutz</category><category>initializer</category><category>Java</category></item><item><title>The Lean Inception</title><link>https://uwesander.de/the-lean-inception.html</link><description>&lt;p&gt;I should probably read &lt;a href="https://martinfowler.com/articles/lean-inception/"&gt;this series of articles by Paulo
Caroli&lt;/a&gt; before I try
to convince my boss why implementing an MVP is a good idea.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 16 Mar 2017 19:43:00 +0100</pubDate><guid>tag:uwesander.de,2017-03-16:/the-lean-inception.html</guid><category>General Software Development</category><category>lean inception</category><category>Martin Fowler</category><category>MVP</category><category>Paulo Caroli</category></item><item><title>PiBakery</title><link>https://uwesander.de/pibakery.html</link><description>&lt;p&gt;A great way to configure a &lt;a href="https://www.raspberrypi.org/"&gt;Raspberry Pi&lt;/a&gt;
from scratch is &lt;a href="http://www.pibakery.org/"&gt;PiBakery&lt;/a&gt;. After struggling a
while with setting up a VNC server and some other things on a fresh Pi
connected only via Ethernet (no display, keyboard, or mouse), finding
PiBakery was very helpful.&lt;/p&gt;
&lt;p&gt;Here's my
configuration:&lt;/p&gt;
&lt;center&gt;
![PiBakery configuration]({static …&lt;/center&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 09 Mar 2017 21:33:00 +0100</pubDate><guid>tag:uwesander.de,2017-03-09:/pibakery.html</guid><category>Sysadmin</category><category>boinc</category><category>headless</category><category>PiBakery</category><category>raspberry pi</category><category>tor</category><category>VNC</category></item><item><title>Using your SSL certificate for your Spark web application</title><link>https://uwesander.de/using-your-ssl-certificate-for-your-spark-web-application.html</link><description>&lt;p&gt;I've fallen in love with &lt;a href="http://sparkjava.com/"&gt;Spark&lt;/a&gt; recently. Being
unexperienced with web development, I stumbled upon Spark when I was
looking for a small framework for setting up a simple web application
based on Java. My learning curve has been steep and my first website
(consisting of nothing but a simple …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 09 Mar 2017 21:12:00 +0100</pubDate><guid>tag:uwesander.de,2017-03-09:/using-your-ssl-certificate-for-your-spark-web-application.html</guid><category>Web Development, Sysadmin</category><category>encryption</category><category>Java</category><category>Java keystore</category><category>let's encrypt</category><category>Spark</category><category>SSL</category></item><item><title>Referencing a Bean in JasperReports</title><link>https://uwesander.de/referencing-a-bean-in-jasperreports.html</link><description>&lt;p&gt;Thanks to &lt;a href="http://stackoverflow.com/a/6889704/6163371"&gt;this answer on
StackOverflow&lt;/a&gt;, I know how
easy it is to reference the bean itself instead of one of its properties
in a text field expression in JasperReports. The trick is to declare a
field whose description is set to the keyword &lt;code&gt;_THIS&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;myBean&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;de …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sat, 10 Sep 2016 18:53:00 +0200</pubDate><guid>tag:uwesander.de,2016-09-10:/referencing-a-bean-in-jasperreports.html</guid><category>General Software Development</category><category>Bean</category><category>jasperreports</category><category>stack overflow</category></item><item><title>Installing a Tor Relay from Source on a Raspberry Pi</title><link>https://uwesander.de/installing-a-tor-relay-from-source-on-a-raspberry-pi.html</link><description>&lt;p&gt;The other day I learned on Twitter that I should update the Tor relay
software on my Raspberry Pi as the Tor project had introduced a new
Bridge Authority. So I lazily ran &lt;code&gt;sudo apt-get update&lt;/code&gt; 
followed by &lt;code&gt;sudo apt-get upgrade&lt;/code&gt; only to notice that no new version of the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sat, 03 Sep 2016 21:33:00 +0200</pubDate><guid>tag:uwesander.de,2016-09-03:/installing-a-tor-relay-from-source-on-a-raspberry-pi.html</guid><category>Uncategorized</category><category>git</category><category>raspberry pi</category><category>stack overflow</category><category>tor</category></item><item><title>Regex for German Zip Codes</title><link>https://uwesander.de/regex-for-german-zip-codes.html</link><description>&lt;p&gt;I found the following regular expression
(&lt;a href="https://stackoverflow.com/questions/7926687/regular-expression-german-zip-codes"&gt;source&lt;/a&gt;)
working fine for me:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;?&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="mi"&gt;01000&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="mi"&gt;99999&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;\\&lt;span class="nv"&gt;d&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;\\&lt;span class="nv"&gt;d&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;})$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I tried two alternatives that did not work because they were too
general:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})[&lt;/span&gt;&lt;span class="mi"&gt;0 …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Tue, 05 Jul 2016 19:56:00 +0200</pubDate><guid>tag:uwesander.de,2016-07-05:/regex-for-german-zip-codes.html</guid><category>General Software Development</category><category>regex</category><category>zip code</category></item><item><title>Renewal of Let's Encrypt Certificates Using Plesk</title><link>https://uwesander.de/renewal-of-lets-encrypt-certificates-using-plesk.html</link><description>&lt;p&gt;Note to self: If the Let's Encrypt extension for Plesk fails to renew a
certificate (when triggered manually), disable the automatic forwarding
to an SSL connection in the Apache settings. This forced secure
connection seems to disturb the renewal script.&lt;/p&gt;
&lt;p&gt;The error I got was something like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Tue, 14 Jun 2016 18:18:00 +0200</pubDate><guid>tag:uwesander.de,2016-06-14:/renewal-of-lets-encrypt-certificates-using-plesk.html</guid><category>Sysadmin</category><category>Apache</category><category>certificate</category><category>let's encrypt</category><category>Plesk</category><category>SSL</category><category>web server</category></item><item><title>Create Custom Application Icons for MacOS X</title><link>https://uwesander.de/create-custom-application-icons-for-macos-x.html</link><description>&lt;p&gt;&lt;a href="http://blog.macsales.com/28492-create-your-own-custom-icons-in-10-7-5-or-later"&gt;This blog
post&lt;/a&gt;
by Chris Stevens shows you how.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sun, 01 May 2016 20:58:00 +0200</pubDate><guid>tag:uwesander.de,2016-05-01:/create-custom-application-icons-for-macos-x.html</guid><category>General Software Development</category><category>icons</category><category>Mac</category></item><item><title>Testing Delegate Methods</title><link>https://uwesander.de/testing-delegate-methods.html</link><description>&lt;p&gt;We had an interesting discussion the other day: should we write unit
tests for delegate methods, that is, methods that only delegate the call
to a delegate object? Here's an example of such a method:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;do&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;do&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;o2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I said I did …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 15 Apr 2016 18:33:00 +0200</pubDate><guid>tag:uwesander.de,2016-04-15:/testing-delegate-methods.html</guid><category>General Software Development, Testing</category><category>delegate method</category><category>J. B. Rainsberger</category><category>JUnit</category><category>unit testing</category></item><item><title>Headless Testing with TestFX</title><link>https://uwesander.de/headless-testing-with-testfx.html</link><description>&lt;p&gt;&lt;a href="https://jeromecambon.wordpress.com/2016/03/15/testing-javafx-in-headless-mode/"&gt;Jérome Cambon wrote a nice introduction to TestFX and how to enable the
headless mode using
Monocle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I tried to reproduce the steps he described for running my TestFX GUI
tests in headless mode from Eclipse so I can keep using my mouse while
they are running. The crux is …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Mon, 11 Apr 2016 18:35:00 +0200</pubDate><guid>tag:uwesander.de,2016-04-11:/headless-testing-with-testfx.html</guid><category>JavaFX, Testing</category><category>Eclipse</category><category>headless</category><category>JavaFX</category><category>Maven</category><category>Monocle</category><category>TestFX</category></item><item><title>A Potential Pitfall with the TextFormatter Class in JavaFX</title><link>https://uwesander.de/a-potential-pitfall-with-the-textformatter-class-in-javafx.html</link><description>&lt;p&gt;A common use case for the
&lt;a href="https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextFormatter.html"&gt;TextFormatter&lt;/a&gt;
class in JavaFX is a text field that should convert any lower-case
character input into an upper-case character. This can be achieved
easily by defining a filter for the text formatter as described
&lt;a href="https://uwesander.de/the-textformatter-class-in-javafx-how-to-restrict-user-input-in-a-text-field.html"&gt;here&lt;/a&gt;. A straightforward implementation
could look like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UnaryOperator …&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 07 Apr 2016 18:52:00 +0200</pubDate><guid>tag:uwesander.de,2016-04-07:/a-potential-pitfall-with-the-textformatter-class-in-javafx.html</guid><category>JavaFX</category><category>anchor</category><category>caret</category><category>cursor</category><category>eszett</category><category>Java</category><category>JavaFX</category><category>string conversion</category><category>text field</category><category>text formatter</category></item><item><title>The TextFormatter Class in JavaFX: How to Restrict User Input in a Text Field</title><link>https://uwesander.de/the-textformatter-class-in-javafx-how-to-restrict-user-input-in-a-text-field.html</link><description>&lt;p&gt;There are a lot of code examples for restricting or modifying user input
into a JavaFX text field. Most examples I have seen suggest adding a
change listener to the text field's text property. Here's how you would
allow only lower-case characters in your text field using the change
listener …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Tue, 05 Apr 2016 20:01:00 +0200</pubDate><guid>tag:uwesander.de,2016-04-05:/the-textformatter-class-in-javafx-how-to-restrict-user-input-in-a-text-field.html</guid><category>JavaFX</category><category>change listener</category><category>event</category><category>JavaFX</category><category>Richard Bair</category><category>text field</category><category>text formatter</category></item><item><title>Owncloud with Apache 2.4, PHP FPM, and Plesk</title><link>https://uwesander.de/owncloud-with-apache-2-4-php-fpm-and-plesk.html</link><description>&lt;p&gt;After about two weeks of fiddling around, I finally managed to get my
own instance of owncloud up and running with Apache behind Plesk. Here's
how I did it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set up a sub-domain in Plesk, e.g. &lt;code&gt;owcloud.mydomain.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set up a database for owncloud using Plesk.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure …&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Mon, 04 Apr 2016 19:46:00 +0200</pubDate><guid>tag:uwesander.de,2016-04-04:/owncloud-with-apache-2-4-php-fpm-and-plesk.html</guid><category>Sysadmin</category><category>Apache, HTTP</category><category>SSL, Owncloud, PHP, Plesk</category></item><item><title>How to Make Unit Tests more Likeable</title><link>https://uwesander.de/how-to-make-unit-tests-more-likeable.html</link><description>&lt;blockquote&gt;
&lt;p&gt;What are these unit tests good for? Are we testing Mockito?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is what a colleague asked another colleague a couple of days ago.
He was referring to some rather complicated and long unit tests that
used a lot of mocks and &lt;em&gt;verify&lt;/em&gt; statements. I knew what he was talking …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Mon, 04 Apr 2016 19:13:00 +0200</pubDate><guid>tag:uwesander.de,2016-04-04:/how-to-make-unit-tests-more-likeable.html</guid><category>General Software Development, Testing</category><category>argument captor</category><category>dummy</category><category>JUnit</category><category>mock</category><category>Mockito</category><category>spy</category><category>stub</category><category>unit testing</category></item><item><title>Adding JavaFX Properties to a DTO</title><link>https://uwesander.de/adding-javafx-properties-to-a-dto.html</link><description>&lt;p&gt;Now that I have understood &lt;a href="https://uwesander.de/whats-up-with-dtos.html"&gt;what a DTO is good
for&lt;/a&gt;, I'm thinking about ways to improve it.
As they are right now, our DTOs are POJOs extended by &lt;a href="https://en.wikipedia.org/wiki/Bean_Validation"&gt;JSR
303&lt;/a&gt; annotations for
defining constraints on their fields/methods. The annotations are
duplicates of the annotations defined on the corresponding …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Mon, 21 Mar 2016 20:23:00 +0100</pubDate><guid>tag:uwesander.de,2016-03-21:/adding-javafx-properties-to-a-dto.html</guid><category>JavaFX</category><category>annotations</category><category>DTO</category><category>FXForm2</category><category>JavaFX</category><category>JSR 303</category><category>UI</category><category>Wrapper</category></item><item><title>What's up with DTOs?</title><link>https://uwesander.de/whats-up-with-dtos.html</link><description>&lt;p&gt;Having worked a lot with &lt;a href="https://eclipse.org/modeling/emf/"&gt;EMF&lt;/a&gt; and
Eclipse RCP applications based on EMF as the framework of choice for
transferring domain models into code, I never got in touch with
real-life examples of &lt;a href="http://martinfowler.com/eaaCatalog/dataTransferObject.html"&gt;Data Transfer
Objects&lt;/a&gt;
(DTOs). I was familiar with the pattern in theory, but I never saw a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Sat, 19 Mar 2016 21:30:00 +0100</pubDate><guid>tag:uwesander.de,2016-03-19:/whats-up-with-dtos.html</guid><category>Design Patterns</category><category>Adam Bien</category><category>DTO</category><category>Eclipse RCP</category><category>EMF</category><category>JavaEE</category><category>Martin Fowler</category></item><item><title>Any Complaints?</title><link>https://uwesander.de/any-complaints.html</link><description>&lt;p&gt;&lt;a href="https://twitter.com/phillip_webb/status/705909774001377280"&gt;https://twitter.com/phillip_webb/status/705909774001377280&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I usually go for "too much boilerplate".&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Wed, 16 Mar 2016 19:52:00 +0100</pubDate><guid>tag:uwesander.de,2016-03-16:/any-complaints.html</guid><category>General Software Development</category><category>complaints</category><category>Twitter</category></item><item><title>Can There Be Too Much of a Good Thing?</title><link>https://uwesander.de/can-there-be-too-much-of-a-good-thing.html</link><description>&lt;p&gt;I recently worked on JavaFX UI code that was new to me. In order to
extend the existing UI by a simple label, I needed access to a bean of
the underlying data model. Much to my surprise, I had to dig deep to
find it hidden under multiple layers …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Wed, 16 Mar 2016 19:49:00 +0100</pubDate><guid>tag:uwesander.de,2016-03-16:/can-there-be-too-much-of-a-good-thing.html</guid><category>Design Patterns</category><category>Java</category><category>JavaFX</category><category>UI</category></item><item><title>Zooming in the Fancy Chart Control</title><link>https://uwesander.de/zooming-in-the-fancy-chart-control.html</link><description>&lt;p&gt;A new version of the fancy chart control is available at
&lt;a href="https://github.com/tesis-dynaware/fancy-chart"&gt;https://github.com/tesis-dynaware/fancy-chart&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This version supports zooming for the XY chart: by dragging the mouse,
you can select an area in the chart to scale the selected area up to
full size of the chart. This allows …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 24 Apr 2014 16:03:00 +0200</pubDate><guid>tag:uwesander.de,2014-04-24:/zooming-in-the-fancy-chart-control.html</guid><category>JavaFX</category><category>fancy chart</category><category>Github</category><category>JavaFX</category><category>zoom</category></item><item><title>Headless UI Testing with TestFX and JavaFX 8</title><link>https://uwesander.de/headless-ui-testing-with-testfx-and-javafx-8-2.html</link><description>&lt;p&gt;&lt;a href="http://www.oracle.com/technetwork/java/javase/overview/javafx-overview-2158620.html"&gt;JavaFX&lt;/a&gt;
is a great UI toolkit. &lt;a href="https://github.com/TestFX/TestFX"&gt;TestFX&lt;/a&gt; is a
great library for testing the user interfaces written in JavaFX. Writing
graphical tests with TestFX is simple and fast, but one challenge
remains when you build your software using a headless build machine: how
can you perform your UI tests in …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Wed, 23 Apr 2014 14:41:00 +0200</pubDate><guid>tag:uwesander.de,2014-04-23:/headless-ui-testing-with-testfx-and-javafx-8-2.html</guid><category>JavaFX</category><category>build</category><category>headless</category><category>JavaFX</category><category>JDK</category><category>Monocle</category><category>TestFX</category></item><item><title>Enhanced Fancy Chart</title><link>https://uwesander.de/enhanced-fancy-chart.html</link><description>&lt;p&gt;A new version of the fancy chart control is available at
&lt;a href="https://github.com/tesis-dynaware/fancy-chart"&gt;https://github.com/tesis-dynaware/fancy-chart&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Data can now be imported and exported to CSV, XLS, and HDF5 files. A lot
of code was refactored to make it easier to support other file formats
in the future.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 21 Mar 2014 12:28:00 +0100</pubDate><guid>tag:uwesander.de,2014-03-21:/enhanced-fancy-chart.html</guid><category>JavaFX</category><category>CSV</category><category>fancy chart</category><category>Github</category><category>HDF5</category><category>JavaFX</category><category>XLS</category></item><item><title>Source Code for the Fancy Chart Control</title><link>https://uwesander.de/source-code-for-the-fancy-chart-control.html</link><description>&lt;p&gt;Due to popular demand, I published the source code for the combined
LineChart and TableView control mentioned &lt;a href="https://uwesander.de/a-combined-linechart-and-tableview-widget-in-javafx.html"&gt;in this
post&lt;/a&gt;
to Github. You can find the sources here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/tesis-dynaware/fancy-chart"&gt;https://github.com/tesis-dynaware/fancy-chart&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 14 Mar 2014 15:38:00 +0100</pubDate><guid>tag:uwesander.de,2014-03-14:/source-code-for-the-fancy-chart-control.html</guid><category>JavaFX</category><category>animation</category><category>fancy</category><category>Github</category><category>JavaFX</category><category>TableView</category></item><item><title>Visit Zombieland</title><link>https://uwesander.de/visit-zombieland.html</link><description>&lt;p&gt;We finally released our FBX importer code for JavaFX 8 on Github:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/tesis-dynaware/fbx-importer"&gt;https://github.com/tesis-dynaware/fbx-importer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can use it to load (binary) FBX files and show the result as a
JavaFX 3D mesh. Have fun playing around and please don't hesitate to
give us feedback.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 13 Mar 2014 16:43:00 +0100</pubDate><guid>tag:uwesander.de,2014-03-13:/visit-zombieland.html</guid><category>3D, JavaFX</category><category>3D</category><category>ASCII</category><category>binary</category><category>FBX</category><category>Github</category><category>JavaFX</category><category>JNI</category><category>zombie</category></item><item><title>A Combined LineChart and TableView Widget in JavaFX</title><link>https://uwesander.de/a-combined-linechart-and-tableview-widget-in-javafx.html</link><description>&lt;center&gt;
[![Video of a combined LineChart and Table widget in JavaFX](http://img.youtube.com/vi/w0No8gBxDi8/0.jpg)](http://www.youtube.com/watch?v=w0No8gBxDi8)

(click to watch the video)
&lt;/center&gt;

&lt;p&gt;This video shows a widget for displaying three characteristics (velocity
vs. distance) in a LineChart node and a tabbed TableView …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Wed, 19 Feb 2014 12:10:00 +0100</pubDate><guid>tag:uwesander.de,2014-02-19:/a-combined-linechart-and-tableview-widget-in-javafx.html</guid><category>JavaFX</category><category>animation</category><category>characteristic</category><category>fancy chart</category><category>JavaFX</category><category>popup</category><category>TableView</category></item><item><title>A Widget Picker Control in JavaFX</title><link>https://uwesander.de/a-widget-picker-control-in-javafx.html</link><description>&lt;p&gt;The following video shows a custom control in JavaFX that lets you
select items from a list and position them in a grid. The items
represent UI widgets, that is, JavaFX controls, with a defined size on
the grid. The grid represents a page on which these widgets will be …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 07 Feb 2014 12:38:00 +0100</pubDate><guid>tag:uwesander.de,2014-02-07:/a-widget-picker-control-in-javafx.html</guid><category>JavaFX</category><category>editor</category><category>grid</category><category>JavaFX</category><category>user interface</category><category>widget</category></item><item><title>A Graph Editor in JavaFX</title><link>https://uwesander.de/a-graph-editor-in-javafx.html</link><description>&lt;p&gt;Another thing we've been working on is going to see the light of day
soon: a graph editor for JavaFX. The current beta version provides the
following main features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;create draggable, resizable nodes and connections between them&lt;/li&gt;
&lt;li&gt;add multiple input or output connectors to a node&lt;/li&gt;
&lt;li&gt;create joints inside a …&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 06 Feb 2014 16:29:00 +0100</pubDate><guid>tag:uwesander.de,2014-02-06:/a-graph-editor-in-javafx.html</guid><category>JavaFX</category><category>EMF</category><category>graph editor</category><category>JavaFX</category><category>user interface</category></item><item><title>A Custom Breadcrumb Control in JavaFX</title><link>https://uwesander.de/a-custom-breadcrumb-control-in-javafx.html</link><description>&lt;p&gt;After investing some serious brain power in the dynamic sizing of the
breadcrumbs in a navigation bar (described in &lt;a href="https://uwesander.de/implementing-breadcrumbs-in-javafx.html"&gt;this
post&lt;/a&gt;),
I forgot to provide a closer look at the outcome.&lt;/p&gt;
&lt;p&gt;Here's a short video of this custom control written in JavaFX:&lt;/p&gt;
&lt;center&gt;
[![Video of a graph editor in JavaFX](http …&lt;/center&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 06 Feb 2014 14:49:00 +0100</pubDate><guid>tag:uwesander.de,2014-02-06:/a-custom-breadcrumb-control-in-javafx.html</guid><category>JavaFX</category></item><item><title>Using FXForm2 with EMF Models</title><link>https://uwesander.de/using-fxform2-with-emf-models.html</link><description>&lt;p&gt;Based on &lt;a href="https://uwesander.de/gui-generation-with-javafx.html"&gt;these considerations from
July&lt;/a&gt;,
we gave &lt;a href="http://dooapp.github.io/FXForm2/"&gt;FXForm2&lt;/a&gt; a shot for
generating forms from EMF models. It worked quite smoothly after we
wrote the factories that defined how the custom data types used in our
models should be displayed.&lt;/p&gt;
&lt;p&gt;We found a few things that are worth noting:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Using …&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 08 Nov 2013 13:46:00 +0100</pubDate><guid>tag:uwesander.de,2013-11-08:/using-fxform2-with-emf-models.html</guid><category>EMF, JavaFX</category><category>data model</category><category>forms</category><category>FXForm2</category><category>GUI generation</category><category>Java</category><category>Java Bean</category><category>JavaFX</category></item><item><title>Implementing Breadcrumbs in JavaFX</title><link>https://uwesander.de/implementing-breadcrumbs-in-javafx.html</link><description>&lt;p&gt;I've been struggling to implement a JavaFX breadcrumbs bar using a
ToolBar with a few Button items in it. The breadcrumbs should have the
shape of an arrow as in the example shown in &lt;a href="http://www.loop81.com/2011/11/javafx-2-breadcrumbs-and-styling.html"&gt;Loop81's blog post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The breadcrumbs bar in the &lt;a href="http://www.oracle.com/technetwork/java/javafx/samples/index.html"&gt;Ensemble
application&lt;/a&gt;
uses the same approach. What I …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Mon, 04 Nov 2013 15:08:00 +0100</pubDate><guid>tag:uwesander.de,2013-11-04:/implementing-breadcrumbs-in-javafx.html</guid><category>JavaFX</category><category>breadcrumbs</category><category>CSS</category><category>Ensemble</category><category>JavaFX</category><category>SVGPath</category><category>toolbar</category></item><item><title>Zombieland</title><link>https://uwesander.de/zombieland.html</link><description>&lt;p&gt;Based on &lt;a href="https://twitter.com/jasperpotts/status/330516243914305537"&gt;Jasper Potts' 3DViewer
app&lt;/a&gt; (with
support for importing OBJ, MAX, and MAYA files), we are developing an
importer for FBX files into JavaFX. Below is a picture of our
developer trying to understand the FBX format a screenshot of the
extended 3DViewer app after loading an FBX file …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 23 Aug 2013 13:29:00 +0200</pubDate><guid>tag:uwesander.de,2013-08-23:/zombieland.html</guid><category>3D, JavaFX</category><category>3D</category><category>ASCII</category><category>binary</category><category>FBX</category><category>Jasper Potts</category><category>JavaFX</category><category>JNI</category><category>zombie</category></item><item><title>GUI Generation with JavaFX</title><link>https://uwesander.de/gui-generation-with-javafx.html</link><description>&lt;p&gt;Recently, we have had a look at JavaFX libraries for generating UIs in a
dynamic way. The idea is that we have a data model (a JavaBean class, an
EMF model class, a model class with JavaFX properties,...) as input for
some GUI builder that takes the model and generates …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Fri, 12 Jul 2013 07:48:00 +0200</pubDate><guid>tag:uwesander.de,2013-07-12:/gui-generation-with-javafx.html</guid><category>3D, EMF</category><category>data model</category><category>drag &amp; drop</category><category>Eclipse</category><category>EMF Client Platform</category><category>EMF Edit</category><category>forms</category><category>FXForm2</category><category>GUI generation</category><category>Java</category><category>JavaBean</category><category>JavaFX</category><category>open source</category><category>RCP</category><category>real world</category><category>scene graph</category></item><item><title>Navigation</title><link>https://uwesander.de/navigation.html</link><description>&lt;p&gt;Dear tree huggers,&lt;/p&gt;
&lt;p&gt;I'm one of you. I like trees - preferably on the left of my application.
They give me the impression that I exactly know where I am and where I
can go next. Just recently I learnt how much I appreciate a tree as a
navigation element when …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Thu, 23 May 2013 16:43:00 +0200</pubDate><guid>tag:uwesander.de,2013-05-23:/navigation.html</guid><category>UI Design</category><category>Confluence</category><category>data model</category><category>developer</category><category>file manager</category><category>forest</category><category>IDE</category><category>JavaFX</category><category>Microsoft</category><category>navigation</category><category>Patternry</category><category>sidebar</category><category>software</category><category>tree</category><category>use cases</category><category>user interface</category><category>workflow</category></item><item><title>Designing Interfaces with JavaFX</title><link>https://uwesander.de/designing-interfaces-with-javafx.html</link><description>&lt;p&gt;Good design makes you happy. I was happy when I first saw an iPod, and
even happier when I first held it in my hand. Sometimes, you will not
notice the positive effects good design has on you, but you will always
notice the effects of &lt;a href="http://www.topdesignmag.com/20-examples-of-bad-web-design/"&gt;bad
design&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">uwe</dc:creator><pubDate>Wed, 24 Apr 2013 05:35:00 +0200</pubDate><guid>tag:uwesander.de,2013-04-24:/designing-interfaces-with-javafx.html</guid><category>JavaFX, UI Design</category><category>design</category><category>e(fx)clipse</category><category>Eclipse</category><category>Halo effect</category><category>iPod</category><category>Java</category><category>JavaFX</category><category>Jenifer Tidwell</category><category>personas</category><category>user experience</category><category>user interface</category></item></channel></rss>