The awesome stuff Leon

Why I Love My Meta Quest 3 VR Headset: A Gamer and Coder's Perspective

As a proud owner of the Meta Quest 3 VR headset, I've been thrilled to explore the immersive world of virtual reality. This cutting-edge device has transformed my gaming, coding, and movie-watching experiences, offering an unparalleled level of engagement and versatility. In this post, I'll share why the Meta Quest 3 has become an essential part of my daily life, focusing on three main uses: coding with Immersion, racing in Automobilista 2, and enjoying movies on a virtual giant screen.

1. Coding with Immersion

The Meta Quest 3 shines when it comes to productivity, especially with coding. Using the Immersion app, I've taken my coding sessions to a new level of efficiency and comfort. The app creates a virtual workspace where I can customize my environment, manage multiple screens, and code in a distraction-free setting. This not only boosts my productivity but also adds a fun and futuristic element to what can sometimes be a mundane task.

2. Racing in Automobilista 2

Automobilista 2 and VR racing have always been a passion of mine, and the Meta Quest 3 elevates this experience. The headset's impressive display and responsive tracking immerse me in the heart of the action, making every turn, acceleration, and collision feel incredibly real. The sense of speed and depth achieved in VR is something that a traditional screen just can't match. The Meta Quest 3's wireless freedom also allows me to move naturally, which is crucial for those intense racing moments.

3. Watching Movies on a Huge Virtual Screen

One of the most surprising and delightful features of the Meta Quest 3 is its capability for movie watching. The headset creates a virtual cinema experience, projecting movies onto a massive screen that makes me feel like I'm in an actual theater. The image quality is crisp and vibrant, and the sound is immersive, enveloping me in whatever film I choose to watch. Whether it's the latest blockbuster or an old classic, watching movies on the Meta Quest 3 is a unique and enjoyable experience.

Conclusion

The Meta Quest 3 VR headset is more than just a gaming device; it's a versatile tool that enhances various aspects of my digital life. From coding with enhanced focus to experiencing the adrenaline rush of VR racing, and relaxing with movies on a giant screen, the Meta Quest 3 delivers a top-notch virtual reality experience. It's a gadget that I've quickly grown to love and one that I highly recommend to anyone interested in stepping into the future of entertainment and productivity.

This post was written by me with help from chatgpt

Running a command after a ssh login

I use tmux a lot for handling different sessions. What is annoying that everytime when I ssh to a machine a first need to run the command to open the tmux session.

Here is a simple config so that when you login into ssh it will immediately run the tmux command so that you don't have to type it yourself after login. Saves you a couple of seconds with every login :)

Edit your $HOME/.ssh/config and add the "remotecommand" for the host that you are loggin into:

AddKeysToAgent yes
Host myspecialhost.nl
        RemoteCommand /opt/local/bin/tmux new -A -s chat

Now do a ssh leon@myspecialhost.nl it will do the command.

Improving Window Management on macOS

Recently I have started using Yabai and Skhd. These are two very helpfull tools to easily switch focus between windows on osx.

I like to use the "Mission Control" with multiple screens to focus on specific jobs. Like one with a terminal and one with IntelliJ.

Yabai is a window management utility that easily rearranges your windows

Skhd is a hotkey daemon so that you also can easily interact with the windows.

Installing the tools is as easy as you can expect:

brew install koekeishiya/formulae/skhd
brew services start skhd

brew install koekeishiya/formulae/yabai
brew services start yabai

Small tip for the IntelliJ users:

"Go to IntelliJ IDEA > Preferences > Appearance & behavior > Appearance > UI Options > Always show full path in window header"

Then add to the configuration of yabai:

yabai -m rule --add app="IntelliJ IDEA" manage=off
yabai -m rule --add app="IntelliJ IDEA" title=".*\[(.*)\].*" manage=on

Now yabai will only take control of intelliJ main screen and not try to resize the popups

For more information

I recommend watching the following youtube clip from Josh, he really gives a nice explanation on how to use them.

https://www.youtube.com/watch?v=fYsCAOfGjxE

Apple Airplay on Raspberry Pi

We have an old audioset, which looks pretty nice, but is very old skool. Only an audio in cable and nothing else. No bluetooth, no airplay, no streaming.

I have some USB audio output connectors, those are perfect for creating a small audio system with the Raspberry Pi. (as you maybe know, the 3mm jack on the Pi is not that great)

Start with a Pi3 or newer. If you use the older ones you could get some glitches during playback because lack of cpu power.

Start with install the Raspbian Lite images and enable SSH

Configure the Airplay Server:

Install the deps:

# sudo apt-get update sudo apt-get install autoconf automake avahi-daemon build-essential git libasound2-dev libavahi-client-dev libconfig-dev libdaemon-dev libpopt-dev libssl-dev libtool xmltoman

Now lets build and install shairpoint-sync:

# git clone https://github.com/mikebrady/shairport-sync.git
# cd shairport-sync
# autoreconf -i -f
# ./configure --with-alsa --with-avahi --with-ssl=openssl --with-systemd --with-metadata
# make
# sudo make install

The metadata in the configure line is used to be able to show the audio information to an external screen or external service.

Lets start the service and make sure the service starts after a reboot:

# sudo service shairport-sync start
# sudo systemctl enable shairport-sync
# sudo reboot

When the reboot is done, check if the service started:
# sudo systemctl status shairport-sync.service

Make sure the Wifi stays up and running without dropouts:

# sudo nano /etc/network/interfaces

Go to the end of the file and add the lines:
# Disable wifi power management
wireless-power off

Save and do a reboot:
# sudo reboot

Change the audio default:

Because I use an usb adapter for doing audio out, you need to tell alsa to use usb as the default:

# sudo nano /usr/share/alsa/alsa.conf

Replace the 0 to 1 for the following lines:
defaults.ctl.card 0
defaults.pcm.card 0

Save the file and reboot and all should work as expected :)

Inspired by 7-easy-steps-to-apple-airplay-on-raspberry-pi and updating-alsa-config

Testcontainers and permissions issue on OSX

We use testcontainers to easily do integration tests that depend on other services.
It makes it easy to spin up docker container in your tests. With Quarkus it is even simpeler because it supports testcontainers out of the box.

Unfortunately I kept getting an issue with running the mariadb container.
As soon as the test starts after a few seconds the mariadb gets shutdown again.

After checking the log of the shutdown container I found that it didn't have permission to read the my.cnf file.

I was really stuck, I had no clue but after searching I found this nice post talking about permissions.

This got me thinking because I have set umask pretty strict because of security reasons. Here is a nice post that explains it. Mine is set to 027.

After setting the umask to 011 I still had the same issue.
When I do a:

/tmp> ls -la
total 208
drwxrwxrwt  20 root       wheel    640 Feb 16 12:10 ./
drwxr-xr-x   6 root       wheel    192 Jan  1  2020 ../
drwxr-x---   3 logic  wheel     96 Feb 16 12:09 .testcontainers-tmp-379975470819841649/

As you can see, the settings are still wrong. Then it hit me, gradle is running as a daemon. You need to restart the daemon to pick up the new umask settings.

This fixed it :

drwxrw-rw-   3 logic  wheel     96 Feb 16 12:14 .testcontainers-tmp-14701789202178352376/
drwxrw-rw-   3 logic  wheel     96 Feb 16 12:14 .testcontainers-tmp-2461134091080897801/

So now I have a zsh function that will alter the umask when I run gradle.

Newer Posts Older Posts