One of my favorite moments every year is the NLJUG Java conference “JFall”. It is a day where you get to immerse yourself into all the latest trends, form an opinion if it is worth additional attention, and you get to catch up with a lot of the people you’ve encountered online or have worked with during the (by now many) working years.
But this year’s JFall had one big difference; I got to speak myself. The submission I made last year was not accepted, but the talk I made about my “epic journey” to run a single code base on desktop, mobile and web apparently was interesting enough. And even though the 1024×768 resolution through VGA was not what I had prepared for, I thought the talk went pretty well. Who would have ever thought that the shy kid from back then loves speaking in public? Anyhow, I’ll be doing the talk a few more times, but I figured I put the slides online anyhow.
Gerrit Grunwald is an enspiring internet of things (IoT) evangelist and his JavaFX library ‘Enzo’ contains many visually attractive controls, well suited for IoT but also many other JavaFX applications. Gerrit used to be an active contributor to JFXtras, but he decided to move his work to his Enzo library. Why? Because the scope of JFXtras did not fit his needs.
As an IoT evangelist he develops many JavaFX controls for his demos, and he wants to get results fast; there is always that next conference in a few days. JFXtras on the other hand tries to uphold a certain quality by a.o. requiring tests to prevent regression. This is not something a roaming evangelist wants to invest his time in. So we end up with an interesting situation; great but risky controls! Examples of this are all the gauges that are part of JFXtras-labs 2.x: they were never ported to 8.x and thus all their users have a problem there. This of course is the risk of using anything from JFXtras-labs, it is after all JFXtras’ playground, with no guarantee what-so-ever.
So what now? Great controls but too risky to touch? For Enzo that may be the case, as Gerrit states on his blog; “Please keep in mind that all controls in that library are made for my personal demos and are not production ready”. However, Gerrit and I have an agreement that I’m allowed to become ‘inspired’ by (aka blatantly copy) his demos. This already happened with CornerMenu, which was inspired by one of Gerrit demo’s and spawned CircularPane and CirclePopupMenu. The next inspiration Gerrit gave me was his SimpleGauge.
In the age of digital TV, video reaches the screen in your living room in many ways. Currently my TV gets an analog and DVB-C signal through the COAX cable, and the cupboard beneath my TV holds a VCR, DVD player, media streamer and a HDTV box. The latter two receive their data through UTP ethernet connections. The problem naturally is how to get the UTP to those two boxes, because most houses are not equipped with UTP cabling. My home is fairly new (build in 2004) and was delivered with only power lines and COAX. Newly build houses usually are very efficient in using all the space available, so they lack the small corners and niches where one could easily hide some cables. And last but not least; my house is build from concrete and stone, so no easy drilling. Maybe I should have expected problems, but in 2004 I figured that Wifi and Powerlan would do the trick.
So I currently have the need for four networks:
wired LAN for my office computers,
over-the-air internet for the laptops and tablets,
About 20 years ago, during the time that I was working on my bachelor, I came in contact with a small company selling wall decorations. They had a need for some simple software, so I wrote a MSAccess application for them. During the years they grew and so did their software requirements, which resulted in a major overhaul about 10 years later when the whole code base was moved to Java 1.2 on top of an Informix database (back then considered a real competitor of Oracle’s RDBMS). The best way to access the database was using JDBC, so that was the approach that was chosen. Persistency frameworks were still immature (SDO) or expensive (Oracle’s Toplink).
The whole JDBC-combined-with-Swing did not work really well, partially because I had not figured Swing out when setting up the application’s architecture, but also because Swing uses objects and I had resultsets. Jumping forward another 5 years or so and persistency frameworks finally became an affordable foundation, so it was time to slowly migrate the code base over to Toplink (which soon was renamed to Eclipselink). Using Eclipselink made my Swing life that much easier, more than I expected, but also introduced new challenges.
Up until then, using JDBC in the 10 years old style, business logic was spread throughout the application screens. Initially this was a nuisance, but it could be dealt with. But soon, because of the growth of the company, it became a problem; there were additional interfaces required on top of the database for EDIFACT, website, webshop, email data exchange and support of mobile devices. The whole thing had grown into a full-fledged ERP and all these interfaces needed to make sure business rules were followed; it became clear that another approach was needed. Continue reading “The road to a fully encapsulated layered business model”→
KnowledgePlaza has a rapid development platform called Cheyenne. Cheyenne is based on Java and produces in the end a WAR file, that can be run inside any servlet 2.5 / jsp 2.1 compatible container (like Tomcat 6). Cheyenne projects are build using Maven.
One of the features in the build is that there is the option of overlays; a Cheyenne project can be overlaid with other Cheyenne projects, who provide generic Java classes, JSP files, resources, etc. This feature is very similar to the overlay feature in the default WAR plugin, but Cheyenne has a few tweaks and differences that have forced us to write our own Maven plugin.
Initially the concept of Maven is very straight forward; there is a default build cycle consisting of about 20 steps (phases), and certain actions are bound to the phases based on the packaging type. For example: building JARs require different actions than building WARs. Simple? Simple. So in order to implement our tweaked build for Cheyenne all that needs to be done is write some custom actions and bind them to the build cycle. But there is this huge gap between theory and actually getting it to work. Continue reading “Maven is the EJB2 of build tools”→