Fix links

This commit is contained in:
Gabriel Augendre 2023-05-21 09:29:39 +02:00
parent 7ff049dbec
commit fa3daaad0c
21 changed files with 37 additions and 37 deletions

View file

@ -9,7 +9,7 @@ aliases: ["/adding-time-to-my-blogs-statistics"]
Recently I added some statistics to my blog. I wanted to do that with minimum effort and without serving any crappy proprietary JavaScript to my users. Recently I added some statistics to my blog. I wanted to do that with minimum effort and without serving any crappy proprietary JavaScript to my users.
!!! info "Update 2020-01-03" !!! info "Update 2020-01-03"
I now use [my own blog platform](/blog-platform-update-quick-note/) with [Plausible Analytics](/about-me/#analytics). I now use [my own blog platform]({{< ref "blog-platform-update-quick-note/" >}}) with [Plausible Analytics]({{< ref "about-me/#analytics" >}}).
#100DaysToOffload No. 11 #100DaysToOffload No. 11
<!--more--> <!--more-->

View file

@ -14,4 +14,4 @@ The code powering this website is available at [Gitea](https://git.augendre.info
During the migration, I lost the feature that pushed every article on Mastodon. If you followed the blog using this mechanism, I encourage you to switch to the RSS feed. During the migration, I lost the feature that pushed every article on Mastodon. If you followed the blog using this mechanism, I encourage you to switch to the RSS feed.
If you subscribed with the RSS feed, your reader might redownload all the previous articles, if that's the case I'm really sorry but I don't know how to prevent it. If you happen to know, please [reach out to me](/about-me)! If you subscribed with the RSS feed, your reader might redownload all the previous articles, if that's the case I'm really sorry but I don't know how to prevent it. If you happen to know, please [reach out to me]({{< ref "about-me" >}})!

View file

@ -4,12 +4,12 @@ tags: ['analytics', 'blog', 'self-hosting']
date: 2020-06-26T15:34:46+00:00 date: 2020-06-26T15:34:46+00:00
aliases: ["/blog-statistics-part-2"] aliases: ["/blog-statistics-part-2"]
--- ---
In a [recent post](/adding-time-to-my-blogs-statistics), I talked about how I tracked my posts views over time using Grafana and InfluxDB. In a [recent post]({{< ref "adding-time-to-my-blogs-statistics" >}}), I talked about how I tracked my posts views over time using Grafana and InfluxDB.
Today, I went another way and configured [GoAccess](http://goaccess.io/) to provide me with an HTML report with data extracted from my webserver's logs. Today, I went another way and configured [GoAccess](http://goaccess.io/) to provide me with an HTML report with data extracted from my webserver's logs.
!!! info "Update 2020-01-03" !!! info "Update 2020-01-03"
I now use [my own blog platform](/blog-platform-update-quick-note/) with [Goatcounter](/about-me/#analytics). I now use [my own blog platform]({{< ref "blog-platform-update-quick-note/" >}}) with [Goatcounter]({{< ref "about-me/#analytics" >}}).
![GoAccess Screenshot](8.png) ![GoAccess Screenshot](8.png)

View file

@ -7,7 +7,7 @@ aliases: ["/chowning-files-dockerfile-can-take-lot-space"]
Today I learned that recursively changing the owner of a directory tree in a Dockerfile can result in some serious increase in image size. Today I learned that recursively changing the owner of a directory tree in a Dockerfile can result in some serious increase in image size.
## 🚛 The issue ## 🚛 The issue
You may remember how in a [previous post](/docker-images-layers-and-cache/) we used a small example to discuss layers and final image size. Well, here's our example again, slightly modified. You may remember how in a [previous post]({{< ref "docker-images-layers-and-cache/" >}}) we used a small example to discuss layers and final image size. Well, here's our example again, slightly modified.
```Dockerfile hl_lines="5" ```Dockerfile hl_lines="5"
# Dockerfile # Dockerfile
@ -70,7 +70,7 @@ In the specific case I was investigating at [ITSF](https://itsf.io), the image w
Of course this also works with "simple" `COPY` and `ADD` instructions. It's not reserved to copying files from other stages. Of course this also works with "simple" `COPY` and `ADD` instructions. It's not reserved to copying files from other stages.
## 📓 Don't forget history! ## 📓 Don't forget history!
I discovered that the `chown` was taking that much space using the underrated `docker history` command. I already briefly [introduced](/docker-images-layers-and-cache/#cache-invalidation) it previously but now felt like a good time to remind you of its existence 🙂 I discovered that the `chown` was taking that much space using the underrated `docker history` command. I already briefly [introduced]({{< ref "docker-images-layers-and-cache/#cache-invalidation" >}}) it previously but now felt like a good time to remind you of its existence 🙂
Running it with our big 492MB image, here's the output: Running it with our big 492MB image, here's the output:

View file

@ -55,7 +55,7 @@ These two abilities can really change the course of a match so you'd better take
Of course, not seeing the whole map means you have to keep a state between each turn to remember the position of the pellets you've already seen. That way, you can go back to them later if you don't see anything anymore. Of course, not seeing the whole map means you have to keep a state between each turn to remember the position of the pellets you've already seen. That way, you can go back to them later if you don't see anything anymore.
My code for this challenge is available on [Gitea](https://git.augendre.info/gaugendre/codingame/src/branch/master/challenges/2020-spring.py). It's written in Python, feel free to check it and drop me an [email](/about-me/) or a message on [Mastodon](/about-me/) if you have any question! It's not written in a very maintainable way since its expected life span was that of the contest, so 11 days. I could've spent more time refactoring stuff but *in this context* this would have likely been wasted time. My code for this challenge is available on [Gitea](https://git.augendre.info/gaugendre/codingame/src/branch/master/challenges/2020-spring.py). It's written in Python, feel free to check it and drop me an [email]({{< ref "about-me/" >}}) or a message on [Mastodon]({{< ref "about-me/" >}}) if you have any question! It's not written in a very maintainable way since its expected life span was that of the contest, so 11 days. I could've spent more time refactoring stuff but *in this context* this would have likely been wasted time.
Basically, here's what I do: Basically, here's what I do:

View file

@ -33,8 +33,8 @@ The piece looking like a U will be printed twice and will support the modem on t
You can download them here: You can download them here:
* [U shape (bottom)](/attachments/23/original/) * [U shape (bottom)](23.stl)
* [S shape (top)](/attachments/24/original/) * [S shape (top)](24.stl)
You can also find them [on Printables](https://www.printables.com/model/171644-support-mural-freebox-delta). You can also find them [on Printables](https://www.printables.com/model/171644-support-mural-freebox-delta).

View file

@ -354,7 +354,7 @@ See how `python.tar.xz` is downloaded and then deleted all in the same step? Tha
Well that wraps it up for today! It was quite technical but I hope you learned something along the way 🙂 Well that wraps it up for today! It was quite technical but I hope you learned something along the way 🙂
As always, please [contact me](/about-me#contact) if you have comments or questions! As always, please [contact me]({{< ref "about-me#contact" >}}) if you have comments or questions!
## 📚 Further reading ## 📚 Further reading
* [About storage drivers (Docker docs)](https://docs.docker.com/storage/storagedriver/) * [About storage drivers (Docker docs)](https://docs.docker.com/storage/storagedriver/)

View file

@ -35,4 +35,4 @@ Thankfully, as [documented](https://pipxproject.github.io/pipx/docs/)[^1], `pipx
[^1]: Also available when running `pipx --help` [^1]: Also available when running `pipx --help`
!!! info "Update" !!! info "Update"
I've now [switched](/setup-rtx-with-direnv-for-python/) from `pyenv` to `rtx` but the concept remains the same: install python with `rtx`, then set `PIPX_DEFAULT_PYTHON`. I've now [switched]({{< ref "setup-rtx-with-direnv-for-python/" >}}) from `pyenv` to `rtx` but the concept remains the same: install python with `rtx`, then set `PIPX_DEFAULT_PYTHON`.

View file

@ -64,7 +64,7 @@ They also have group video sessions very regularly to help you get started or ta
I really encourage you to take a look at [YNAB](https://www.youneedabudget.com/). If you want to use their software, they offer a 34-days trial. If you're a student, you can get a whole year for free. I really encourage you to take a look at [YNAB](https://www.youneedabudget.com/). If you want to use their software, they offer a 34-days trial. If you're a student, you can get a whole year for free.
If you do try it, please [drop me a line](/about-me)! I'd be more than happy to know if you find it interesting and whether it works for you or not 😊 If you do try it, please [drop me a line]({{< ref "about-me" >}})! I'd be more than happy to know if you find it interesting and whether it works for you or not 😊
After the trial, the service is billed $84/year (that's $7/month). It may seem steep but you should really give it a try before stopping for the price. If at the end of your trial you still don't think it's the right tool for you, then you can still take the advice they offer, read their website/blog or ask questions to the community and apply it on your own budget! After the trial, the service is billed $84/year (that's $7/month). It may seem steep but you should really give it a try before stopping for the price. If at the end of your trial you still don't think it's the right tool for you, then you can still take the advice they offer, read their website/blog or ask questions to the community and apply it on your own budget!

View file

@ -30,15 +30,15 @@ At first I considered writing on write.as directly but I would have had to pay f
I already have a list of topics I'd like to share: I already have a list of topics I'd like to share:
* My home setup ([Raspberry Pi](/raspberry-pi), [Synology NAS](/synology-nas-stream-and-backup)) * My home setup ([Raspberry Pi]({{< ref "raspberry-pi" >}}), [Synology NAS]({{< ref "synology-nas-stream-and-backup" >}}))
* Home Assistant * Home Assistant
* [Pi Hole](/pi-hole) * [Pi Hole]({{< ref "pi-hole" >}})
* [SSH & Yubikeys](/using-your-yubikey-with-ssh-and-achieving-multifactor-authentication) * [SSH & Yubikeys]({{< ref "using-your-yubikey-with-ssh-and-achieving-multifactor-authentication" >}})
* Some projects ([CodinGame](/codingame-spring-challenge-2020-pacman)) * Some projects ([CodinGame]({{< ref "codingame-spring-challenge-2020-pacman" >}}))
## Where to reach me ## Where to reach me
Up-to-date info should appear on the [About me](/about-me) page on this site. Up-to-date info should appear on the [About me]({{< ref "about-me" >}}) page on this site.
Any feedback is highly appreciated! Any feedback is highly appreciated!

View file

@ -215,7 +215,7 @@ Again, this is in the spirit of minimizing the production image.
Docker multi-stage builds helped me reduce my image sizes and attack surface - sometimes by *a lot* - without compromising on features. Docker multi-stage builds helped me reduce my image sizes and attack surface - sometimes by *a lot* - without compromising on features.
I hope that you enjoyed reading this article and that you found it interesting or helpful! Please feel free to [contact me](/about-me/) if you want to comment on the subject. I hope that you enjoyed reading this article and that you found it interesting or helpful! Please feel free to [contact me]({{< ref "about-me/" >}}) if you want to comment on the subject.
In a future post, I'll talk about reducing Docker images build time in a CI environment where the filesystem isn't guaranteed to stay between runs. In a future post, I'll talk about reducing Docker images build time in a CI environment where the filesystem isn't guaranteed to stay between runs.

View file

@ -4,7 +4,7 @@ tags: ['blog', 'self-hosting']
date: 2020-11-11T07:38:24.261889+00:00 date: 2020-11-11T07:38:24.261889+00:00
aliases: ["/migration-complete"] aliases: ["/migration-complete"]
--- ---
I just moved this blog to my self-hosted server at home. Hopefully nothing is broken but if you see something strange or missing, please [contact me](/about-me/)! 😃 I just moved this blog to my self-hosted server at home. Hopefully nothing is broken but if you see something strange or missing, please [contact me]({{< ref "about-me/" >}})! 😃
I also hope we won't experience any major outages like power (both the server and the router are on UPS) or network. 🤔 I also hope we won't experience any major outages like power (both the server and the router are on UPS) or network. 🤔

View file

@ -4,7 +4,7 @@ tags: ['devices', 'self-hosting']
date: 2021-12-28T09:33:00.205309+00:00 date: 2021-12-28T09:33:00.205309+00:00
aliases: ["/my-setup-at-home-12-2021-update"] aliases: ["/my-setup-at-home-12-2021-update"]
--- ---
In this post, I'm presenting my updated setup at home. The [previous version](/my-setup-at-home/) was from May 2020. In this post, I'm presenting my updated setup at home. The [previous version]({{< ref "my-setup-at-home/" >}}) was from May 2020.
## 👨🏻‍💻 Desk ## 👨🏻‍💻 Desk
@ -42,7 +42,7 @@ In this post, I'm presenting my updated setup at home. The [previous version](/m
* Home Assistant * Home Assistant
* Raspberry Pi 3 model B+ * Raspberry Pi 3 model B+
* display for Home Assistant in the hall * display for Home Assistant in the hall
* [Self-built server](/replacing-my-synology-nas-with-a-self-built-server/) * [Self-built server]({{< ref "replacing-my-synology-nas-with-a-self-built-server/" >}})
* proxmox with one VM (for the moment) * proxmox with one VM (for the moment)
* host all my services in docker containers * host all my services in docker containers

View file

@ -21,11 +21,11 @@ Let's try not to forget anything:
* note-taking, annotating documents, sketching * note-taking, annotating documents, sketching
* accessing my recipes (I use [Paprika](https://www.paprikaapp.com/)) * accessing my recipes (I use [Paprika](https://www.paprikaapp.com/))
* writing, sometimes * writing, sometimes
* [Raspberry Pi 3 model B+](/raspberry-pi) * [Raspberry Pi 3 model B+]({{< ref "raspberry-pi" >}})
* [Pi-Hole](/pi-hole) * [Pi-Hole]({{< ref "pi-hole" >}})
* Home Assistant* * Home Assistant*
* Monitoring of the other things* * Monitoring of the other things*
* [Synology NAS](/synology-nas-stream-and-backup) (DS216play)* * [Synology NAS]({{< ref "synology-nas-stream-and-backup" >}}) (DS216play)*
* Backups (personal laptop and Raspberry Pi) * Backups (personal laptop and Raspberry Pi)
* Plex * Plex
* "smart" TV * "smart" TV

View file

@ -17,7 +17,7 @@ As they advertise it, Pi Hole is "a black hole for internet advertisement". It's
Again, I won't go into details of how to setup your own Pi Hole, there are plenty of good resources for that, starting with Pi Hole's own website. Just remember to setup your DHCP server to advertise your Pi Hole IP as the preferred DNS resolver, so that every device connected to your network can automatically benefit from it. Again, I won't go into details of how to setup your own Pi Hole, there are plenty of good resources for that, starting with Pi Hole's own website. Just remember to setup your DHCP server to advertise your Pi Hole IP as the preferred DNS resolver, so that every device connected to your network can automatically benefit from it.
I won't also explain how Pi Hole blocks your ads but if you'd like me to, please [let me know](/about-me). I won't also explain how Pi Hole blocks your ads but if you'd like me to, please [let me know]({{< ref "about-me" >}}).
Today's quick post is about how great Pi Hole is, in a few bullet points: Today's quick post is about how great Pi Hole is, in a few bullet points:

View file

@ -6,7 +6,7 @@ aliases: ["/pip-tools-for-python-dependencies-management"]
--- ---
## 📖 Story time ## 📖 Story time
At the end of 2020, I wrote an article entitled [Poetry for Python dependencies management](/poetry-python-dependencies-management). I described ITSF's requirements for a dependencies management system and how we found Poetry useful. After updating our internal projects, I tackled my side projects and moved them to Poetry. At the end of 2020, I wrote an article entitled [Poetry for Python dependencies management]({{< ref "poetry-python-dependencies-management" >}}). I described ITSF's requirements for a dependencies management system and how we found Poetry useful. After updating our internal projects, I tackled my side projects and moved them to Poetry.
The requirements from late 2020 were the following: The requirements from late 2020 were the following:

View file

@ -107,10 +107,10 @@ Unfortunately, it sometimes marks some packages as transitive dependencies when
I've been personally very satisfied with this transition to poetry on the projects I maintain. It was a bit of work to make the switch but so far I've only been enjoying benefits. I've been personally very satisfied with this transition to poetry on the projects I maintain. It was a bit of work to make the switch but so far I've only been enjoying benefits.
The setup in a Docker image is also quite straightforward if you accept to have poetry in your final image. If you prefer to have lightweight images, you can use multi-stage builds to install your dependencies in a first stage and retrieve the virtualenv containing only your project's dependencies in a later one. If you're interested, check out [this article](/lighten-your-python-image-docker-multi-stage-builds) I wrote on the subject! The setup in a Docker image is also quite straightforward if you accept to have poetry in your final image. If you prefer to have lightweight images, you can use multi-stage builds to install your dependencies in a first stage and retrieve the virtualenv containing only your project's dependencies in a later one. If you're interested, check out [this article]({{< ref "lighten-your-python-image-docker-multi-stage-builds" >}}) I wrote on the subject!
## 🗒 Closing thoughts ## 🗒 Closing thoughts
Poetry is very **pleasant** to work with and we feel **safer** adding dependencies, knowing that there won't be any surprise conflict after the installation. We can also easily **build and publish** packages for internal use with the same tool, it's just a new command to learn. Poetry is very **pleasant** to work with and we feel **safer** adding dependencies, knowing that there won't be any surprise conflict after the installation. We can also easily **build and publish** packages for internal use with the same tool, it's just a new command to learn.
Anyway, I hope you learned something in this post about our experience with poetry! As always, please [contact me](/about-me#contact) if you have comments or questions! Anyway, I hope you learned something in this post about our experience with poetry! As always, please [contact me]({{< ref "about-me#contact" >}}) if you have comments or questions!

View file

@ -47,7 +47,7 @@ Of course these aren't the only measures you should take to protect your machine
I run a couple of services on my Pi: I run a couple of services on my Pi:
* [Home Assistant](https://home-assistant.io/) * [Home Assistant](https://home-assistant.io/)
* [Pi Hole](/pi-hole) * [Pi Hole]({{< ref "pi-hole" >}})
* Monitoring (InfluxDB & Grafana) * Monitoring (InfluxDB & Grafana)
I currently use the hosted version of [Miniflux](https://miniflux.app/) but I plan to migrate it to my Pi someday. I currently use the hosted version of [Miniflux](https://miniflux.app/) but I plan to migrate it to my Pi someday.
@ -57,7 +57,7 @@ I will talk in more details of all these services in later articles, for now I'l
## Backup scripts ## Backup scripts
At last, the need to have some backup strategy arises when you start to run more than just a couple of scripts on your server. In my case, I realized this when I started to rely on Home Assistant for my home automation system. At last, the need to have some backup strategy arises when you start to run more than just a couple of scripts on your server. In my case, I realized this when I started to rely on Home Assistant for my home automation system.
As promised in [the article about my Synology NAS and the backups](/synology-nas-stream-and-backup), here is the script I use to regularly backup my Raspberry Pi important files. This is the Home Assistant version, the other script is nearly identical except for the files included in the zip archive. As promised in [the article about my Synology NAS and the backups]({{< ref "synology-nas-stream-and-backup" >}}), here is the script I use to regularly backup my Raspberry Pi important files. This is the Home Assistant version, the other script is nearly identical except for the files included in the zip archive.
```{ .bash .large } ```{ .bash .large }
#!/bin/bash #!/bin/bash

View file

@ -7,7 +7,7 @@ aliases: ["/replacing-my-synology-nas-with-a-self-built-server"]
!!! info "👴 Old post" !!! info "👴 Old post"
I don't use TrueNAS anymore but I still have this machine and I even upgraded the RAM to a more comfortable 56GB. I don't use TrueNAS anymore but I still have this machine and I even upgraded the RAM to a more comfortable 56GB.
A few weeks ago, I replaced my trusty [Synology DS216play](/synology-nas-stream-and-backup/) with a more powerful station that I built myself. I hadn't built a computer in a long time and it was a lot of fun! A few weeks ago, I replaced my trusty [Synology DS216play]({{< ref "synology-nas-stream-and-backup/" >}}) with a more powerful station that I built myself. I hadn't built a computer in a long time and it was a lot of fun!
![TrueNAS Logo](26.svg)<!--more--> ![TrueNAS Logo](26.svg)<!--more-->
@ -54,15 +54,15 @@ My current setup includes:
* NextCloud * NextCloud
* miniflux (moved from my Raspberry Pi) * miniflux (moved from my Raspberry Pi)
* postgresql * postgresql
* [cleantoots](/cleantoots-clean-your-toot-history/) * [cleantoots]({{< ref "cleantoots-clean-your-toot-history/" >}})
* Deluge * Deluge
* Plex * Plex
* A VM with some Docker services: * A VM with some Docker services:
* This blog (migrated from the VPS) * This blog (migrated from the VPS)
* Collabora Online server (provides online collaboration on LibreOffice/Microsoft Office documents in NextCloud) * Collabora Online server (provides online collaboration on LibreOffice/Microsoft Office documents in NextCloud)
* [Plausible Analytics](/about-me/#analytics) * [Plausible Analytics]({{< ref "about-me/#analytics" >}})
The Raspberry Pi still runs Home Assistant but I disabled InfluxDB and Grafana since I didn't use them. The VPS is shut down and I plan on deleting it by the end of the month since I don't need it anymore. The Raspberry Pi still runs Home Assistant but I disabled InfluxDB and Grafana since I didn't use them. The VPS is shut down and I plan on deleting it by the end of the month since I don't need it anymore.
## Closing thoughts ## Closing thoughts
I'm really happy with this setup! I don't know yet what I'm going to do with my new NextCloud though. I tried NextCloud talk but I couldn't get it working properly for video calls. I might replace pCloud (I have a lifetime 2To plan) and use it as a backup service, who knows! If you have suggestions, please feel free to [contact me](/about-me/). 😀 I'm really happy with this setup! I don't know yet what I'm going to do with my new NextCloud though. I tried NextCloud talk but I couldn't get it working properly for video calls. I might replace pCloud (I have a lifetime 2To plan) and use it as a backup service, who knows! If you have suggestions, please feel free to [contact me]({{< ref "about-me/" >}}). 😀

View file

@ -4,7 +4,7 @@ tags: ['ssh', 'yubikey']
date: 2020-05-18T19:07:08+00:00 date: 2020-05-18T19:07:08+00:00
aliases: ["/using-your-yubikey-with-ssh-and-achieving-multifactor-authentication"] aliases: ["/using-your-yubikey-with-ssh-and-achieving-multifactor-authentication"]
--- ---
In my [introductory article](/im-starting-a-blog), I teased about using SSH with a YubiKey. Here's the post that expands on the idea. In my [introductory article]({{< ref "im-starting-a-blog" >}}), I teased about using SSH with a YubiKey. Here's the post that expands on the idea.
![YubiKeys](21.jpeg) ![YubiKeys](21.jpeg)
As you can see, I *like* YubiKeys. As you can see, I *like* YubiKeys.
@ -21,7 +21,7 @@ Second, it's portable. More than a laptop. You can even plug it in on a colleagu
You can also generate/store your private encryption and signature keys for PGP on a YubiKey ([*Why have separate encryption subkey?*](https://security.stackexchange.com/questions/43590/pgp-why-have-separate-encryption-subkey), [*Improve the Security of Your OpenPGP Key by Using Subkeys*](http://www.connexer.com/articles/openpgp-subkeys)). That also requires you to plug in the key to decrypt/sign messages hence increasing the security of your setup. You can also generate/store your private encryption and signature keys for PGP on a YubiKey ([*Why have separate encryption subkey?*](https://security.stackexchange.com/questions/43590/pgp-why-have-separate-encryption-subkey), [*Improve the Security of Your OpenPGP Key by Using Subkeys*](http://www.connexer.com/articles/openpgp-subkeys)). That also requires you to plug in the key to decrypt/sign messages hence increasing the security of your setup.
These are features I use every day: my key is plugged pretty much all day on my computer at work since I'm using PGP to sign my commits and SSH to push them on our shared git repo. That's also what I use to log into my [Raspberry Pi](/raspberry-pi) or this blog's host. These are features I use every day: my key is plugged pretty much all day on my computer at work since I'm using PGP to sign my commits and SSH to push them on our shared git repo. That's also what I use to log into my [Raspberry Pi]({{< ref "raspberry-pi" >}}) or this blog's host.
One thing to keep in mind though is that if you lose your key and it's your only access to a remote machine, you may be screwed. Remember to always keep a backup access with an offline key[^1] or a good old keyboard & screen if you have physical access to your server! One thing to keep in mind though is that if you lose your key and it's your only access to a remote machine, you may be screwed. Remember to always keep a backup access with an offline key[^1] or a good old keyboard & screen if you have physical access to your server!

View file

@ -40,7 +40,7 @@ The only "cool" thing is that once it's fixed, it's fixed for all videos I play
So if by any chance a Google engineer comes across this blog post, I'd be more than happy to share my experience with them to help improve the app experience. So if by any chance a Google engineer comes across this blog post, I'd be more than happy to share my experience with them to help improve the app experience.
And if you have any suggestions to peacefully watch YouTube on the Apple TV with an AirPlay speaker, please [reach out to me](/about-me) 😊 And if you have any suggestions to peacefully watch YouTube on the Apple TV with an AirPlay speaker, please [reach out to me]({{< ref "about-me" >}}) 😊
This concludes my 4th post of #100DaysToOffload. This concludes my 4th post of #100DaysToOffload.