<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>it's like awesome you know</title><link>https://ilayk.com/</link><description>Recent content on it's like awesome you know</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 02 Apr 2026 08:44:22 +0000</lastBuildDate><atom:link href="https://ilayk.com/feed.xml" rel="self" type="application/rss+xml"/><item><title>Redirect Twitter and Other Sites to Alternative Frontends Using StopTheMadness</title><link>https://ilayk.com/2026/04/02/redirect-twitter-and-other-sites-to-alternative-frontends-using-stopthemadness.html</link><pubDate>Thu, 02 Apr 2026 08:44:22 +0000</pubDate><guid>https://ilayk.com/2026/04/02/redirect-twitter-and-other-sites-to-alternative-frontends-using-stopthemadness.html</guid><description>&lt;p&gt;There are a few browser extensions available for this, with &lt;a href="https://libredirect.github.io"&gt;LibRedirect&lt;/a&gt; being, I think, the most popular one. They redirect privacy-invasive sites to more privacy-friendly alternative frontends. For example, every time you open a &lt;a href="https://youtube.com"&gt;youtube.com&lt;/a&gt; link, it redirects you to an &lt;a href="https://invidious.io"&gt;Invidious&lt;/a&gt; instance instead, opening the same video there.&lt;/p&gt;&lt;p&gt;LibRedirect doesn’t exist for my default browser, Safari, so I wanted to check whether there were any alternatives. There are. However, there’s something even better: an extension I’ve already been using for years, &lt;a href="https://underpassapp.com/StopTheMadness/"&gt;StopTheMadness Pro&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Open Links on Your Local Machine With VScode in a Remote Session</title><link>https://ilayk.com/2025/06/29/open-links-on-your-local-machine-with-vscode-in-a-remote-session.html</link><pubDate>Sun, 29 Jun 2025 09:04:26 +0000</pubDate><guid>https://ilayk.com/2025/06/29/open-links-on-your-local-machine-with-vscode-in-a-remote-session.html</guid><description>&lt;p&gt;I’m using VScode frequently on a remote machine using SSH, not in &lt;a href="https://containers.dev/"&gt;Development Containers&lt;/a&gt; or &lt;a href="https://github.com/features/codespaces"&gt;GitHub Codespaces&lt;/a&gt;, just SSH. I recently noticed, that using &lt;a href="https://playwright.dev/"&gt;playwright&lt;/a&gt; in VScode automatically opens the html-report of my tests in the browser on my local machine, instead of making me manually go to a URL or do port forwarding (which VScode fortunately also automatically does for you!)&lt;/p&gt;&lt;p&gt;This apparently works because VScode configures the $BROWSER variable to a shell script that can take a URL and open it in the local browser.&lt;/p&gt;</description></item><item><title>Enable IPv6 in Docker Compose Deployments</title><link>https://ilayk.com/2025/05/31/enable-ipv6-in-docker-compose-deployments.html</link><pubDate>Sat, 31 May 2025 08:58:30 +0000</pubDate><guid>https://ilayk.com/2025/05/31/enable-ipv6-in-docker-compose-deployments.html</guid><description>&lt;p&gt;It’s 2025, IPv6 is widely used and deployed. &lt;a href="https://radar.cloudflare.com/adoption-and-usage/de?dateRange=24w"&gt;Even countries such as Germany&lt;/a&gt;, which usually lag far behind, have a 60% adoption rate of IPv6.&lt;/p&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cEryERLOWDWjS4jo5PkbmA.png" /&gt;&lt;figcaption&gt;IPv6 adoption rate in Germany between December 2024 and June 2026&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3&gt;Docker IPv6 Configuration&lt;/h3&gt;&lt;p&gt;For some reason, Docker has never made it easy to support and use IPv6. However, there is now a way to configure IPv6 in Docker somewhat easily.&lt;/p&gt;&lt;p&gt;Note: This is a simple example of how to enable IPv6 connectivity in your compose deployments. For more advanced IPv6 configuration with routed networks, you can check out this &lt;a href="https://blog.apnic.net/2025/05/19/how-to-configure-routed-ipv6-in-docker/"&gt;blog post on APNIC&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Configure linkding to Log In With Cloudflare Access</title><link>https://ilayk.com/2025/04/16/configure-linkding-to-log-in-with-cloudflare-access.html</link><pubDate>Wed, 16 Apr 2025 08:46:32 +0000</pubDate><guid>https://ilayk.com/2025/04/16/configure-linkding-to-log-in-with-cloudflare-access.html</guid><description>&lt;p&gt;I use &lt;a href="https://linkding.link/"&gt;linkding&lt;/a&gt; as my self-hosted bookmark manager, it’s easy to set up and maintain as a Docker image, can send any bookmark to &lt;a href="https://archive.org/"&gt;archive.org&lt;/a&gt;, but also provides a version with a Chromium browser running to create locally hosted archives of any bookmark. Too many sites nowadays change frequently, and either delete content, change addresses without proper redirects in place, and search engines are becoming worse and worse over time. So I’m happy about that feature, especially since the data is also available locally. You can also use it as a read-it-later service and mark bookmarks as unread.&lt;/p&gt;</description></item><item><title>Music Assistant and Home Assistant: Get config_entry_id</title><link>https://ilayk.com/2025/03/01/music-assistant-and-home-assistant-get-config-entry-id.html</link><pubDate>Sat, 01 Mar 2025 10:09:00 +0000</pubDate><guid>https://ilayk.com/2025/03/01/music-assistant-and-home-assistant-get-config-entry-id.html</guid><description>&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/512/1*4EZWHB0uTc9OXX_KAciSug.png" /&gt;&lt;/figure&gt;&lt;p&gt;I’m running &lt;a href="https://www.music-assistant.io"&gt;Music Assistant&lt;/a&gt; and &lt;a href="https://www.home-assistant.io"&gt;Home Assistant&lt;/a&gt; to manage my smart home, automations and music playback at home. Both systems integrate nicely with each other through various integrations. I can press a button on a light switch and make Home Assistant turn on a smart outlet, some lights and play music from Spotify, Apple Music, YouTube Music, or even files from my local file system on my Sonos speakers. That’s great!&lt;/p&gt;</description></item><item><title>Use Docker (compose) With Different Network Interfaces / VLANs</title><link>https://ilayk.com/2025/01/03/use-docker-compose-with-different-network-interfaces-vlans.html</link><pubDate>Fri, 03 Jan 2025 10:31:16 +0000</pubDate><guid>https://ilayk.com/2025/01/03/use-docker-compose-with-different-network-interfaces-vlans.html</guid><description>&lt;p&gt;I have multiple network interfaces configured on my Linux host system to route between multiple VLANs and use different internet providers. I organize most of my stuff with Docker and Docker Compose, and for some of these services and containers, I want to use a different network route to access the internet. One example would be to balance outgoing traffic between multiple providers or have a download-heavy container use a network with a faster or less used connection.&lt;/p&gt;</description></item><item><title>ChatGPT Search in Alfred</title><link>https://ilayk.com/2025/01/02/chatgpt-search-in-alfred.html</link><pubDate>Thu, 02 Jan 2025 10:09:16 +0000</pubDate><guid>https://ilayk.com/2025/01/02/chatgpt-search-in-alfred.html</guid><description>&lt;h3&gt;ChatGPT Search in Alfred&lt;/h3&gt;&lt;p&gt;After writing about how to use &lt;a href="https://medium.com/@_jonas/perplexity-ai-as-the-default-fallback-search-in-alfred-271223ad0289"&gt;perplexity.ai&lt;/a&gt; as the search engine of choice in &lt;a href="https://www.alfredapp.com/"&gt;Alfred.app&lt;/a&gt;, I’m describing the same for ChatGPT now. I also switched over to ChatGPT for searching instead of perplexity since it surfaces the sources in a more useful way for me, and it also feels like the results are better. YMMV.&lt;/p&gt;&lt;p&gt;When you copy the following URL, open it in your browsers address bar and have Alfred installed, it should automatically open Alfred and add ChatGPT as a custom search. I called it &lt;em&gt;oa&lt;/em&gt; for OpenAI, but since I’m using it also as a default search or fallback, the shortcut doesn’t really matter.&lt;/p&gt;</description></item><item><title>perplexity.ai as the Default (Fallback) Search in Alfred</title><link>https://ilayk.com/2024/05/30/perplexity-ai-as-the-default-fallback-search-in-alfred.html</link><pubDate>Thu, 30 May 2024 09:39:29 +0000</pubDate><guid>https://ilayk.com/2024/05/30/perplexity-ai-as-the-default-fallback-search-in-alfred.html</guid><description>&lt;p&gt;I want to explore &lt;a href="https://www.perplexity.ai/"&gt;perplexity.ai&lt;/a&gt; as a replacement for Google search, but I always manage to not use it because Google is set up as the default everywhere on my system. On macOS, I’m using Safari, which unfortunately doesn’t provide a way to use Perplexity as the default search engine, and I don’t want to resort back to tools such as &lt;a href="https://apps.apple.com/de/app/xsearch-for-safari/id1579902068?l=en-GB"&gt;xSearch&lt;/a&gt; to get this functionality.&lt;/p&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/270/1*JdYkEnRTI01pwvwv-q2W7Q.png" /&gt;&lt;/figure&gt;&lt;p&gt;On macOS, I usually do everything with &lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt;, and the default &lt;em&gt;fallback&lt;/em&gt; search engine in Alfred is also set to Google. I’ve set up a custom search in Alfred for perplexity.ai a long time ago, but since Google is the &lt;em&gt;default&lt;/em&gt; fallback when Alfred doesn’t resolve to a file or application, I end up on Google and barely remember to use my custom perplexity.ai shortcut.&lt;/p&gt;</description></item><item><title>Flash ESPHome on the Sonoff NSPanel</title><link>https://ilayk.com/2024/04/07/flash-esphome-on-the-sonoff-nspanel.html</link><pubDate>Sun, 07 Apr 2024 14:29:34 +0000</pubDate><guid>https://ilayk.com/2024/04/07/flash-esphome-on-the-sonoff-nspanel.html</guid><description>&lt;p&gt;I got the &lt;a href="https://sonoff.tech/product/central-control-panel/nspanel/"&gt;Sonoff NSPanel&lt;/a&gt; (EU Version) to connect it to my home-assistant instance by flashing with it &lt;a href="https://esphome.io/index.html"&gt;esphome&lt;/a&gt;. There are a few guides and video tutorials out there to get started. I’d recommend going to this &lt;a href="https://github.com/Blackymas/NSPanel_HA_Blueprint/tree/main"&gt;GitHub project&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;However, I had some issues flashing ESPHome onto this device since you can’t just connect it using a USB adapter. I’m trying to document how I was finally able to flash ESPhome onto the NSPanel. For everything else, please just use the existing guide(s).&lt;/p&gt;</description></item><item><title>Amazon SES and Mastodon in Docker</title><link>https://ilayk.com/2023/12/31/amazon-ses-and-mastodon-in-docker.html</link><pubDate>Sun, 31 Dec 2023 10:35:48 +0000</pubDate><guid>https://ilayk.com/2023/12/31/amazon-ses-and-mastodon-in-docker.html</guid><description>&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/403/1*PhxZlbDoiTKRw0CASVK7Fw.png" /&gt;&lt;/figure&gt;&lt;p&gt;I’ve been playing around with hosting my own &lt;a href="https://docs.joinmastodon.org/user/run-your-own/"&gt;Mastodon instance&lt;/a&gt; lately. If I continue this journey, I might write more about it. However, this post focuses solely on setting up email notifications between &lt;a href="https://aws.amazon.com/ses/"&gt;Amazon SES&lt;/a&gt; and Mastodon running within a Docker environment.&lt;/p&gt;&lt;p&gt;I had some trouble sending out emails successfully and it took a while to figure things out. With this post I just want to add to the confusion by providing my working configuration.&lt;/p&gt;</description></item><item><title>Quick Bookmarks / Clippings in Obsidian</title><link>https://ilayk.com/2023/05/01/quick-bookmarks-clippings-in-obsidian.html</link><pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate><guid>https://ilayk.com/2023/05/01/quick-bookmarks-clippings-in-obsidian.html</guid><description>&lt;h3&gt;Save Quick Bookmarks / Clippings in Obsidian&lt;/h3&gt;&lt;p&gt;I was looking for a quick and easy way to save links from the page I’m currently on and save them to a single file in Obsidian. Ideally with some tags, so I can find them later on. While I like the idea of saving the whole web page as well, export it as a PDF or PNG so it can be read when I’m offline or the page is gone. While this sounds good, I figured that an offline archive of a website or project probably doesn’t help me ultimately, since, well, it’s offline and I rather want to use things which are still updated and maintained. Just my two cents on this.&lt;/p&gt;</description></item><item><title>Keyboard Maestro- Lowercase File(s)</title><link>https://ilayk.com/2023/04/10/keyboard-maestro-lowercase-file-s.html</link><pubDate>Mon, 10 Apr 2023 00:00:00 +0000</pubDate><guid>https://ilayk.com/2023/04/10/keyboard-maestro-lowercase-file-s.html</guid><description>&lt;h3&gt;Keyboard Maestro: Lowercase File(s)&lt;/h3&gt;&lt;p&gt;&lt;a href="https://static.ilayk.com/lowercase_filename.kmmacros"&gt;Here’s a short Keyboard Maestro Macro&lt;/a&gt; which allows you to select file(s) in macOS Finder and rename them to lowercased filenames. There’s not much else to it otherwise. I configured it as a selection within the Keyboard Maestro Menu Bar icon, or to use it via the global trigger.&lt;/p&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/proxy/1*GuJIgEg6bdZjlGDUv4wpFw.gif" /&gt;&lt;/figure&gt;&lt;img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=2085075cdf5d" width="1" height="1" alt=""&gt;</description></item><item><title>Scrape Cloudflare Tunnel With Prometheus</title><link>https://ilayk.com/2023/01/27/scrape-cloudflare-tunnel-with-prometheus.html</link><pubDate>Fri, 27 Jan 2023 00:00:00 +0000</pubDate><guid>https://ilayk.com/2023/01/27/scrape-cloudflare-tunnel-with-prometheus.html</guid><description>&lt;h3&gt;Scrape Cloudflare Tunnel With Prometheus &amp;amp; Display Data in Grafana&lt;/h3&gt;&lt;p&gt;&lt;a href="https://medium.com/@_jonas/cloudflare-tunnel-as-a-kubernetes-deployment-ingress-9f943cd442a6"&gt;Now that I’m using Cloudflare Tunnel or cloudflared as my &lt;em&gt;ingress&lt;/em&gt; for Kubernetes&lt;/a&gt;, I wanted to gather some metrics from these pods, just to get an overview of what’s going on there. &lt;a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/do-more-with-tunnels/grafana/"&gt;cloudflared exposes a metrics endpoint&lt;/a&gt; which can be &lt;em&gt;scraped&lt;/em&gt; by Prometheus and fed into Grafana to have some fancy graphs.&lt;/p&gt;&lt;p&gt;&lt;a href="https://grafana.com/docs/grafana/latest/getting-started/get-started-grafana-prometheus/"&gt;Here’s a guide on Grafana.com how the two tools work together&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Encouraging The Office Quotes on an e-Paper Display</title><link>https://ilayk.com/2023/01/09/encouraging-the-office-quotes-on-an-e-paper-display.html</link><pubDate>Mon, 09 Jan 2023 00:00:00 +0000</pubDate><guid>https://ilayk.com/2023/01/09/encouraging-the-office-quotes-on-an-e-paper-display.html</guid><description>&lt;h3&gt;Encouraging The Office Quotes on an E Ink Display&lt;/h3&gt;&lt;figure&gt;&lt;img alt="E Ink display with ESP32" src="https://cdn-images-1.medium.com/proxy/1*ho7hD9X2NyWwuKWDkeTN0Q.jpeg" /&gt;&lt;/figure&gt;&lt;p&gt;I got an E Ink Display sometime last year and connected it to a Raspberry Pi Zero to use it as a low-power device to show the weather information for the day, perhaps some other stuff like calendar appointments. The list goes on.&lt;/p&gt;&lt;p&gt;&lt;a href="https://github.com/sevesalm/eInk-weather-display"&gt;There are a few projects out there to get started with this&lt;/a&gt; whole thing.&lt;/p&gt;</description></item><item><title>Cloudflare Tunnel as a Kubernetes Deployment — Ingress</title><link>https://ilayk.com/2022/09/23/cloudflare-tunnel-as-a-kubernetes-deployment-ingress.html</link><pubDate>Fri, 23 Sep 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/09/23/cloudflare-tunnel-as-a-kubernetes-deployment-ingress.html</guid><description>&lt;h3&gt;Cloudflare Tunnel as a Kubernetes Deployment / Ingress&lt;/h3&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8rMj0ICyCzsTsKG4fMcnAw.png" /&gt;&lt;/figure&gt;&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/"&gt;Cloudflare Tunnel&lt;/a&gt; is a great tool to expose web applications to the internet, proxied through Cloudflare. You don’t need to open any incoming ports or allow-list IP-Addresses. It works on a Raspberry Pi at home with an Internet connection behind a NAT, meaning you don’t even need to have a public IP address to expose your services through. It also makes for a great ingress deployment for a k8s/k3s cluster to expose services. With Cloudflare Tunnel, I got rid of my nginx or traefik ingress controller and just expose everything through the cloudflared daemon.&lt;/p&gt;</description></item><item><title>iTerm 2 &amp; tmux &amp; ssh</title><link>https://ilayk.com/2022/06/26/iterm-2-tmux-ssh.html</link><pubDate>Sun, 26 Jun 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/06/26/iterm-2-tmux-ssh.html</guid><description>&lt;h3&gt;iTerm2 &amp;amp; tmux &amp;amp; ssh&lt;/h3&gt;&lt;p&gt;&lt;a href="https://iterm2.com"&gt;iTerm2&lt;/a&gt; offers nice tmux integration, I’m trying to get into the habit of automatically using tmux for all remote SSH sessions, in case my internet connection disconnects while I’m running commands on a remote machine. If I get disconnected, I can easily go back to the task I was doing when I’m back online.&lt;/p&gt;&lt;p&gt;This is another &lt;em&gt;friendly reminder to my future self&lt;/em&gt; to always do this. I had this happen way too often: executing a long-running command on a remote machine, being disconnected from the SSH session and to have to start over. I use the following command to either jump into an existing tmux session, or create a new one if there’s none:&lt;/p&gt;</description></item><item><title>Tailwind CSS Set a Minimum Font Size</title><link>https://ilayk.com/2022/05/19/tailwind-css-set-a-minimum-font-size.html</link><pubDate>Thu, 19 May 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/05/19/tailwind-css-set-a-minimum-font-size.html</guid><description>&lt;h3&gt;Tailwind CSS: Set a Minimum Font Size&lt;/h3&gt;&lt;p&gt;I always like to use the latest and greatest things out there for my side projects, or rather the new things I’m learning about. These days, it’s &lt;a href="https://tailwindcss.com"&gt;Tailwind CSS&lt;/a&gt; to make websites look nice. Specifically also libraries on top of Tailwind CSS which provide components to make things even easier to work with, such as &lt;a href="https://daisyui.com"&gt;daisyUI&lt;/a&gt; or &lt;a href="https://www.hyperui.dev"&gt;HyperUI&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;When you follow the instructions &lt;a href="https://tailwindcss.com/docs/installation"&gt;how to get everything in place and install things&lt;/a&gt;, either provided by one of the component libraries, or Tailwind CSS itself, you find yourself in a good position to start. Now, if you’re not too deep into all of these frameworks and 3rd party solutions and just want to tinker around like I do, I had a bit of trouble to find the right place how to &lt;em&gt;override&lt;/em&gt; default settings or set them globally. For instance, I wanted to set a minimum font size for everything, while still having the option to update individual parts of the site. Let’s do this now.&lt;/p&gt;</description></item><item><title>Kubernetes Custom DNS</title><link>https://ilayk.com/2022/05/02/kubernetes-custom-dns.html</link><pubDate>Mon, 02 May 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/05/02/kubernetes-custom-dns.html</guid><description>&lt;h3&gt;Kubernetes custom DNS with CoreDNS&lt;/h3&gt;&lt;p&gt;&lt;a href="https://medium.com/@_jonas/fix-kubernetes-k3s-dns-on-oracle-cloud-f92ff885c0fe"&gt;I had some DNS trouble with Kubernetes (k3s) on Oracle Cloud.&lt;/a&gt; Unfortunately, the iptables didn&amp;#39;t work reliably, and since the Oracle Infrastructure is just my test environment I didn&amp;#39;t mind &lt;em&gt;patching&lt;/em&gt; the Kubernetes DNS Server &lt;em&gt;CoreDNS&lt;/em&gt; which is used by k3s.&lt;/p&gt;&lt;h4&gt;Export the CoreDNS ConfigMap as YAML&lt;/h4&gt;&lt;p&gt;To get the CoreDNS Configuration as a YAML, you can run this command:&lt;/p&gt;&lt;pre&gt;kubectl get configmap -o yaml -n kube-system coredns &amp;gt; coredns-configmap.yaml&lt;/pre&gt;&lt;p&gt;now, you can either modify the config yourself, or take the example below to use Cloudflare’s DNS Server (see the line with forward . tls://)&lt;/p&gt;</description></item><item><title>Limit CPU Frequency on Linux</title><link>https://ilayk.com/2022/05/01/limit-cpu-frequency-on-linux.html</link><pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/05/01/limit-cpu-frequency-on-linux.html</guid><description>&lt;h3&gt;Limit or Set CPU Frequency on Linux&lt;/h3&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/958/1*znYtxgD4jDuj5ZnOs5IOYQ.png" /&gt;&lt;/figure&gt;&lt;p&gt;I got a Linux home server to run some background tasks, do the occasional streaming, experiment with some things and so on. The idea is to keep it running 24/7 while keeping power consumption as little as possible. That’s super easy with a Mac (just turn it on, and you’re good to go) and I guess to a certain extent also with the Raspberry Pi, since there’s just so much energy the small pc can draw. However, from time to time I need a bit more power than the Raspberry Pi can provide.&lt;/p&gt;</description></item><item><title>Fix Kubernetes / k3s DNS on Oracle Cloud</title><link>https://ilayk.com/2022/04/30/fix-kubernetes-k3s-dns-on-oracle-cloud.html</link><pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/04/30/fix-kubernetes-k3s-dns-on-oracle-cloud.html</guid><description>&lt;p&gt;I’m running &lt;a href="https://k3s.io"&gt;k3s&lt;/a&gt;, a lightweight Kubernetes / k8s environment, on the oracle cloud free tier. However, Oracle does deploy some weird iptables rules onto all of their distributions which one should not delete, otherwise the system will not boot since it can’t mount remote file systems. I’ve done this by accident with ufw rules to deny certain traffic. With this change, I deleted all existing rules and couldn&amp;#39;t start the instance anymore. 🤷‍♂️ &lt;a href="https://docs.oracle.com/en-us/iaas/Content/Compute/References/bestpracticescompute.htm#Essentia"&gt;There&amp;#39;s more about this topic here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Some hidden RSS feeds</title><link>https://ilayk.com/2022/04/23/some-hidden-rss-feeds.html</link><pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/04/23/some-hidden-rss-feeds.html</guid><description>&lt;h3&gt;Some Hidden RSS Feeds&lt;/h3&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/640/1*L33sL1KbvGly0py9NM-03Q.jpeg" /&gt;&lt;figcaption&gt;&lt;a href="https://unsplash.com/@freegraphictoday"&gt;AbsolutVision&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;I still heavily rely on RSS feeds, unfortunately, a lot of them have vanished over the years. However, some of them still exist, and are just hidden away, so that not even an RSS reader/parser can find them. This post is just a friendly reminder for my future self to get some of these feeds back.&lt;/p&gt;&lt;h4&gt;Reddit Feeds&lt;/h4&gt;&lt;p&gt;I still get a lot of value from Reddit, there are nice apps for mobile devices and the &lt;a href="https://old.reddit.com"&gt;old interface is still available&lt;/a&gt;. I guess when the old interface is gone and apps won’t work anymore, I’ll re-think if Reddit is worth it.&lt;/p&gt;</description></item><item><title>Dynamic Social Previews for Your SPA and HTMLRewriter</title><link>https://ilayk.com/2022/02/17/dynamic-social-previews-for-your-spa-and-htmlrewriter.html</link><pubDate>Thu, 17 Feb 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/02/17/dynamic-social-previews-for-your-spa-and-htmlrewriter.html</guid><description>&lt;h3&gt;Dynamic Social Previews for Your SPA With Functions and HTMLRewriter&lt;/h3&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/proxy/1*U5VMg0b61_S3mnoZ52aZ-Q.png" /&gt;&lt;/figure&gt;&lt;p&gt;A couple of weeks ago, we wanted to implement Social Previews into a Single Page Web Application while still having the capability to update the shown preview images based on the query string or route people were visiting.&lt;/p&gt;&lt;p&gt;Essentially, we wanted to display different images for both urls:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://meteocool.com/?latLonZ=53.559035,10.005051,10.00"&gt;https://meteocool.com/?latLonZ=53.559035,10.005051,10.00&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://meteocool.com/?latLonZ=48.140848%2C11.542450%2C11.00"&gt;https://meteocool.com/?latLonZ=48.140848%2C11.542450%2C11.00&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Social Previews&lt;/h4&gt;&lt;p&gt;First, we had to learn about the &lt;a href="https://ogp.me"&gt;Open Graph Protocol&lt;/a&gt;, and that Open Graph is the solution to share images across various social media channels and have them present nicely with an image for the link you’re sharing.&lt;/p&gt;</description></item><item><title>Import or Cross-Post Medium Articles Into Jekyll</title><link>https://ilayk.com/2022/02/13/import-or-cross-post-medium-articles-into-jekyll.html</link><pubDate>Sun, 13 Feb 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/02/13/import-or-cross-post-medium-articles-into-jekyll.html</guid><description>&lt;p&gt;I like publishing articles on my Medium Page, I get nice benefits to engage with the community, statistics, a good user interface, and tons of other stuff. I do most of my writing in &lt;a href="https://ia.net"&gt;iA Writer,&lt;/a&gt; which also has support for &lt;a href="https://medium.com"&gt;medium.com&lt;/a&gt; to publish directly.&lt;/p&gt;&lt;h4&gt;Import Medium RSS Feed&lt;/h4&gt;&lt;p&gt;However, I also want to import all of my writing into Jekyll to make it available on another page as well. I don’t just want to blindly duplicate content on the web. Jekyll conveniently provides an &lt;a href="https://import.jekyllrb.com/docs/rss/"&gt;RSS importer&lt;/a&gt;, which I make use of to import my &lt;a href="https://medium.com"&gt;medium.com&lt;/a&gt; feed into my own Jekyll blog.&lt;/p&gt;</description></item><item><title>Cloudflare Workers KV Migrate Between Accounts / KV Namespaces</title><link>https://ilayk.com/2022/02/02/cloudflare-workers-kv-migrate-between-accounts-kv-namespaces.html</link><pubDate>Wed, 02 Feb 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/02/02/cloudflare-workers-kv-migrate-between-accounts-kv-namespaces.html</guid><description>&lt;p&gt;I recently had to move a Cloudflare KV Namespace from one environment to another, you could use this also to migrate Keys between accounts. To do this, I created a new API Key in the Cloudflare Dashboard with a Read-Only scope of my Workers and KV Namespaces, then I created a new Worker where I wanted to store the entries. This should be the Worker where you want to &lt;em&gt;migrate to&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Authorize Discord Bot with Cloudflare Workers</title><link>https://ilayk.com/2022/01/24/authorize-discord-bot-with-cloudflare-workers.html</link><pubDate>Mon, 24 Jan 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/01/24/authorize-discord-bot-with-cloudflare-workers.html</guid><description>&lt;h3&gt;Authorize Discord Bot With Cloudflare Workers&lt;/h3&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/1024/1*r_fqLP2BTLiecyZyQCkyxQ.png" /&gt;&lt;figcaption&gt;Verify Discord Interactions&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;It took me a while to get my Discord Bot running on Cloudflare Workers. I didn’t want to pull in all the existing frameworks for just one simple, single command I want on my Discord server.&lt;/p&gt;&lt;p&gt;I went out on a quest and tried to configure a Discord Bot on my own with the available Documentation. It was super, duper, I mean, really, super hard to get the right information from the Discord Developer Documentation. I don’t know how such a rich ecosystem of Bots can exist with so many missing pieces in the docs. It might also just be me. But hey, I’ve got it working eventually, and if anyone comes across the same issues: Read on.&lt;/p&gt;</description></item><item><title>Some GitHub Actions Tips</title><link>https://ilayk.com/2022/01/16/some-github-actions-tips.html</link><pubDate>Sun, 16 Jan 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/01/16/some-github-actions-tips.html</guid><description>&lt;p&gt;I’m using &lt;a href="https://docs.github.com/en/actions"&gt;GitHub Actions&lt;/a&gt; frequently enough to know where to look for things and which features are available, but infrequently enough to forget how things are done. Good thing, all my actions are available in GitHub, so I can look things up when I need to.&lt;/p&gt;&lt;p&gt;GitHub Actions are great for a CI/CD and automation platform, integrate great into GitHub itself and offer a generous free tier even for private repositories. I have some trouble with the documentation and just don’t find anything in there or have trouble understanding stuff. So I’ll collect some things here to find them again in the future.&lt;/p&gt;</description></item><item><title>Put Your Kindle Vocabulary Into Anki Cards</title><link>https://ilayk.com/2022/01/10/put-your-kindle-vocabulary-into-anki-cards.html</link><pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/01/10/put-your-kindle-vocabulary-into-anki-cards.html</guid><description>&lt;p&gt;When you use a Kindle and select a word to get the translation or definition, every word can be saved into a local kindle Vocabulary or Dictionary for further reference or to train your language skills, this feature is called &lt;em&gt;vocabulary builder&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Out of curiosity, I recently opened this list to find out that I really looked up a &lt;em&gt;lot&lt;/em&gt; of words and all of them were put into the database. I wanted to extract all these words, get the translation and put it into Anki Flashcards to go through them from time to time. Or not. Anyway, the Vocabulary is a Sqlite3 database, so it can easily be read and put through a service such as Google Translate or DeepL.&lt;/p&gt;</description></item><item><title>Tailscale and Plex- Setup Wizard not Running</title><link>https://ilayk.com/2022/01/01/tailscale-and-plex-setup-wizard-not-running.html</link><pubDate>Sat, 01 Jan 2022 00:00:00 +0000</pubDate><guid>https://ilayk.com/2022/01/01/tailscale-and-plex-setup-wizard-not-running.html</guid><description>&lt;h3&gt;Tailscale and Plex: Setup Wizard not Running&lt;/h3&gt;&lt;p&gt;This is mostly a reminder for my future self in case I’m going to set up Plex via Tailscale again.&lt;/p&gt;&lt;p&gt;I set up a VM and installed Tailscale on it to have it part of my mesh VPN to access it from all my devices without exposing it directly to the internet. Alongside Tailscale, I installed Plex as well to access my media files.&lt;/p&gt;</description></item><item><title>Get Cloudflare IP Address Ranges in Terraform Without Authentication</title><link>https://ilayk.com/2021/12/24/get-cloudflare-ip-address-ranges-in-terraform-without-authentication.html</link><pubDate>Fri, 24 Dec 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/12/24/get-cloudflare-ip-address-ranges-in-terraform-without-authentication.html</guid><description>&lt;p&gt;Cloudflare provides a Terraform Provider to automate nearly everything, including fetching the IP Ranges Cloudflare’s Reverse Proxy is coming from so you can put their IP ranges into a firewall to allow no other traffic.&lt;/p&gt;&lt;p&gt;I’ve got a &lt;em&gt;cloud&lt;/em&gt; instance at Linode and Hetzner and wanted to configure their cloud firewalls so that only Cloudflare IP Addresses are allowed to connect to certain ports and no other addresses. The Cloudflare &lt;a href="https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/data-sources/ip_ranges"&gt;cloudflare_ip_ranges&lt;/a&gt; modules can be used to get the IP ranges used by Cloudflare to create firewall rules automatically.&lt;/p&gt;</description></item><item><title>Delete Unresponsive Bulb From Ikea Tradfri Gateway</title><link>https://ilayk.com/2021/12/18/delete-unresponsive-bulb-from-ikea-tradfri-gateway.html</link><pubDate>Sat, 18 Dec 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/12/18/delete-unresponsive-bulb-from-ikea-tradfri-gateway.html</guid><description>&lt;h3&gt;Delete Unresponsive Bulb From IKEA Tradfri Gateway&lt;/h3&gt;&lt;p&gt;A couple of years ago I bought into the IKEA Smart Home ecosystem with their Tradfri product line and ended up with a lot of lightbulbs, plugs and even the air purifier. Unfortunately, the system hasn’t been reliable at all, very often devices go unresponsive for a couple of minutes, hours, days or even forever. That’s why this blog post exists.&lt;/p&gt;&lt;p&gt;For some weird reason, one IKEA lightbulb went into an &lt;em&gt;unavailable&lt;/em&gt; state in the IKEA Home App and wasn’t associated to any room, it was just part of the list of devices. There was no way to remove the bulb or re-assign it somehow. Funnily enough, Apple’s HomeKit Home App could still see and work with the bulb, but the IKEA remote couldn’t. This situation was just a mess and super confusing. When hitting the Tradfri remote, the light bulb was ignored, when using the Home app or Siri everything was fine. At some point, I just wanted to reset this thing without deleting everything. Good thing, it’s possible with some command line utilities.&lt;/p&gt;</description></item><item><title>Grafana Authentication with Cloudflare Access</title><link>https://ilayk.com/2021/12/10/grafana-authentication-with-cloudflare-access.html</link><pubDate>Fri, 10 Dec 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/12/10/grafana-authentication-with-cloudflare-access.html</guid><description>&lt;p&gt;My Grafana Installation is running on a Kubernetes Cluster, and I wanted a way to access the Grafana Dashboards over the internet without exposing the Ingress or web server directly. Since the site is using Cloudflare for DNS, I wanted to protect the login page with Cloudflare Access and only allow a couple of users by e-mail address to login.&lt;/p&gt;&lt;p&gt;Cloudflare Access provides JWT Tokens and an endpoint to read this information, Grafana also has authentication documentation on &lt;a href="https://grafana.com/docs/grafana/latest/auth/jwt/"&gt;JWT authentication&lt;/a&gt;, but apparently the integration &lt;a href="https://github.com/grafana/grafana/issues/8198"&gt;is broken&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Custom Subdomain for Cloudflare Pages Preview Deployments</title><link>https://ilayk.com/2021/12/05/custom-subdomain-for-cloudflare-pages-preview-deployments.html</link><pubDate>Sun, 05 Dec 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/12/05/custom-subdomain-for-cloudflare-pages-preview-deployments.html</guid><description>&lt;p&gt;&lt;a href="https://pages.cloudflare.com"&gt;Cloudflare Pages&lt;/a&gt; support custom domains to serve Static and Dynamic content. When deployed using git, it also supports to build and deploy so-called &lt;a href="https://developers.cloudflare.com/pages/platform/preview-deployments"&gt;&lt;em&gt;Preview deployments&lt;/em&gt;&lt;/a&gt; based on other branches in the same git repository.&lt;/p&gt;&lt;p&gt;Having preview deployments is a great way to check upcoming changes to a frontend application before having it in &lt;em&gt;production&lt;/em&gt; to not disturb users using it currently and test out changes for development teams or a small amount of users. These preview deployments get their own unique subdomain to check them out online. Unfortunately, preview deployments don’t support custom domains at the moment. This means you can’t have something like &lt;a href="https://beta.example.com"&gt;beta.example.com&lt;/a&gt; for your preview deployment.&lt;/p&gt;</description></item><item><title>Cloudflare Workers: Import / Include HTML Files With esbuild</title><link>https://ilayk.com/2021/11/29/cloudflare-workers-import-include-html-files-with-esbuild.html</link><pubDate>Mon, 29 Nov 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/11/29/cloudflare-workers-import-include-html-files-with-esbuild.html</guid><description>&lt;p&gt;If you’re starting from scratch, &lt;a href="https://pages.cloudflare.com"&gt;Cloudflare Pages&lt;/a&gt; might be the better solution to do this since they also can run &lt;em&gt;functions&lt;/em&gt; now.&lt;/p&gt;&lt;p&gt;If you need more logic in your Workers or have an existing one and want to include some HTML as well, read on.&lt;/p&gt;&lt;p&gt;I’ve got a Worker and want to serve an HTML form when a &lt;strong&gt;GET&lt;/strong&gt; request is made and want to do some other logic when the form is submitted as a &lt;strong&gt;POST&lt;/strong&gt; request.&lt;/p&gt;</description></item><item><title>Scrape RabbitMQ Metrics With Prometheus in Kubernetes</title><link>https://ilayk.com/2021/11/27/scrape-rabbitmq-metrics-with-prometheus-in-kubernetes.html</link><pubDate>Sat, 27 Nov 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/11/27/scrape-rabbitmq-metrics-with-prometheus-in-kubernetes.html</guid><description>&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/350/1*gIXrp6kQqqJbfDhYoz-00Q.png" /&gt;&lt;/figure&gt;&lt;p&gt;… without all the complicated fuzz around it. This is probably only interesting to you if you’re running a Kubernetes cluster with something like &lt;a href="https://k3s.io"&gt;k3s&lt;/a&gt; and want some monitoring and metrics from RabbitMQ without installing extra Kubernetes PlugIns and all these things.&lt;/p&gt;&lt;p&gt;I’m running the kube-prometheus-stack from the &lt;a href="https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack"&gt;prometheus-community github repository&lt;/a&gt;. They have a helm chart available to make installing easy.&lt;/p&gt;&lt;h4&gt;install kube-prometheus-stack&lt;/h4&gt;&lt;p&gt;I’m just going with the default things here:&lt;/p&gt;&lt;pre&gt;kubectl create ns monitoring&lt;br&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts&lt;br&gt;helm repo update&lt;br&gt;helm install -n monitoring monitoring prometheus-community/kube-prometheus-stack&lt;/pre&gt;&lt;h4&gt;RabbitMQ ServiceMonitor&lt;/h4&gt;&lt;p&gt;Now, to make Prometheus scrape the metrics from RabbitMQ, first make sure that you’re running the RabbitMQ management container image, right now this would be: 3.9-management. The releases are &lt;a href="https://registry.hub.docker.com/_/rabbitmq/"&gt;available on Docker Hub&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Stream Video From Raspberry Pi to a RTMP Server</title><link>https://ilayk.com/2021/11/01/stream-video-from-raspberry-pi-to-a-rtmp-server.html</link><pubDate>Mon, 01 Nov 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/11/01/stream-video-from-raspberry-pi-to-a-rtmp-server.html</guid><description>&lt;h3&gt;Stream Video From Raspberry Pi to an RTMP Server&lt;/h3&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ULjwrZrCQMGCnoNYafhQ8w.png" /&gt;&lt;figcaption&gt;Enable the Camera with raspi-config&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;I wanted to do some testing with video streaming from my Raspberry Pi to RTMP output. This is what most streaming platforms, such as Twitch and YouTube provide to send streams there.&lt;/p&gt;&lt;p&gt;I didn’t want to send my stream to a public endpoint, so I used &lt;a href="https://developers.cloudflare.com/stream/"&gt;Cloudflare Stream&lt;/a&gt;.&lt;/p&gt;&lt;h4&gt;Enable Camera Support on the Pi&lt;/h4&gt;&lt;p&gt;I assume that &lt;a href="https://www.raspberrypi.com/software/"&gt;Raspberry Pi OS&lt;/a&gt; is used (the light version works fine).&lt;/p&gt;</description></item><item><title>restic failed- nonce is invalid error</title><link>https://ilayk.com/2021/10/25/restic-failed-nonce-is-invalid-error.html</link><pubDate>Mon, 25 Oct 2021 00:00:00 +0000</pubDate><guid>https://ilayk.com/2021/10/25/restic-failed-nonce-is-invalid-error.html</guid><description>&lt;h3&gt;restic - failed: nonce is invalid error&lt;/h3&gt;&lt;figure&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8QC3eArfC_ZsfxiI8Emfyg.png" /&gt;&lt;/figure&gt;&lt;p&gt;I’m using &lt;a href="https://restic.net"&gt;restic&lt;/a&gt; to back up a few of my servers to &lt;a href="https://www.backblaze.com"&gt;Backblaze’s&lt;/a&gt; b2 storage. Occasionally I also clean up after old snapshots to keep the bill &lt;em&gt;low&lt;/em&gt; for my files. For some reason, restic wasn’t able to delete a snapshot, and I just got this error message when running restic prune to remove all unreferenced files from snapshots:&lt;/p&gt;&lt;pre&gt;repository 112911b9 opened successfully, password is correct&lt;br&gt;loading indexes...&lt;br&gt;loading all snapshots...&lt;br&gt;finding data that is still in use for 95 snapshots&lt;br&gt;[16:29] 3.16% 3 / 95 snapshots&lt;br&gt;decrypting blob bc103b4a84971ef6459b294a2b98568a2bfb72cded09d4acd1e16366a401f95b failed: nonce is invalid&lt;br&gt;github.com/restic/restic/internal/repository.(*Repository).LoadBlob&lt;br&gt; /restic/internal/repository/repository.go:204&lt;br&gt;github.com/restic/restic/internal/repository.(*Repository).LoadTree&lt;br&gt; /restic/internal/repository/repository.go:728&lt;br&gt;github.com/restic/restic/internal/restic.loadTreeWorker&lt;br&gt; /restic/internal/restic/tree_stream.go:37&lt;br&gt;github.com/restic/restic/internal/restic.StreamTrees.func1&lt;br&gt; /restic/internal/restic/tree_stream.go:164&lt;br&gt;golang.org/x/sync/errgroup.(*Group).Go.func1&lt;br&gt; /home/build/go/pkg/mod/golang.org/x/sync@v0.0.0-20210220032951-036812b2e83c/errgroup/errgroup.go:57&lt;br&gt;runtime.goexit&lt;br&gt; /usr/local/go/src/runtime/asm_arm.s:841&lt;/pre&gt;&lt;p&gt;I don’t know what exactly happened, but apparently restic wasn’t able to decrypt a blob stored in b2. Does it mean they had a failure and restic wasn’t able to recover? Did restic make some mistake? Did I? Don’t know. It’s worrisome, and I couldn’t find anything &lt;em&gt;meaningful&lt;/em&gt; online.&lt;/p&gt;</description></item><item><title>IKEA Not So Smart Home</title><link>https://ilayk.com/2021/09/08/ikea-not-so-smart-home.html</link><pubDate>Thu, 09 Sep 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/09/08/ikea-not-so-smart-home.html</guid><description>&lt;p&gt;IKEA Smart Home / Tradfri: Every couple of days or weeks doing things like this making one reconnect to the home hub, and in the worst case they want you to set up the whole home again from the beginning.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://ilayk.com/assets/files/ikea%20mess.jpeg" alt="ikea not so smart home"&gt;&lt;/p&gt;
&lt;p&gt;Then there&amp;rsquo;s Philips Hue for example: Set it and forget it. Rock solid for 4+ years.&lt;/p&gt;
&lt;p&gt;While Hue stuff is expensive compared to IKEA, it just works. Either go with the reliable things or keep the home stupid instead of having to deal with a new configuration at unexpected times multiple times a year.&lt;/p&gt;</description></item><item><title>Synology DSM 7 Upgrade</title><link>https://ilayk.com/2021/08/07/synology-DSM-7-upgrade.html</link><pubDate>Sun, 08 Aug 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/08/07/synology-DSM-7-upgrade.html</guid><description>&lt;p&gt;I made the mistake and updated my Synology NAS &lt;em&gt;DSM&lt;/em&gt; Software to their big new version 7. For some reason, I assumed that the update would go smooth since I didn&amp;rsquo;t do any fancy things with my Synology NAS except using it as a dumb storage hub. I was never a friend of putting all the things they offer on there without a lot of knowledge how things are going on under the hood in order to fix anything or god forbid debug something.&lt;/p&gt;</description></item><item><title>Cloudflare Workers: Iterate / Loop Over KV Namespace</title><link>https://ilayk.com/2021/07/30/cloudflare-workers,-iterate-loop-over-kv-namespace.html</link><pubDate>Sat, 31 Jul 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/07/30/cloudflare-workers,-iterate-loop-over-kv-namespace.html</guid><description>&lt;p&gt;Loop / iterate over KV keys in Cloudflare workers. In this example, I limited the output for the &lt;code&gt;list&lt;/code&gt; request to &lt;strong&gt;2&lt;/strong&gt; on purpose to check if everything works as expected.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;async&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;listAll&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// list all keys from a given NAMESPACE,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// in this example the output is limited to two on purpose
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// to make it paginate. The default is 1000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;NAMESPACE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;list&lt;/span&gt;({ &lt;span style="color:#a6e22e"&gt;limit&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;type&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;json&amp;#39;&lt;/span&gt; })
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// get cursor, if returned
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cursor&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;cursor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;loop&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// get entries from first call above
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;output&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; { ...&lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;keys&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// as long as `entries.list_complete` is false, loop over the next block
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;list_complete&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;let&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;next_value&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;await&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;NAMESPACE&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;list&lt;/span&gt;({ &lt;span style="color:#a6e22e"&gt;cursor&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cursor&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;limit&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;type&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;json&amp;#39;&lt;/span&gt; })
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// update `entries.list_complete` to break the loop
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// as soon as we&amp;#39;ve got all keys
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;entries&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;list_complete&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;next_value&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;list_complete&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// update cursor for the next call
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;cursor&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;next_value&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;cursor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;loop&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;push&lt;/span&gt;(...&lt;span style="color:#a6e22e"&gt;next_value&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;keys&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// merge keys from very first output with all the subsequent keys
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// from paginated calls
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;output&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; { ...&lt;span style="color:#a6e22e"&gt;output&lt;/span&gt;, ...&lt;span style="color:#a6e22e"&gt;loop&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://developers.cloudflare.com/workers/runtime-apis/kv" class="external-link" target="_blank" rel="noopener"&gt;Cloudflare workers KV docs&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Fix oh-my-zsh &amp; Term Copy / Paste Backslashes</title><link>https://ilayk.com/2021/07/23/fix-oh-my-zsh-&amp;-iterm-copy-paste-backslashes.html</link><pubDate>Sat, 24 Jul 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/07/23/fix-oh-my-zsh-&amp;-iterm-copy-paste-backslashes.html</guid><description>&lt;p&gt;tl;dr:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;search in your &lt;code&gt;~/.zshrc&lt;/code&gt; file for &lt;code&gt;source $ZSH/oh-my-zsh.sh&lt;/code&gt; and prepend this:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DISABLE_MAGIC_FUNCTIONS&lt;span style="color:#f92672"&gt;=&lt;/span&gt;true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;Open iTerm 2 Preferences, Profile Tab, Terminal Tab, &lt;strong&gt;untick&lt;/strong&gt; this: &lt;em&gt;Terminal may enable paste bracketing&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;profit&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;This has been an annoyance for months or years now, and I never got around to fix it, since it was never &lt;em&gt;too&lt;/em&gt; annoying, but rather just annoying. Let&amp;rsquo;s fix things! What exactly?&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m an oh-my-zsh user and when you copy and paste things into the terminal, it&amp;rsquo;ll automatically put backslashes in front of various characters to make them work when executing the command, this usually happens when you&amp;rsquo;re pasting a URL into your terminal when you want to test something with &lt;em&gt;curl&lt;/em&gt; for example.&lt;/p&gt;</description></item><item><title>Read Fritz!Box DSL Link Speed</title><link>https://ilayk.com/2021/07/17/read-fritz!box-DSL-link-speed.html</link><pubDate>Sun, 18 Jul 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/07/17/read-fritz!box-DSL-link-speed.html</guid><description>&lt;p&gt;When you live in an internet 3rd world country like Germany, chances are you&amp;rsquo;re using a Fritz!Box and have a bad or slow internet connection. In my case, the speed varies from time to time and it requires a restart of the router to get back to &lt;em&gt;normal&lt;/em&gt;. There are a few projects out there to &lt;a href="https://github.com/geerlingguy/internet-pi" class="external-link" target="_blank" rel="noopener"&gt;monitor internet speed on a Raspberry Pi&lt;/a&gt;, putting everything into a Grafana dashboard and so on.&lt;/p&gt;</description></item><item><title>Trying to Fix iCloud Drive Syncing Issues</title><link>https://ilayk.com/2021/07/01/trying-to-fix-iCloud-Drive-syncing-issues.html</link><pubDate>Fri, 02 Jul 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/07/01/trying-to-fix-iCloud-Drive-syncing-issues.html</guid><description>&lt;p&gt;You probably don&amp;rsquo;t know that iCloud Drive didn&amp;rsquo;t sync some files until you need them and were sure you put them in there. Well, that&amp;rsquo;s Apple&amp;rsquo;s &lt;em&gt;sync&lt;/em&gt; story ever since I started using &lt;code&gt;.Mac&lt;/code&gt; a long time ago. It just never worked. With .Mac and &lt;em&gt;iDisk&lt;/em&gt; it was way worse, they also had the option to sync items in the Dock etc. and it was always a mess, good thing they got rid of it.&lt;/p&gt;</description></item><item><title>Fix Discourse Browser Search</title><link>https://ilayk.com/2021/06/24/fix-discourse-browser-search.html</link><pubDate>Fri, 25 Jun 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/06/24/fix-discourse-browser-search.html</guid><description>&lt;p&gt;tl;dr: hit &lt;code&gt;cmd + f&lt;/code&gt; / &lt;code&gt;ctrl + f&lt;/code&gt; twice&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.discourse.org" class="external-link" target="_blank" rel="noopener"&gt;discourse&lt;/a&gt; is the 2020+ hipster forum software everyone uses for the communities nowadays. I somewhat like it but it&amp;rsquo;s also mostly confusing to me.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s just super &lt;strong&gt;annoying&lt;/strong&gt; is, that it hijacks the default shortcut for the browser&amp;rsquo;s search function &lt;code&gt;cmd&lt;/code&gt; + &lt;code&gt;f&lt;/code&gt; / &lt;code&gt;ctrl&lt;/code&gt; + &lt;code&gt;f&lt;/code&gt;. discourse thinks it&amp;rsquo;s smarter than you, but it&amp;rsquo;s just not, at least not for my use-cases. but hey, there&amp;rsquo;s a &lt;strong&gt;way to fix this&lt;/strong&gt;, just hit &lt;code&gt;cmd + f&lt;/code&gt; &lt;strong&gt;twice&lt;/strong&gt; and it&amp;rsquo;ll fallback to the default browser search.&lt;/p&gt;</description></item><item><title>iterm2 Disable Command + Return Shortcut</title><link>https://ilayk.com/2021/06/17/iterm2-disable-command-+-return-shortcut.html</link><pubDate>Fri, 18 Jun 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/06/17/iterm2-disable-command-+-return-shortcut.html</guid><description>&lt;p&gt;iTerm 2 is awesome but using the shortcut &lt;code&gt;command + return&lt;/code&gt; to enter fullscreen mode is just super annoying to me since I hit it way too often when I don&amp;rsquo;t mean to.&lt;/p&gt;
&lt;p&gt;If I want to go into fullscreen mode, I&amp;rsquo;d rather prefer the &lt;em&gt;native&lt;/em&gt; or &lt;em&gt;standard&lt;/em&gt; way of most macOS apps: &lt;code&gt;control + command + f&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure I found this solution at some point on StackOverflow but I need it as a reminder here. I&amp;rsquo;ll probably end up on stackoverflow again in the future&amp;hellip; but hey.&lt;/p&gt;</description></item><item><title>(Waveshare) ESP32 Driver Board With Micropython and V2 7.5inch Display</title><link>https://ilayk.com/2021/06/13/(Waveshare)-ESP32-Driver-Board-with-Micropython-and-V2-7.5-Display.html</link><pubDate>Mon, 14 Jun 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/06/13/(Waveshare)-ESP32-Driver-Board-with-Micropython-and-V2-7.5-Display.html</guid><description>&lt;p&gt;There are some micropython drivers out there for the waveshare display(s), &lt;a href="https://github.com/mcauser/micropython-waveshare-epaper" class="external-link" target="_blank" rel="noopener"&gt;here&amp;rsquo;s one&lt;/a&gt; and &lt;a href="https://github.com/tanahy/micropython-waveshare-epaper/tree/dev" class="external-link" target="_blank" rel="noopener"&gt;here&amp;rsquo;s a fork for the V2 7.5&amp;quot; display&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, both don&amp;rsquo;t work with the &lt;a href="https://www.waveshare.com/e-paper-esp32-driver-board.htm" class="external-link" target="_blank" rel="noopener"&gt;ESP32 Driver Board from Waveshare&lt;/a&gt; (they call it &lt;em&gt;Universal e-Paper Raw Panel Driver Board, ESP32 WiFi / Bluetooth Wireless&lt;/em&gt;) with the connector for the display already built in, so you need to make some changes to your code to address the correct pins.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m super new to this, learned this in a couple of hours and &lt;del&gt;probably&lt;/del&gt; don&amp;rsquo;t understand a thing, but&amp;hellip; it works. Take that, world!&lt;/p&gt;</description></item><item><title>Email to Discord Webhook with Amazon SES and AWS Lambda</title><link>https://ilayk.com/2021/06/11/email-to-discord-webhook-with-amazon-ses-and-aws-lambda.html</link><pubDate>Sat, 12 Jun 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/06/11/email-to-discord-webhook-with-amazon-ses-and-aws-lambda.html</guid><description>&lt;p&gt;tl;dr&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;create discord webhook&lt;/li&gt;
&lt;li&gt;save incoming e-mails to amazon S3 using SES&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/pew/fcf8aa4d15329cf7ab3365ab6563a8c6" class="external-link" target="_blank" rel="noopener"&gt;trigger lambda function&lt;/a&gt; for each new e-mail, send it to discord&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is a poor man&amp;rsquo;s solution for an email supported feedback system feeding into a discord channel using Amazon SES and AWS Lambda to handle e-mails and move them around.&lt;/p&gt;
&lt;p&gt;If you want something quick and easy, there are ways to connect e-mail to discord with automation tools like Zapier, IFTTT, Integromat and so on. But hey, they cost money and we&amp;rsquo;re cheap. Right? At some point I need a cup of coffee and can&amp;rsquo;t spend it on another service.&lt;/p&gt;</description></item><item><title>Homebridge Reliability</title><link>https://ilayk.com/2021/06/07/homebridge-reliability.html</link><pubDate>Tue, 08 Jun 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/06/07/homebridge-reliability.html</guid><description>&lt;p&gt;tl;dr: restart it every day and you&amp;rsquo;re probably good to go.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;homebridge is an awesome project to bring &lt;em&gt;unsupported&lt;/em&gt; devices into Apple&amp;rsquo;s HomeKit to extend its functionality. I&amp;rsquo;ve got an IKEA Tradfri / Smart Home Hub at home and use it mostly with Ikea light bulbs which integrate natively into HomeKit. However, I also ended up with some Philips Hue bulbs, especially the Iris and Lightstrip. It&amp;rsquo;s possible to pair them with the IKEA Hub but they&amp;rsquo;re not exposed into HomeKit which makes the whole thing useless. This is where homebridge comes in.&lt;/p&gt;</description></item><item><title>Cloudflared / Argo Tunnel on a Raspberry Pi Zero</title><link>https://ilayk.com/2021/05/23/Cloudflared-Argo-Tunnel-on-a-Raspberry-Pi-Zero.html</link><pubDate>Mon, 24 May 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/05/23/Cloudflared-Argo-Tunnel-on-a-Raspberry-Pi-Zero.html</guid><description>&lt;p&gt;this super quick n dirty list will download and install &lt;em&gt;go&lt;/em&gt;, set the path for go, clone the cloudflared git repository and compiles &lt;code&gt;cloudflared&lt;/code&gt; to finally move it into &lt;code&gt;/usr/local/bin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;this is just required for the raspberry pi zero, for the rpi 3 and up the binaries provided by Cloudflare work out of the box.&lt;/p&gt;
&lt;p&gt;please adapt the first 2 lines with the version you actually want to install. The cloudflared &lt;a href="https://github.com/cloudflare/cloudflared/tags" class="external-link" target="_blank" rel="noopener"&gt;tags can be found here&lt;/a&gt; and the current &lt;a href="https://golang.org/dl/" class="external-link" target="_blank" rel="noopener"&gt;go version here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>host header override cloudflare tunnel</title><link>https://ilayk.com/2021/05/10/host-header-override-cloudflare-tunnel.html</link><pubDate>Tue, 11 May 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/05/10/host-header-override-cloudflare-tunnel.html</guid><description>&lt;p&gt;I have a router at home which checks for the host header of the incoming request, meaning I need to access the routers web interface either by IP or the name given from the provider, such as `router.local`. However, I also want to access my router via Cloudflare tunnel securely, which is awesome if I need to help out family and friends.&lt;/p&gt;
&lt;p&gt;I have a raspberry pi zero setup, with Cloudflare tunnel (you need to compile it for the pi zero) and I’m pointing a public host name to my router’s IP address. Now, when I want to access the router, I get an error message that I’m not requesting the page from the right origin, since it’s the public hostname I just configured. Let’s change that in the &lt;code&gt;cloudflared.yaml&lt;/code&gt; config file:&lt;/p&gt;</description></item><item><title>kubectl debug</title><link>https://ilayk.com/2021/04/17/kubectl-debug.html</link><pubDate>Sun, 18 Apr 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/04/17/kubectl-debug.html</guid><description>&lt;p&gt;TIL: debug kubernetes pods when they use some image without shell access, like &lt;a href="https://github.com/GoogleContainerTools/distroless" class="external-link" target="_blank" rel="noopener"&gt;distroless&lt;/a&gt; or &lt;a href="https://hub.docker.com/_/scratch" class="external-link" target="_blank" rel="noopener"&gt;scratch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;copy the container you want to debug to another pod with the &lt;code&gt;busybox&lt;/code&gt; image to get a shell. also, include &lt;code&gt;--share-processes&lt;/code&gt; to even get the processes available on the debug container.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl debug -it logging-fluentbit-m2v94 --copy-to&lt;span style="color:#f92672"&gt;=&lt;/span&gt;fluentdebug --image&lt;span style="color:#f92672"&gt;=&lt;/span&gt;busybox --share-processes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;don&amp;rsquo;t forget to remove things afterwards:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete pod fluentdebug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;all the docs &lt;a href="https://kubernetes.io/docs/tasks/debug-application-cluster/debug-running-pod/" class="external-link" target="_blank" rel="noopener"&gt;are available here&lt;/a&gt; and this might be the better source after all, since things change &amp;hellip; like daily.&lt;/p&gt;</description></item><item><title>nextcloud reverse proxy http/https mismatch (SSO, LDAP config)</title><link>https://ilayk.com/2021/04/14/nextcloud-reverse-proxy-https-http-mismatch.html</link><pubDate>Thu, 15 Apr 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/04/14/nextcloud-reverse-proxy-https-http-mismatch.html</guid><description>&lt;p&gt;Let&amp;rsquo;s say you&amp;rsquo;re using nextcloud with a reverse proxy in front of it and only the reverse proxy handles SSL, but you&amp;rsquo;re still communicating via plain http with your nextcloud instance. Probably not something you should do, but will probably end up doing, especially if it&amp;rsquo;s just for home usage or some other quick and dirty setup.&lt;/p&gt;
&lt;p&gt;You might run into problems as you as you&amp;rsquo;re going to configure nextcloud with an SSO, LDAP, AD provider since they expect that the right metadata and IdP urls are matching exactly. Your nextcloud will respond with &lt;code&gt;http&lt;/code&gt; whilst the IdP such as Okta expects &lt;code&gt;https&lt;/code&gt; for some good reasons.&lt;/p&gt;</description></item><item><title>kubernetes ingress-nginx CORS with multiple origins</title><link>https://ilayk.com/2021/04/01/ingress-nginx-cors-multiple-origin.html</link><pubDate>Fri, 02 Apr 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/04/01/ingress-nginx-cors-multiple-origin.html</guid><description>&lt;p&gt;&lt;a href="https://github.com/kubernetes/ingress-nginx/issues/5496" class="external-link" target="_blank" rel="noopener"&gt;ingress-nginx doesn&amp;rsquo;t support CORS with multiple origins&lt;/a&gt;, this has been an issue for quite a while. If you just have one domain, you can use a &lt;a href="https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#enable-cors" class="external-link" target="_blank" rel="noopener"&gt;simple two-line annotation&lt;/a&gt; to allow cors rules for this domain.&lt;/p&gt;
&lt;p&gt;However, if you&amp;rsquo;ve got multiple domains (let&amp;rsquo;s say localhost for development and your own domain) and maybe even socket.io for websockets, try this in your ingress &lt;code&gt;annotations&lt;/code&gt; block:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; nginx.ingress.kubernetes.io/configuration-snippet: |
 if ($http_origin ~* &amp;#34;http.?:\/\/(.*\.)?(localhost:8080|example\.com).*$&amp;#34;) {
 add_header &amp;#34;Access-Control-Allow-Origin&amp;#34; &amp;#34;$http_origin&amp;#34; always;
 add_header &amp;#34;Access-Control-Allow-Methods&amp;#34; &amp;#34;GET, PUT, POST, OPTIONS&amp;#34; always;
 add_header &amp;#34;Access-Control-Allow-Headers&amp;#34; &amp;#34;DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization&amp;#34; always;
 add_header &amp;#34;Access-Control-Expose-Headers&amp;#34; &amp;#34;Content-Length,Content-Range&amp;#34; always;
 }
 if ($uri ~* &amp;#34;/socket.io/&amp;#34;) {
 add_header &amp;#34;Access-Control-Allow-Origin&amp;#34; &amp;#34;&amp;#34; always;
 }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The snippet above checks if the origin request contains either the origin &lt;code&gt;http(s)://localhost:8080&lt;/code&gt; or &lt;code&gt;http(s)://example.com&lt;/code&gt;. If it matches it&amp;rsquo;ll add the requested origin as a cors header, if there&amp;rsquo;s no match, no headers will be added.&lt;/p&gt;</description></item><item><title>autofs - mount directories when needed</title><link>https://ilayk.com/2021/03/25/autofs.html</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/03/25/autofs.html</guid><description>&lt;p&gt;I totally forgot about &lt;em&gt;autofs&lt;/em&gt; to mount NFS shares on-demand aka when I need to access them. I also forgot that I created this &lt;a href="https://man.ilayk.com/man/autofs/" class="external-link" target="_blank" rel="noopener"&gt;little page about it already&lt;/a&gt;, so I need to post it here again. Hopefully this will be a reminder for me in the future.&lt;/p&gt;
&lt;p&gt;I use it to automatically mount exposed nfs shares on my Synology NAS to be mounted on my Raspberry Pi when I need to access files. Usually I just do a backup of my Pi every couple of days automatically and the shares will be mounted or when I access my media library through the Pi on the Synology. Otherwise the NFS share(s) are not mounted.&lt;/p&gt;</description></item><item><title>cloudflared Argo Tunnel with Docker</title><link>https://ilayk.com/2021/03/25/cloudflared.html</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/03/25/cloudflared.html</guid><description>&lt;p&gt;It&amp;rsquo;s a bit hard to use &lt;a href="https://www.cloudflare.com/products/argo-tunnel/" class="external-link" target="_blank" rel="noopener"&gt;Cloudflare&amp;rsquo;s Argo Tunnel&lt;/a&gt; with Docker when you don&amp;rsquo;t have any configuration in place already, I&amp;rsquo;m trying to break down the steps here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;create a volume:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First start by creating a docker volume to hold the configuration data:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker volume create cloudflared
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;now the annoying thing comes to play, &lt;strong&gt;fix the permissions&lt;/strong&gt; for the volume. I guess and hope there&amp;rsquo;s a better way but I just don&amp;rsquo;t know of any other. Get the path of the docker volume, you can use &lt;code&gt;docker volume inspect cloudflared&lt;/code&gt; for this to get the path, usually it&amp;rsquo;s in &lt;code&gt;/var/lib/docker/volumes&lt;/code&gt;&lt;/p&gt;</description></item><item><title>annoying pin number requirements</title><link>https://ilayk.com/2021/03/14/pin-numbers.html</link><pubDate>Mon, 15 Mar 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/03/14/pin-numbers.html</guid><description>&lt;ul&gt;
&lt;li&gt;phone: 6 digit pin&lt;/li&gt;
&lt;li&gt;bank A: 4 digit pin&lt;/li&gt;
&lt;li&gt;bank B: 5 digit pin&lt;/li&gt;
&lt;li&gt;bank C: max. 6 character long alphanumeric pin&lt;/li&gt;
&lt;li&gt;bank D: 6-12 character long alphanumeric pin&lt;/li&gt;
&lt;li&gt;bank E: 4 digit pin, do not use the same number twice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is so annoying. Also, I should probably get rid of 4 bank accounts.&lt;/p&gt;</description></item><item><title>Cloudflare DNS over TLS (DoT)</title><link>https://ilayk.com/2021/03/04/cloudflare-dot-dns.html</link><pubDate>Fri, 05 Mar 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/03/04/cloudflare-dot-dns.html</guid><description>&lt;p&gt;I already configured my pi-hole server to use &lt;a href="https://ilayk.com/2021/02/12/pi-hole-docker-and-cloudflared-doh.html" &gt;Cloudflare DNS over HTTPS&lt;/a&gt; but I also wanted to configure my router to use other DNS services such as 1.1.1.1 and/or 8.8.8.8 in an encrypted way. My router (a fritz!box) doesn&amp;rsquo;t support &lt;a href="https://www.cloudflare.com/learning/dns/dns-over-tls/" class="external-link" target="_blank" rel="noopener"&gt;DNS over HTTPS but DNS over TLS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I couldn&amp;rsquo;t find the Cloudflare DoT endpoint easily on the web, so this post is just a reminder for my future-self:&lt;/p&gt;
&lt;p&gt;Use this for DoT:&lt;/p&gt;</description></item><item><title>pi-hole in docker &amp; cloudflared DNS-Over-HTTPS (DoH)</title><link>https://ilayk.com/2021/02/12/pi-hole-docker-and-cloudflared-doh.html</link><pubDate>Sat, 13 Feb 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/02/12/pi-hole-docker-and-cloudflared-doh.html</guid><description>&lt;p&gt;If you&amp;rsquo;ve followed &lt;a href="https://docs.pi-hole.net/guides/dns/cloudflared/" class="external-link" target="_blank" rel="noopener"&gt;this tutorial&lt;/a&gt; to set up DoH for pi-hole but happen to run pi-hole in a docker container, you&amp;rsquo;ve probably got some trouble resolving DNS entries since they&amp;rsquo;re using &lt;code&gt;127.0.0.1#5053&lt;/code&gt; for the DNS configuration. This doesn&amp;rsquo;t work when pi-hole is running in a docker container since the &lt;code&gt;cloudflared&lt;/code&gt; daemon is either running on the &lt;em&gt;host&lt;/em&gt; system or within another docker container.&lt;/p&gt;
&lt;p&gt;Ideally, you&amp;rsquo;d run &lt;code&gt;cloudflared&lt;/code&gt; in another docker container and get the IP address fixed somehow and use this one in pi-hole. but since we&amp;rsquo;re at home and kinda lazy, we just followed the tutorial and need another way to use DoH.&lt;/p&gt;</description></item><item><title>hetzner dedicated server with btrfs</title><link>https://ilayk.com/2021/02/05/hetzner-dedicated-server-btrfs.html</link><pubDate>Sat, 06 Feb 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/02/05/hetzner-dedicated-server-btrfs.html</guid><description>&lt;p&gt;This is just a reminder for my future self on how to set up a hetzner dedicated server with btrfs in rescue mode. I think the examples they provided were a bit confusing, at least to me.&lt;/p&gt;
&lt;p&gt;We needed a filesystem without the notion of &lt;code&gt;inodes&lt;/code&gt; since we were dealing with millions of super teeny-tiny files and &lt;code&gt;ext4&lt;/code&gt; wasn&amp;rsquo;t suitable for this without lots of modifications since we were also using kubernetes with a managed storage controller and couldn&amp;rsquo;t adapt the ext4 formatting options.&lt;/p&gt;</description></item><item><title>hetzner cloud server ipv6 &amp; wireguard</title><link>https://ilayk.com/2021/01/31/make-hetzner-cloud-server-work-with-wireguard.html</link><pubDate>Mon, 01 Feb 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/01/31/make-hetzner-cloud-server-work-with-wireguard.html</guid><description>&lt;p&gt;another quick reminder to my future self, when I&amp;rsquo;m about to create a new hetzner cloud server and my ipv6 wireguard connection doesn&amp;rsquo;t work with vpn solutions &lt;a href="https://github.com/trailofbits/algo" class="external-link" target="_blank" rel="noopener"&gt;such as algo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;change the ipv6 interface &lt;code&gt;/etc/network/interfaces.d/50-cloud-init.cfg&lt;/code&gt; from &lt;code&gt;eth0:0&lt;/code&gt; to &lt;code&gt;eth0&lt;/code&gt;, like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@wg: cat /etc/network/interfaces.d/50-cloud-init.cfg
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init&amp;#39;s network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
 dns-nameservers 213.133.99.99 213.133.100.100 213.133.98.98

auto eth0
iface eth0 inet6 static
 address 2a01:4f8:c2c:beef::1/64
 gateway fe80::1
 post-up route add -net :: netmask 0 gw fe80::1%eth0 || true
 pre-down route del -net :: netmask 0 gw fe80::1%eth0 || true
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;this way, algo and wireguard recognize the correct networking interface to use ipv6 properly.&lt;/p&gt;</description></item><item><title>rancher kubernetes with wireguard network interface</title><link>https://ilayk.com/2021/01/23/rancher-wireguard-network-interface.html</link><pubDate>Sun, 24 Jan 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/01/23/rancher-wireguard-network-interface.html</guid><description>&lt;p&gt;this post will be more like a reminder for my future self, when I&amp;rsquo;m about to install Rancher for the 10th time in a row on a given day and it&amp;rsquo;s driving me crazy about networking.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m using a Wireguard VPN to connect multiple kubernetes nodes together to have an internal network since they&amp;rsquo;re spread across different &lt;em&gt;cloud&lt;/em&gt; providers or they&amp;rsquo;re with a provider who claims to be &lt;em&gt;cloud native&lt;/em&gt; but doesn&amp;rsquo;t know about the concept of a VPC.&lt;/p&gt;</description></item><item><title>smart home camera annoyances</title><link>https://ilayk.com/2021/01/07/smart-home-camera-annoyances.html</link><pubDate>Fri, 08 Jan 2021 00:00:00 +0100</pubDate><guid>https://ilayk.com/2021/01/07/smart-home-camera-annoyances.html</guid><description>&lt;p&gt;I got this eufy Apple HomeKit compatible camera and finally got it connected to HomeKit after a few weeks of trying. During the set up process HomeKit offered a &lt;em&gt;recommended&lt;/em&gt; scene to turn on the light in the same room where the camera is. Since it&amp;rsquo;s in the entrance area I liked the idea to use motion detection to turn the light on and off automatically, so I don&amp;rsquo;t have to use the light switch when I&amp;rsquo;m leaving or arriving in my apartment.&lt;/p&gt;</description></item><item><title>apple homekit</title><link>https://ilayk.com/2020/12/28/apple-homekit.html</link><pubDate>Tue, 29 Dec 2020 00:00:00 +0100</pubDate><guid>https://ilayk.com/2020/12/28/apple-homekit.html</guid><description>&lt;ul&gt;
&lt;li&gt;Day 1: I&amp;rsquo;m HomeKit, everything is awesome&lt;/li&gt;
&lt;li&gt;Day 183: I&amp;rsquo;ll remove a few bulbs from your good morning scene, okay? But I won&amp;rsquo;t remove them from your good evening scene to annoy you&lt;/li&gt;
&lt;li&gt;Day 192: I&amp;rsquo;ll forget about your kitchen lights&lt;/li&gt;
&lt;li&gt;Day 194: Instead of having a nice warm light in the morning, what about just plain old white at the brightest setting for your good morning routine?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you HomeKit. I didn&amp;rsquo;t do any changes over these mentioned days, I was just turning things on and off, nothing else. Not even a power outage as far as I&amp;rsquo;m aware. Oh, by the way: I can&amp;rsquo;t add my new camera to HomeKit. I think day 195 should be the removal of all things HomeKit.&lt;/p&gt;</description></item><item><title>zerotier: connect two synology nas</title><link>https://ilayk.com/2020/12/09/zerotier-connect-two-synology-nas.html</link><pubDate>Thu, 10 Dec 2020 00:00:00 +0100</pubDate><guid>https://ilayk.com/2020/12/09/zerotier-connect-two-synology-nas.html</guid><description>&lt;p&gt;I wanted to use synology&amp;rsquo;s hyper backup system to remotely back up one nas to another in an offsite location but I didn&amp;rsquo;t want to deal with things like dyndns and opening ports on one router, forwarding them etc., so I explored some new, fancy &lt;em&gt;VPN&lt;/em&gt; solutions. I ended up with: &lt;a href="https://www.zerotier.com" class="external-link" target="_blank" rel="noopener"&gt;zerotier&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;sign up at &lt;a href="https://www.zerotier.com" class="external-link" target="_blank" rel="noopener"&gt;zerotier.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zerotier.com/download/" class="external-link" target="_blank" rel="noopener"&gt;download the package&lt;/a&gt; for your synology nas, they provide packages, but you have to install them manually through the package center&lt;/li&gt;
&lt;li&gt;ssh into your synology nas (you might need to enable ssh in the control panel of your nas)&lt;/li&gt;
&lt;li&gt;log in as your user via ssh, become root by entering &lt;code&gt;sudo -i&lt;/code&gt; (enter your user password again)&lt;/li&gt;
&lt;li&gt;execute &lt;code&gt;zerotier-cli join your-id-from-zerotier&lt;/code&gt; on both nas devices&lt;/li&gt;
&lt;li&gt;in the web console you&amp;rsquo;ll see the private ipv4 addresses of each nas very soon and you can set up hyperbackup with these private ip addresses&lt;/li&gt;
&lt;li&gt;profit&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>state of file syncing software in 2020</title><link>https://ilayk.com/2020/09/25/state-of-file-syncing-software-in-2020.html</link><pubDate>Sat, 26 Sep 2020 00:00:00 +0100</pubDate><guid>https://ilayk.com/2020/09/25/state-of-file-syncing-software-in-2020.html</guid><description>&lt;p&gt;tl;dr:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google Drive&lt;/strong&gt;: Added a file on my phone two days ago, still not available on my Mac. Had to restart the app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft OneDrive&lt;/strong&gt;: It seems to sync but clicking the menu bar item brings up a beach ball all the time, not really reassuring.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;iCloud Drive&lt;/strong&gt;: Added 3 screen shots to a folder, one showed up on my iPhone. It’s been a few weeks, still missing two screen shots. Well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=8863" class="external-link" target="_blank" rel="noopener"&gt;13 years after Dropbox launched&lt;/a&gt;, Dropbox is still the only file syncing software which just works.&lt;/p&gt;</description></item><item><title>git-backed hosting for your notes</title><link>https://ilayk.com/2020/08/22/git-backed-hosting-for-your-notes.html</link><pubDate>Sun, 23 Aug 2020 00:00:00 +0100</pubDate><guid>https://ilayk.com/2020/08/22/git-backed-hosting-for-your-notes.html</guid><description>&lt;blockquote&gt;
&lt;p&gt;Git is a distributed version-control system for tracking changes in source code during software development. It is designed for coordinating work among programmers, but it can be used to track changes in any set of files. Its goals include speed, data integrity, and support for distributed, non-linear workflows.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Git" class="external-link" target="_blank" rel="noopener"&gt;wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Git is perfect to store plain text notes, you can easily go back in time, restore complete files, parts of it. It’s super efficient when we talk about text files and with things like &lt;a href="https://git-lfs.github.com/" class="external-link" target="_blank" rel="noopener"&gt;Git Large File Storage (LFS)&lt;/a&gt; it’s even possible to store large binary files within git.&lt;/p&gt;</description></item><item><title>linux desktop</title><link>https://ilayk.com/2020/03/28/linux-desktop.html</link><pubDate>Sun, 29 Mar 2020 00:00:00 +0100</pubDate><guid>https://ilayk.com/2020/03/28/linux-desktop.html</guid><description>&lt;p&gt;tl;dr: linux on a desktop is way too complicated.&lt;/p&gt;
&lt;p&gt;Let’s say I have to use Linux as my desktop environment, here are just a few observations I made. Beware: I’m looking at this from an users perspective. Not a developer, not a … I don’t know.&lt;/p&gt;
&lt;h1 id="installation"&gt;
 installation
 &lt;a class="heading-link" href="#installation"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Ubuntu 19.10 live boot environment makes some clicking sounds, the installed version of ubuntu 19.10 just has a “dummy device” as my audio input/output. No sounds at all. Okay…&lt;/p&gt;</description></item><item><title>firefox multi-account container</title><link>https://ilayk.com/2020/02/18/firefox-multi-account-container.html</link><pubDate>Wed, 19 Feb 2020 00:00:00 +0100</pubDate><guid>https://ilayk.com/2020/02/18/firefox-multi-account-container.html</guid><description>&lt;p&gt;tl;dr: separate all personal data to individual containers in one firefox instance? install:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/" class="external-link" target="_blank" rel="noopener"&gt;multi-account containers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/temporary-containers/" class="external-link" target="_blank" rel="noopener"&gt;temporary containers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;scroll down to the 1. 2. 3. and so on list, change the settings and have fun&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/" class="external-link" target="_blank" rel="noopener"&gt;firefox multi-account&lt;/a&gt; containers extension is awesome to separate cookies, account and tracking related stuff into separate containers. one can use it to log in to multiple google accounts or to separate a facebook login and the facebook tracking from regular browsing. containers preserve privacy better since they limit all the personal data to this one container.&lt;/p&gt;</description></item><item><title>journaling</title><link>https://ilayk.com/2020/01/03/journaling.html</link><pubDate>Sat, 04 Jan 2020 00:00:00 +0100</pubDate><guid>https://ilayk.com/2020/01/03/journaling.html</guid><description>&lt;p&gt;I don’t like New Year’s resolutions but it was between the years when I decided to do something about my note taking stuff, journaling and/or outlining. I want to get this stuff together and finally stop thinking about it so I can actually do things. Hey! what an idea…&lt;/p&gt;
&lt;p&gt;To start things off, just keep it simple. I still want to start Bullet Journaling with pen and paper and I’ve got a nice notebook already for it but for now I’ll just stick to a plain dead simple markdown file called journal.md. It’s stored in a git repo but could also just be in a Dropbox or iCloud folder somewhere. Just have it accessible for you at all times.&lt;/p&gt;</description></item><item><title>Secure ShellFish and Syncthing: my very own dropbox replacement</title><link>https://ilayk.com/2019/12/23/Secure-ShellFish-and-Syncthing-my-very-own-dropbox-replacement.html</link><pubDate>Tue, 24 Dec 2019 00:00:00 +0100</pubDate><guid>https://ilayk.com/2019/12/23/Secure-ShellFish-and-Syncthing-my-very-own-dropbox-replacement.html</guid><description>&lt;p&gt;finally, I think I came to a good solution to have my data in sync, available on all my devices and under my control. turns out, it’s super easy! I want to take control over my files, I want to decide where I store them and I also want to have it either in sync across all my devices or at least easily accessible (on my phone). last but not least, I want the solution to be cross-platform or platform agnostic since I don’t know when and if I switch from a to b.&lt;/p&gt;</description></item><item><title>obviously the best note taking setup</title><link>https://ilayk.com/2019/12/22/obviously-the-best-note-taking-setup.html</link><pubDate>Mon, 23 Dec 2019 00:00:00 +0100</pubDate><guid>https://ilayk.com/2019/12/22/obviously-the-best-note-taking-setup.html</guid><description>&lt;p&gt;it took me a while to get here and it’ll probably be outdated before I publish this post, but hey, you’ve got to start somewhere.&lt;/p&gt;
&lt;p&gt;my requirements for a note-taking app/solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;full-text search&lt;/li&gt;
&lt;li&gt;as platform-agnostic as possible
&lt;ul&gt;
&lt;li&gt;iOS, macOS, web, Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;text files, no format you can’t easily keep for years to come like google docs
&lt;ul&gt;
&lt;li&gt;attachments would be great, however&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;control of my data, meaning that I can access it at any time without being reliant on a 3rd party&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;using a service like notion or Evernote or even google docs would probably nicely give me most of what I want, except for the control of your data part, which is crucial for me nowadays. you just never know when a service goes away or they somehow lose your data.&lt;/p&gt;</description></item><item><title>about</title><link>https://ilayk.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ilayk.com/about/</guid><description>&lt;p&gt;this blog was supposed to be a public journal documenting me moving from Germany to the United States, writing about things I experienced there. Now, a couple of years later, I&amp;rsquo;m back somewhere else and have written nothing. In the meantime, I also had other ideas, so I&amp;rsquo;ll use this just as a public blog like everyone else did back in 2010.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;other stuff:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://scribble.fyi" class="external-link" target="_blank" rel="noopener"&gt;scribble.fyi&lt;/a&gt;: scribble.fyi - my spin on a &lt;em&gt;pastebin&lt;/em&gt; site&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man.ilayk.com" class="external-link" target="_blank" rel="noopener"&gt;man.ilayk.com&lt;/a&gt;: this is a page where I keep short and concise learnings regarding various macOS and linux tools. how to use them, some commands I always forget about, and what they do, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://r2m.ilayk.com" class="external-link" target="_blank" rel="noopener"&gt;r2m.ilayk.com&lt;/a&gt;: reddit2markdown - an attempt to convert reddit posts, comments, and wikis to markdown&lt;/li&gt;
&lt;li&gt;&lt;a href="https://saveify.ilayk.com" class="external-link" target="_blank" rel="noopener"&gt;saveify.ilayk.com&lt;/a&gt;: saveify - three easy controls for spotify: play the previous/next song, like/dislike a song&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aaia.ilayk.com" class="external-link" target="_blank" rel="noopener"&gt;aaia.ilayk.com&lt;/a&gt;: aaia - a as in alfa - convert a word into the phonetic alphabet version to spell things over the phone&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sim.ilayk.com" class="external-link" target="_blank" rel="noopener"&gt;sim.ilayk.com&lt;/a&gt;: sim, somehow I manage - a random list of &lt;em&gt;The Office&lt;/em&gt; quotes&lt;/li&gt;
&lt;li&gt;&lt;a href="https://id.ilayk.com" class="external-link" target="_blank" rel="noopener"&gt;id.ilayk.com&lt;/a&gt;: id - generate random ids, I probably needed that at some point for an iOS shortcut&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;contact:&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>