Ubuntu without a grub menu

I tried to hide the grub menu you generally see when you boot an Ubuntu Linux machine, but to no avail. I had altered the time out and time out style by setting them to:

GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0

But my machine still waited ten seconds. Turns out the grub scripts check if there is more than one OS installed on the machine. If there is, the time out is always 10 seconds.

I could fix this by editing /etc/grub.d/30_os-prober and setting quick_boot to 0. Odd to set it to 0 to speed things up, but it worked.

Of course you have to run update-grub, if you alter this script.

Spring Boot 2.7.x and Elasticsearch

It has been a long time since I did anything with Elasticsearch and I wanted to give it a go again. So I spun up a Spring Boot application through the Spring Initializr and downloaded the latest and greatest Elasticsearch, version 8.x.x.

I then could not get it to work and found that Spring Data Elasticsearch 4.4.5 only supports Elasticsearch 7.17.6. So I downloaded that and did the following.

I added the following to $ES_HOME/config/elasticsearch.yml:

xpack.security.enabled: true
discovery.type: single-node

We are running Elasticsearch as a single node. That is why I set the discovery.type.

Then I started Elasticsearch and setup passwords. If you don’t enable security, Elasticsearch logs a message every time you send a request to it, stating you’re doing unsafe things.

I set the passwords by executing:

$ES_HOME/bin/elasticsearch-setup-passwords auto

Elasticsearch then spits out the passwords for the various accounts. As I am only playing around with Elasticsearch and this is no a production setting, I am using the elastic account in Spring Boot.

What I did next was configure Elasticsearch in Spring Boot:

@Configuration
public class ElasticConfiguration extends AbstractElasticsearchConfiguration {

    @Override
    public RestHighLevelClient elasticsearchClient() {
        final ClientConfiguration clientConfiguration = 
            ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .withBasicAuth("elastic","<password>")
                .build();

        return RestClients.create(clientConfiguration).rest();
    }
}

Of course you would want put the username and password in a configuration file and not code, but we are just horsing around here.

Then it is just a matter of making a repository and a storage object and you are good to go:

public interface UserRepository extends ElasticsearchRepository<User, String> {
}

The User object looks like this:

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "user")
public class User {
    @Id
    private String id;
    private String username;
    private String department;
}

Comply tips for AirPods Pro

When I bought the AirPods Pro I enjoyed using them. The noise cancellation was great and the sound was ok. Ideal for the daily commute by train.

But I had some issues with the AirPods Pro. After using them for just half an hour, my ear canal would start to hurt and the next day I’d have an ear canal infection. So pretty soon after purchasing them, I stopped using them and returned to my old dependable AirPods.

Not satisfied, who would be after spending so much money on a product, I started googling the issue. I immediately found many people complaining about getting ear infections and skin irritation after using the supplied AirPods Pro tips.

Being the lazy person I am, I didn’t immediately start searching for replacement tips, but I am so happy I eventually did. The Comply tips arrived in the mail yesterday and last night I tried them while watching tv late at night.

Today I have no problem at all. Problem solved. I should have bought these a long time ago. I can highly recommend them!

Good audio

If you have ever had the idea in your head that you need to hear Dead Can Dance’s Rakim on a stack of Naim gear with Spendor D7.2s, you’re my spirit animal.

Funny story. I was talking to a shop owner and my wife, Eliza, was still in the listening room with a pair of Spendor D7.2s, an Audio Analogue Puccini Anniversary amplifier and some Lumin streamer.

I don’t recall exactly what she was playing, but it was either coronation anthems by Handel or the Carmina Burana.

While I was talking to the owner, she kept turning up the volume and later when we joined me, with an innocent look on her face she told me:”It did not distort at all.” It was hilarious.

Find the stack that suits you. It is not easy, but is it not a grand journey?

High Availability Kubernetes cluster

Yesterday a computer, which I had ordered quite a while ago, finally arrived. It is an Intel NUC 10i7FNH with 64GB of memory and a 500GB Samsung 970 EVO Plus. I now have three of these. All the same specs.

I bought them over a period of several months. The 10i7FNH is not the most current model, still the price of every machine I bought was higher than the previous one. Between the first and the last machine there is a price difference of 160 euros. Quite a difference if you take into account the first one cost 790 euros. It is just another effect of COVID-19. Let us hope we can leave this whole pandemic behind us soon.

The Kubernetes cluster now has 144GB of RAM to run applications in. There are three master nodes for High Availability and three master nodes also means etcd has reached quorum.

Adding another master and worker node to a running Kubernetes cluster is quite a job. I could not have done it without the help from this article.

Now I can safely wait for one of the SSDs to break. Master nodes write so much data to disk, it’s just a matter of time before one of the consumer SSDs in the nodes breaks. Or at least that is my expectation. We will see.

Continuous Integration drama

When I read that Bitbucket Server is going to be discontinued in the future, I could have done two things. I could have waited as I could still use Bitbucket Server for quite a long time or I could go out and search for a new solution. I did the latter. Well, at least the searching part. I am still trying to find the best solution.

I am still trying to work with Bitbucket Cloud, but I am running into some issues:

  1. I am still not very pleased with having to put the credentials for my Nexus server into someone’s web application.
  2. Pipelines in Bitbucket Cloud aren’t very fast.
  3. Creating a Docker image with the spring-boot-maven-plugin fails at this time and it seems this problem isn’t going to be fixed any time soon.

I’d better have a look at gitlab and see what it can do for me, but there’s a good chance I’ll stick with Bitbucket Cloud and my own Jenkins server. More on that later.

Next step?

COVID-19 and the possible financial ramifications made me back off big investments in audio. The physical size of my home did not help either.

An audio system made up of individual components takes up a lot of space. Something I tend to forget when I am listening to shiny speakers and a big stack of components in an audio store. The speakers I could easily place in the room. I would just have to remove my current speakers and the makeshift stands they are on.

Putting the amplifier somewhere is a different story. The cupboard under the tv is just too shallow to house a decent amplifier. For example a Naim Supernait 3 is over 30 centimeters deep and that is without cables connected to the back. Under the tv is practically the only place where I could put audio equipment. A solution would be to remove the cupboard under the tv and replace it with something else, but will cost extra money.

Also, should I start my journey with getting my end game rig? A Naim Supernait 3 and a pair of Spendor D7.2 speakers cost close to 10.000 euros and that is without any cables. Should I not start a little smaller? Work my way up and learn what I like?

Would big speakers like the Spendor D7.2 even work in my small living room?

These complications continuously make me rethink what I should get. Should I start out simple, with for example a Cambridge Audio CXA81 with a pair of KEF R3s?

Or should I look at active speakers again? My mind wanders to the KEF LS50W again, but I am afraid the little drivers in that speaker would give me an underwhelming amount of bass. If only KEF made a wireless version of the R3.

Chord Mojo Poly case

The Poly and Mojo combination is a powerful bit of hardware, but you need a case. The two fit snugly together, but I did not feel comfortable to walk around with them without a case keeping them fixed. So I ordered the case. At 95 euros it is not cheap. It also took a month to arrive at my doorstep. According to the retailer where I bought it, this was due to COVID-19. Oh well, in the end I got it.

Chord Poly

After setting up Roon I searched for the best way to use Roon and be sort of mobile with my Sennheiser HD 660 S. With mobile I mean having high quality audio that I can move around the house with relative ease. I started out with my iPhone connected to the Chord Mojo. This was not very convenient. The Roon app on iPhone crashes a lot. Moving around a phone connected with two cables to a DAC was quite inconvenient.

On Chord Electronics’ site I saw their Poly, a streaming attachment to their Mojo DAC, is Roon ready. At €599 it is not exactly cheap, but it seemed like just the solution I needed.

So I ordered it and waited… I ordered it at wifimedia.eu and they didn’t have one in stock. Which is fine, it happens, you cannot have every product on the shelf. Unfortunately it was sent to me through DHL, which in my country isn’t exactly trustworthy. I stayed at home all day on a Saturday and they did not show up and then told me on their tracking site I was not at home that day.

When it finally came on Monday. I had to wait another six hours for it to be charged. I then plugged it into the Mojo and set it up through a bit of a clumsy app over bluetooth. I set it to Roon mode, added it to Roon and that was that.

My first impression was that the music now sounded a lot better than when I had the Mojo connected to my phone. Tighter, more balanced, voices sounded more lively and instruments more real. I did have an issue with playing DSD. It stuttered. Not quite sure what I can do about that or what was the cause.

I am not sure how battery life will be. I do not think I will get the play time as advertised by Chord. Time will tell if charging takes too long. The Poly manual states you can charge will listening, but that charging will be slow. I also wonder about how much heat will accumulate playing and charging at the same time.

If you get the Poly also get a case, because dust can get in between where the two connect and it will make sure the Poly and Mojo stay connected. That will set you back another 90 to 100 euros…

Roon outage

It seems it’s the second time this week that Roon is have trouble with their systems. I’m playing Bob Dylan’s Desire as we speak over Tidal and Roon, but I’m reading lots of articles about an outage. I also can’t reach their knowledge base.

I’ve just read it’s due to a Google Cloud Platform outage. Let’s hope things get fixed soon.