This blog is just based on my own opinion, as a software engineer I do not have the qualifications to have a professional one.
Corona has arrived. The world has dodged the bullet with SARS and MERS, but the third time seems to be the charm, and a pandemic is rolling around the globe as I type this. Corona isn’t like the zombie virus from the movies, it’s closer to a standard influenza flue, except that the human world population has never encountered it before and thus no one has any immunity. The infection rate is higher than that of influenza.
Let’s examine some rough numbers, they don’t need to be exact for the point I want to make. Experts seem to agree that 60-70% of all people will get the corona virus. Given a country like the Netherlands with just over 17 million people, that will mean around 11 million people. About 80% of those will only get mild or moderate symptoms, which can go away in 3 days, but can also last up to two weeks. In any case no hospital care is required. It’s the remaining 20% that is the cause for alarm, because those need medical care. And with 11 million infected people, that would mean over 2 million people will be in the hospital. But our country only has 37.000 hospital beds. Total.
Now, those two million people will not become sick all at the same time, but assuming the severe cases are sick for two weeks, than we have 4 million hospitalbed-weeks to handle. This means that given the current capacity, we need 108 weeks worth of these 37.000 beds. Or in other words: we need to spread out the sick people over more than two years. And that is at 100% hospital capacity; there is no room for anything else in the mean time; no accidents, no cancer, no nothing.
Now I’m really going off the deep end with respect to what this blog is supposed to be about. But since it is a personal blog, I’m allowed to do that. And it is something I seem to run into more frequently: political correctness.
The trigger for this blogpost is the newspaper of this morning; school changes “carnaval” to “dress up party”, because carnaval is a faith related festivity (Roman Katholik to be exact) and they are a public school.
Carnaval may be faith related, but it’s not like they are not going to celebrate it. The whole southern half of our country does, Katholik or not, and it’s simply called carnaval. It has to have a name, you know, so people know what you are talking about. Dress up party is what children do, carnaval is something quite different.
By now we’ve changed the name of pastries; “moorkop” became “roomkop” because it referred to someone with a dark skinned head, and yes, it is made with dark chocolate. We’ve undarken black piet into someone with smears. And the list goes on and on. Everything needs to be politically correct nowadays, so that no one can be offended.
Having made good progress on the Tesla side of the implementation, it’s time to take a look at how to implement the calendar integration. But first, let’s examine why to use a calendar in the first place. After all, there are many solutions that implement similar functionality, for example using timers (like Tesla does in the car).
Personally, to be honest, I would be totally lost if it were not for a digital calendar. Google calendar to be precise. I forget things, so I register everything in it. Not everything needs to send out reminders, but just not forgetting that my son has his basketball training every Tuesday and Thursday evening, prevents me from making some kind of commitment that will cause conflicts.
In other words: my life is in that calendar. That means also the things I need to get into my car for. So my calendar seems like the perfect place to also administer when I need my car to prepare itself for driving, by defrosting or whatever. And if an appointment changes, I immediately see that that part also needs to change. Like generating documentation from code.
After the (some still present) rattles, the broken rear view camera, the broken LTE modem, and the decorative yellow band around my screen, my car had another surprise for me today; the lane changed stopped working because of limited vision. I suspect the moist in the left side facing camera to be the culprit.
It’s a good thing I have a appointment in two days for the yellow band, can they take a look at this as well. #neveradullmoment
The ‘going electric’ will be different blogs from my usual beat. Not only because they will not be related (directly) to software development, but also because they are opinionated and personal reports; editorials about switching over to an electric car. They will list my personal joys and annoyances about the switch, but I’ll try to be fair and balanced.
After arriving home, in one piece I may add, it was time to inspect the car closer. But first replenish that battery. I had a Tesla wall connector installed, and a friend of mine suggested to me to also install a Maxem load balancer. I’ll do a separate post on that. The point I want to make is that on all the video’s you see a sleek US style connector being inserted smoothly. So when I inserted mine, it did not go in as smoothly; the connector we have is more bulky and it does not do that smooth insert.
But the car clicked, so okay! But then there was an error message in the car saying that it was charging, but not optimally. So I started calling both Maxem and Tesla, something was not putting enough juice in the car. 30 confusing minutes later it turned out I need to push harder against the connector, so it was in all the way. Ahm. Sorry!
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”→