This month marks my eleventh year with Apple Music. I’ve been a customer pretty much since the service started, which back in the day finally let me get into music streaming. I was reluctant to use Spotify, mainly because of their artist payout model. With the general streaming fatigue creeping into music for me too, I felt like I wanted to take ownership of my collection again and make…
I have somewhat of a pendulum going on between iOS and GrapheneOS. But just like I switched from macOS to Linux some time ago, I want to run GrapheneOS as my daily driver as well. Part of that is frustration with US Big Tech licking Trump’s butt. But it’s also part of a broader shift: with movements like “ Digital Independence Day ”, I want to take back control over my…
It’s been a while since I posted my last update on my current hardware and software setup, and there’s a good reason for that. For years, I’ve been stuck in this odd pendulum, switching between macOS and Linux every few years. This year followed the same pattern: I daily-drove a MacBook Air for most of it, right up until I got fed up with Tim Apple’s behavior towards the…
This is probably one of the more esoteric posts on my blog — I’m usually very technical and rational. But with the rise of “vibe coding” and the growing trend of people using AI to generate entire applications, I feel the need to share something more personal. I’m not trying to channel Jony Ive here, but I do think there’s a fundamental truth buried beneath all the marketing buzzwords:…
I recently switched to Brave after getting sick of trying to configure media playback to work in a reasonable way on Firefox. I don’t like everything about Brave, but with a bit of tweaking, it makes for a good, relatively Google-free, browser. There’s little to no documentation on how to self-host the Brave Sync Server, which allows to synchronize bookmarks, tabs, settings and much…
Over Christmas, I decided to finally tackle learning Elixir. Since I learn new programming languages best by actually building something, I set out to implement a simple RSS reader/sync service, similar to Miniflux and FreshRSS. Since I actually want to use this app, it needs to have a way to connect to my client apps (Reeder 5/Classic on iOS and macOS, as well as NewsFlash on Linux). Since the…
Over the Christmas holidays, I somewhat fell into a rabbit hole. It started off by Ubiquiti announcing the Unifi Express and I thought: “Hey, I could use that and replace my Amplifi HD router”. Reality already was a bit more complicated, in fact the Amplifi HD is just my apartment router and Wifi AP, while in the basement I use a EdgeRouter X to separate networks for the two apartments…
It’s been more than 10 years for me writing about self-hosted infrastructure and systems that care about privacy, yet I have kept using Apple Smartphones for this whole time. While I always liked the idea of Android being fundamentally open source (as the AOSP), neither the hardware that it ran on nor the inevitable dependency on proprietary services from Google, a company that reportedly…
Tesla’s Wall Connector (3rd Gen) does not have a integration in the Tesla App and while the cost for your monthly charge can be displayed as part of the car’s charging details, it does not exactly do a great job of displaying details and stats. Since I’m running Home Assistant, I’ve integrated some sensors to read the energy consumption of the Wallbox and set up some…
Now that we have our basic mail infrastructure working, we will add support for rspamd and enable DKIM signing of our messages. In this series we will set up a fully-featured mail server in a FreeBSD jail using OpenSMTPd, Dovecot and rspamd. In contrast to many other guides, this one is split into multiple posts that can either be read and followed individually, or as a whole. After each post, you…
In this part of the FreeBSD mail server, we build on the recent two posts where we set up the IMAP and SMTP and extend our configuration to support virtual users, which means that we don’t autenticate with system users anymore and, alongside, hand over the incoming email management to Dovecot by providing email from OpenSMTPd to Dovecot using LMTP. Since both daemons will not work together…
This is a follow-up post to the initial FreeBSD mail server article that I posted a few weeks ago. In this step, we will build upon what we set up in the first part and add the possibility to fetch email from a mail client using IMAP. We will still use system users for authentication, before we switch to virtual users in the next step. In this series we will set up a fully-featured mail server in…
I run mail servers for many years now, but I was never brave enough to set up one from scratch for my daily mail. So I always fell back to pre-configured solutions like docker-mailserver, Mailcow, or in case of FreeBSD to iRedMail. My biggest pain point was the secure configuration of Postfix. When I discovered OpenSMTPd, I decided that it’s the right time now to finally build a…
Since I wanted to verify whether or not Spatial Audio works on the Apple TV HD (non-4k) and did not find any answer, I tried it myself. So: Current state (tvOS 15 Beta 1) is that Spatial Audio does work on Apple TV 4K, but does not work on the Apple TV HD. I set up the beta on a 4K and a HD, and while the option is offered in the AirPods settings on the 4K version, it is not on the HD.
In the past fifteen years, I have used Macs and macOS became my operating system of choice. The first mac I got was a Mac Mini G4 and in the following years it was exchanged by a multitude of other devices. There are many things to love about the Mac, including the asthetics, silent operation, the fact that it all works out-of-the-box, alongside a neat UNIX-based operating system that can run both…
I started my blog as a WordPress application roughly 8 years ago. Since then it evolved and technology changed. The current version is a statically generated HTML page created with Hugo. This allows me to create posts and form of markdown files and keep them under version control for future reference and parallel development of new features. But it also allows me to use almost any editor for…
I just recognized that this is the first ever post on CSS I do here. This will change. With macOS 10.14.4 Apple released Safari 12.1 which supports the prefers-color-scheme media query. This can be used to provide a the user with either a dark or a light user interface depending on the operating system setting. So I decided to implement it for my blog. Since I changed my blog to a darker color…
Most NodeJS apps consist of hundreds of .js files which are included wherever needed using require . While this makes the dependencies of modules really obvious, most of the paths look like this in the end: const createUuid = require ( '../../../support/utils/create_uuid' ); The problem is that by default NodeJS uses relative paths for local modules (not stuff that’s inside the node_modules…
I’m running a Docker host on a Hetzner Cloud server. Since my GitLab instance grew quite big, I bought some additional storage that’s mounted to the machine as a additional device. All my Docker stuff uses local volumes located in /var/lib/docker/volumes . The question now was: How to move those volumes to the new storage? Docker volumes are basically just subdirectories in a special…
In this series of screencasts I will create a Fever-compatible API layer for Nextcloud News, since I want to use this as my primary news reader. This API will be used to connect Nextcloud News to my Newsreader Apps on macOS and iOS. The API itself will be a separate application written in NodeJS that just uses the Nextcloud News database to query and write data. Later on I will probably create a…
Notes, besides photos, are the pieces of data I care most about. I want to review them even after years, have them available on the go and make sure I never lose them. Up until now, I stored my Notes in iCloud alongside Apples Notes app. This article is part of the byeCloud series in which I try to replace iCloud with self-hosted services. The Apple Approach To Notes Initially, I wanted to retain…
In this little series I’d like to show you how to set up a blog, or in fact any website, using Hugo , a static site generator written in Go. I’ve used many static site generators from Jekyll to Octopress but in the end I got stuck with Hugo. As a evidence for how awesome Hugo is you can have a look at this very site (just kidding), which is also built using Hugo. I love it’s…
For some reasons I needed a Linux installation on my NAS. byhve is a lightweight virtualization solution for FreeBSD that makes that easy and efficient. However, the CLI of bhyve is somewhat bulky and bare making it hard to use, especially for the first time. This is what vm-bhyve solves - it provides a simple CLI for working with virtual machines. The only requirement seems to be VT-x CPU support…
I’m working on an application where I use Docker and docker-compose to orchestrate a NodeJS container running my backend and a MongoDB container for my database. Using Docker for Mac, I’ve seen drastic slowdowns when initially establishing the database connection. When I used a Linux host, everything was extremely smooth. Since Docker for Mac creates a xhyve-based virtual machine…
I recently started to convert all of my movies from MKV to MP4. The main reason for this is that I want to be able to play back videos from all my Apple devices without the need for additional software, like VLC or IINA. For many people not that deep into video file formats I want to explain what the supported formats for video on macOS are and how to get there from almost any source material.
I’m currently working on a project in NodeJS. It’s an REST API server for a web application. Since it supports multi-tenancy but all tenants are created manually, I needed a quick and easy way to be able to call the createTenant method whenever I need it. I could have written a command-line tool that would do it for me, but actually I needed something like rails console for Ruby on…
In this article I will show you how to set up a Firefox Sync Server as a Docker container. In my case this will replace iCloud Bookmark / Tab synchronization. This article is part of the byeCloud series in which I try to replace iCloud with self-hosted services. I’ve evaluated different solutions to synchronize tabs and bookmarks, but none of them seemed to satisfy my needs. Firefox Sync…
iCloud Keychain has always been a love-hate relationship for me. I loved the simplicity of just being able to generate passwords right from the registration form of every page while it would also autofill passwords when I try to log in again. But I hated not being in charge of telling this thing to sync. Sometimes when I got a new device, the Keychain would just not start synching. Or passwords…
For some months now I’m running a private GitLab server. I really enjoy using it, especially with all the great features like the Docker Container Registry and GitLab Pages to host static pages, even with own domains. Normally I would prefer a more lightweight solution, such as Gitea but GitLab has so many advantages that, at least for me, this is currently the only way to go. However, it…
For a project I was working on, I had a folder structure full of images and wanted to compress them to a specific maximum resolution in-place while retaining the aspect ratio using ImageMagick. The crucial point, as so often, were spaces and special characters in the folder names, making it really hard to use bash loops etc. to make this work. With the NULL character trick, luckily this works…
In the last days I tinkered a bit with things in Git that I haven’t tried yet. One was signed commits. Signed commits help other people to know that it’s actually you who committed changes. So when people trust you as a person, they can also trust your code because they can verify that it’s been actually done by you. It’s pretty easy to set up and once configured,…
I maintain an archive of videos, especially documentaries from public media libraries from tv channels etc. on my NAS. Whilst I can use youtube-dl for the most part, it’s rather difficult for sites that use HTTP live streaming (HLS) to stream their content. In the most cases this is even AES-128 encrypted, which makes it difficult to download it. But since there’s players that support…
Even though there are like one million guides on how to secure macOS properly, I decided to throw in my 5c on this topic. In contrast to many other guides, I’d just like to provide you with the best practices that I also use. This one is about the essential things that I always do when getting a new Mac to provide better security while preserving almost all macOS features like iCloud…
During a setup change I had to temporarily move my incoming mailserver to Gmail and while I am now back in my own mail server, I again had this major headache of configuring the my DNS (using BIND) because I always forget the dots in the end of CNAME and MX records because usually I dont create nameserver records for external domains… So anyway here is the final configuration I used in…
In this article I will show you how to set up your own RSS feed aggregator with sync support for many third-party clients through the Fever API as a replacement for Apple News/Google News/Feedly. This article is part of the byeCloud series in which I try to replace iCloud with self-hosted services. Choosing the right software I fiddled around for a while with the News app for Nextcloud, ttr-rss…
As it turns out, the Apple Time Capsule only uses SMB protocol version 1 and NTLM for authentication. While this works with macOS without any changes, it often creates problem when trying to mount the the Time Capsule’s SMB share on a Linux system. With this parameters, mounting should work out of the box, given you have the cifs-utils (Debian/Ubuntu) installed: sudo mount.cifs…
In this screencast we’re exploring the way Git saves files, directories commits and tags in it’s internal data structure, how we can inspect them and how they related to each other. This video is meant to provide additional information for people that already use Git and want to know how it works under the hood. Actually I like this approach to learn things and I think I’ll do…
Current macOS versions are weird… Often when I connect my MacBook Pro to the two screens on my desk, the wallpaper on one of that guys is either gone or changed to a different one. After many attempts to search them in my bunch of 2k wallpapers, I eventually gave up and wrote a script that sets the wallpaper on all my screens like this: osascript -e 'tell application 'System Events' to set…
UPDATE Apr, 17 2018: Update imapsync to run as standalone docker container to make deployment easier. In this article I will show you how to set up a fully-featured mail server including webmail as a Docker container. This article is part of the byeCloud series in which I try to replace iCloud with self-hosted services. Let’s be honest: Setting up a mailserver really is a pain in the ass.…
In this article I will show you how I set up my photo synchronization using Nextcloud. This article is part of the byeCloud series in which I try to replace iCloud with self-hosted services. One of the most important things in my setup is a solid and reliable way to synchronize Photos and videos I take. In one of the previous parts of this series I set up my Nextcloud instance . So this this time…
In this article I will describe how I set up my Nextcloud instance aiming to replace iCloud Drive. This article is part of the byeCloud series in which I try to replace iCloud with self-hosted services. The goals for a file syncing infrastructure are simple I want a reliable solution that syncs files as-is, that does not corrupt them and does not cancel uploads all the time. Additionally, I want…
Introduction Some years ago I already played with ownCloud, trying to set up my personal cloud and get rid of third party services for keeping my stuff in sync across multiple devices. And while I already liked it at that time, there still were things I couldn’t do with it, so I eventually gave up on it. Some months ago I decided to give it another shot and installed ownCloud (which is now…
Just as a short update: Starting from the newest AirPods update, they also finally work as a headset on the Mac. Before there was a issue that caused audio quality to drop when using the AirPods both as headphones and microphones at the same time.
macOS has the osascript command line tool that allows you to run embedded AppleScript right from within shell scripts. As AppleScript also has capabilities to show notifications, you can utilize this to show messages in the macOS Notification Center. Here is an example: osascript -e 'display notification 'Something happened' with title 'Test'' If you have any further tips that will help people…
I have so many accounts for various web-based solutions, I barely can remember a few. And they send emails. So many that it’s sometimes hard to not loose the overview in my mailbox. When you run your own mail server, it’s easy to set up a dynamic aliases for your mailserver based on a regular expression pattern that allows to e.g. have a own email address for each service you register.…
I wanted to expose a single jail of my FreeBSD NAS to a network of a client via OpenVPN while it’s reachable both from my network and from the clients’ network. It should send all of its traffic through that VPN tunnel so that it appears like it is just another computer on that foreign network. Luckily FreeBSD offers a great way to solve this by creating a separate routing table apart…
After finishing with the hardware and software parts of my new NAS, I decided to append another little project which is aimed to provide a simplified control panel for macOS in the menu bar on the upper right of the screen. Objective What I wanted to achieve is a possibility to mount my various shares with one click as well as having controls for power on/off and SSH. Additionally the control…
UPDATE 2018-06-02: I’ve created a new version of this article called “Securing macOS” available here: https://www.davd.io/securing-macos/
Setting up a NodeJS application on a FreeBSD 10 system was impossible when using ZFS as a file system. This was a real pain for me because when I tried out various stuff in jails rendered the whole system unusable, forcing me to reboot and this is not something one would do in a production environment. Here’s the bug report: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=209158 Although I…