Archives 2022

Update #11 It has been almost 2 months

Yes, shame on me. It has been almost 2 months since my last post. Did I quit my challenge? No that is certainly not the case. But I have to say that motivation has not always been there to make big steps.

Last time I was halfway the monster chapter on Sets. At this moment I still have not finished this chapter. Just the sorted collections and a long challenge to go. The topic in itself is not specifically complex or difficult, but I want to do it well. This means that I need time and ‘brainspace’ available to start on the many video’s and challenges. I have been lacking in this department obviously.

Most important reason I spend less time on the training, is because of my nights. Curious ๐Ÿคจ ?

Read More

Update #10 My spirit is always alive, not the blog…

Just a mini update (without a READ MORE) this time. As the title says, I am still very motivated to finish this course. But is not easy to find enough time. Last weeks were hectic at work due to the preparation of our quarterly planning event. And even in the quarterly hack week I had only little time for my Java journey as I joined other trainings and organised a (JIRA) training of my own.

For the 2nd time this month my blog was down a few days without me noticing. This time because my (external USB) backup drive was full. Not sure what happened, as I thought older backups were automatically removed. Have to keep a better eye on this and find out how Proxmox handles this exactly. And I was thinking, probably first thing I have to develop when I am a little bit more advanced in Java, is a simple “host monitor” script: Hit https://adeknegt.nl and check if there is 200 response code. Suppose this is dead simple with Spring, but maybe it is doable too with plain old Java. I still have the networking chapter to go in the course.

Finally, I am now in the middle of the 6.5 hours chapter on collections (sets, maps and some assorted extra’s). I feel it is really important to learn this part well, as in almost all programs you use them extensively. Now at 47% of the course (not sure how they measure this, maybe just a count of videos + exercises). On to the next 53%!

(I don’t feel like celebrating post #10, maybe a big party at #25 or so)

Update #9 Lessons learnt after WordPress update

I don’t check my blog every day (and I think you don’t either). Just today I gave my URL to a colleague and more or less by mistake I clicked the link. And so I found out that my site was showing without any CSS and therefore being completely dis-functional. Also the admin pages did not work! Mild panic…

It has taken a few hours to figure out what happened and finally how to fix it: On May 24th an automatic WordPress update was installed. First I thought this had broken my WordPress theme. But even after hacking the database to change the theme to the default theme, the problem was still there.

After some more frustrated trial and error and a lot of googling, I finally had my “Aha Erlebnis” (https://en.wiktionary.org/wiki/Aha-Erlebnis). The new WordPress update had overwritten the wp-settings.php file. This file requires an extra line for my site to work with https. How I figured this out when I started with WordPress, is another story full of frustrations. Anyway, adding the following line to wp-settings.php solved my problems:

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

Now, is there a learning and can I avoid this problem in the future? Well, that is a YES and a NO at the same time.

Read More

Update #8 Worst code ever :-)

I am finishing the chapter on packages, scope and access. Not the most sexy topic, but I am happy to do it. It was itching already for some time when to use public, private, static, final etc… It was used before (of course), but not really explained. Now it is. Again, not something you will need to know in detail in daily practice, but I sorta think this is fundamental knowledge that is good to have.

As part of this chapter, there was a fun challenge to illustrate scope. The assignment: a program that prints primary school “times” list for a value. E.g. for value 3 : 1 * 3 = 3, 2 * 3 = 6, 3 *3 = 9 etc….

One specific condition: all variables, members, methods and classes have to be called x (or X for the class)!! It results in completely unreadable code, but due to scoping in Java, it can be done. See if you can follow the code ๐Ÿ™‚

Read More

Update #7 Am I doing the right thing?

The other day I was talking about my Java challenge with one of the (sr) Java developers in my team. I told him that I was currently learning topics like Java Generics and Access Modifiers. His reaction caused me some concern.

He explained that these indeed are topics that Java developers learn and know, but in practice you do not really “use” them. In the daily work you mostly implement known design patterns, which you bootstrap with more or less stand Java coding blocks. And most of the time standard libraries like Spring(-Boot) also take away complexity from using Java standard functionality.

So, should I stop learning the details of Java and more focus on general Java, design patterns and Spring?

Read More

Update #6 Old fashioned bash scripting

Due to holidays (a week in the sun & the snow!) and busy return at work, my study progress has been disappointing. But I was able to work on another technical topic that had some urgency: updating the software on my NUC that runs this blog. For the technical nurds some more information on my setup:

  1. An intel NUC with 16G memory and a fast 500GB SSD
  2. The NUC runs Proxmox virtualization software
  3. In Proxmox I have a so called LXC container running, which you could compare with a virtual machine
  4. The LXC container runs Nginx as reverse proxy for my domains and docker to run my containers
  5. On the LXC container, 4 docker containers are running:
  • 1 WordPress container for this blog
  • 1 WordPress container for my band: https://thomandthejerrys.nl
  • 1 MySQL container for WordPress
  • 1 Portainer container, to have a nice frontend for the containers

Portainer is great: you visually see the status of your containers and you can stop, start or rebuild them from the GUI. You can even go directly into a container terminal from Portainer. But there is one problem, you cannot update portainer from within portainer. It is not too difficult to do this from the command line, but I always forget the exact commands. The solution: A bash script that took me almost a day to make.

Continue if you are curious…

Read More

Update #5 – It is really a class!

Again a short update. Since last update, I am now in the last part of Section 9. This section is about Interface, Inner- and Abstract classes. Not too difficult, but doing every challenge yourself really takes time. But I learn a lot from doing it myself every time, so I keep at it.

Why a short update? Well, as said I do this course beside my work and my social life. And especially work is really busy. Last week I helped organise the first ‘hackweek’ of my newly formed department. A hackweek is a full week dedicated for Learning and R&D. So you can do a personal training on a topic of your interest, organise a hackaton, share knowledge with colleagues etc… I am really happy KLM allows for a lot of time for Learning and R&D, not only on paper but also with initiatives like the hackweek.

Another busy topic at work is the monthly PI planning next week (if you are interested: https://www.scaledagileframework.com/pi-planning/). This always takes substantial time to prepare and assure that it runs smoothly.

The result: with some other personal and social obligations (a funeral, weekly tennis, theatre, band practice), there was not much time to focus on my road to Java greatness. More and more I have to conclude I am really doing like a school class (not a Java class). I have to accept it will take considerate effort and lead-time to finish it. I am still persistent and convinced I will make it to the end, but it will take for sure several more months. Now up to finishing section 9 and then section 10 about Java Generics ๐Ÿ™‚

Update #4 – Another one off the list

The title is a poor word joke, as I am finishing up on chapter 8 with Arrays, Lists, ArrayList and LinkedList. Not too complex I think, although the LinkedList has some quirks for sure. I do get how it works in code, but I am not sure yet why you need a separate iterator to be able to iterate through the elements. Well, I probably have to practice some more to get used to it.

Not much to say about lists, so maybe a small update on the course and the learning experience. I still like the structured manner the topics are presented. What I do see now: doing the challenges yourself before checking out the solution is maybe one of the most valuable parts. I am still somewhat frustrated that the teacher often has another take on the solution, but usually there is a lot to learn on how to efficiently solve certain standard problems.

Earlier I was positive about the exercises, for which you have to copy your code to the website where it runs and checks the output. I am less positive now. In last chapters the challenges were quite large (several videos), but at the exercise it turns out the you almost literally have to create the code from the challenge. That is not much of an exercise.

Anyway, still like the learning and the (almost) daily progress I make. Next Topic: Inner- and Abstract Classes & Interfaces.

Update #3 – (Brain) Muscle memory

As you can read in my bio (see About me), I have been trained as a Software Engineer many years ago, somewhere in the mid 1990’s. After a few years programming, I drifted away to analysis, project- and program management and several Agile roles like Release Train Engineer and Scrum Master. Meanwhile I kept involved with technology, but I did not code regularly anymore.

Now that I am coding almost every day for my Java course, I realise that also the brains have some “muscle memory”. Interested to see what I mean by this?

Read More

Update #2 – Milestone reached: OOP done

Another update. After a week with little time, I finally had the time to finish the final Object Oriented Programming chapter. Including the challenges and the exercises. Feels like a real milestone, as mastering OOP concepts is in my opinion really one of the basics of designing good programs. Now terms like Inheritance, Polymorphism, Encapsulation and Composition have little secrets for me.

Let’s go back to the course itself: the final challenge (explained in a video) was exactly the same as the final exercise. Makes the exercise a little less valuable unfortunately. Anyway, I have been creating Basic Hamburgers, Healthy burgers and Deluxe burgers. That was fun to do, but I really think that the trainer, even with the limited knowledge we students have at this time, did not get everything out of his solution. I liked mine better (maybe think all programmers think that about their code?). Let me explain.

Read More