geschätzte Lesezeit: 10 min

In this post I'll show how I setup restic backups on my desktop computer that is running NixOS. I'll go though the steps on how to create a B2 bucket, the NixOS configuration including secret storage with age via agenix, and desktop notifications in case there are errors.

image of a computer in pixel art style

We start by creating a bucket on B2 where the encrypted restic backups will be stored.

Creating the B2 bucket

To create a bucket named restic-blog-test-bucket we run the following command:

$ backblaze-b2 create_bucket restic-blog-test-bucket allPrivate \
  --defaultServerSideEncryption=SSE-B2 \
  --lifecycleRules='[{"daysFromHidingToDeleting": 30, "daysFromUploadingToHiding": null, "fileNamePrefix": ""}]'

Bucket names are globally unique, meaning that they must have a unique name across all B2 buckets (not just in the account). The important thing is to set the visibility to private (allPrivate). Enabling Server-Side Encryption (SSE) is not strictly necessary given that restic already encrypts the data.

We also add a lifecycle-rule to delete old versions of files (files that have been overwritten) after 30 days. This saves storage space. By default a B2 bucket retains old versions of a file indefinitely. For us this feature is unnecessary since restic will automatically manage file versions (revisions) and regularly prune old ones.

Next we create an application key so that we can programatically access the B2 API from within the systemd service later on:

$ backblaze-b2 create-key --bucket restic-blog-test-bucket blog-test-key "deleteFiles, listAllBucketNames, listBuckets, listFiles, readBucketEncryption, readBucketReplications, readBuckets, readFiles, shareFiles, writeBucketEncryption, writeBucketReplications, writeFiles"

The permissions allow restic to do any operation within the bucket. The listAllBucketNames allows to list all bucket names in the account. It is also necessary and without it the backup will break.

The command will output two values which we need to save. The first value is the application key ID and the second value is the application key itself. Both are sensitive values that we need to store in an encrypted format.

Setup agenix

For restic to be able to access the B2 bucket from within the systemd service, we need to store the credentials. We store the credentials in files and use age to encrypt them.

Agenix makes it easy to use age-encrypted secrets in NixOS. Installation via flakes can be done by adding the input and importing the module:

{
inputs.agenix.url = "github:ryantm/agenix";
outputs = { self, nixpkgs, agenix }: {
nixosConfigurations.yourhostname = nixpkgs.lib.nixosSystem {
# ...
modules = [
# ...
agenix.nixosModules.default
      ];
    };
  };
}

To create a secret we need to use the agenix CLI. By default, the program looks for a file called secrets.nix that specifies the SSH public keys to use for each encrypted file.

$ mkdir -p secrets/restic
$ cd secrets/
$ touch secrets.nix

For our setup we need to store 3 secrets: The repository name, password and specific environment variables that are required by the restic B2 integration. We are using the same SSH public key for all files:

let
arthur = "ssh-ed25519 AAAAC3NzaC1lZD...t07oaewMGVuqmcb";
in
{
"restic/env.age".publicKeys = [ arthur ];
"restic/repo.age".publicKeys = [ arthur ];
"restic/password.age".publicKeys = [ arthur ];
}

Password secret file

First we create the repository password file:

$ nix run github:ryantm/agenix -- -e restic/password.age

The password will be used by restic to encrypt and decrypt the files in the repository. Since our repository doesn't exist yet, we can generate a new password and store it in the file.

Environment Secret file

Second we create the environment file:

$ nix run github:ryantm/agenix -- -e restic/env.age

When running the backup job the restic systemd service will read environment variables from this file. For the restic B2 integration we have to specify the B2_ACCOUNT_KEY and B2_ACCOUNT_ID environment variables. The values are the output of the create-key command from before. The file content should be in this format:

B2_ACCOUNT_ID="my-id"
B2_ACCOUNT_KEY="my-key"

Repository secret file

Lastly we specify the repository name in the repo file:

$ nix run github:ryantm/agenix -- -e restic/repo.age

This is the name of the B2 bucket that we created with the create_bucket command before. The name has to be prefixed with b2::

b2:my-bucket-name

Decrypting files

You might run into the following issue when trying to decrypt the age files (for example for editing them):

Error: Unsupported SSH key: /home/arthur/.ssh/id_rsa

This happens if you didn't specify your SSH keys in config.services.openssh.hostKeys. If you're not running an OpenSSH server on your machine, this is probably not set, in which case agenix defaults to using the id_rsa key. For example I used my id_ed25519 key.

The fix is to pass the key via the -i (identity path) argument:

nix run github:ryantm/agenix -- -e restic/env.age -i ~/.ssh/id_ed25519

We also need to specify the identity path in the NixOS configuration in the next step.

Create the NixOS config

In our configuration.nix file we import restic.nix (it can also be put into the same file if preferred) and set the identity paths for agenix:

{
imports = [
./hardware-configuration.nix
# ...
./restic.nix
  ];
age.identityPaths = [ "${config.users.users.arthur.home}/.ssh/id_ed25519" ];
}

In our NixOS config directory we create a new file called restic.nix with the following content:

{
# configure agenix secrets
age.secrets = {
"restic/env".file = ../secrets/restic/env.age;
"restic/repo".file = ../secrets/restic/repo.age;
"restic/password".file = ../secrets/restic/password.age;
  };
# configure restic backup services
services.restic.backups = {
daily = {
initialize = true;
environmentFile = config.age.secrets."restic/env".path;
repositoryFile = config.age.secrets."restic/repo".path;
passwordFile = config.age.secrets."restic/password".path;
paths = [
"${config.users.users.arthur.home}/documents"
      ];
pruneOpts = [
"--keep-daily 7"
"--keep-weekly 5"
"--keep-monthly 12"
      ];
    };
  };
}

The secrets specify the path to our encrypted age files that we created before.

The backup service has the name daily (can be changed to any other name if preferred), which will create a systemd service called restic-backups-daily.service.

The default systemd timer config runs the job at midnight each day. It also enables the Persistent option by default, meaning that if the computer was off during the trigger time, it will run the job immediatelly after the machine starts up again.

The prune option will remove old data that is not needed anymore. This is used to save space. The NixOS service will run the restic forget --prune command. In the example above we want to keep the most recent 7 daily, 5 weekly and 12 monthly snapshots. If left out, each daily backup will be kept forever.

Add the files to git, rebuild your system and switch to the new configuration:

$ git add secrets/ restic.nix
$ nixos-rebuild --flake .#mycomputer switch

This should create the restic backup systemd services (but not trigger them yet).

Systemd Service

The systemd service that will run the backups each day looks like this:

$ systemctl status restic-backups-daily.service
○ restic-backups-daily.service
     Loaded: loaded (/etc/systemd/system/restic-backups-daily.service; linked; preset: enabled)
     Active: inactive (dead) since Wed 2023-11-22 14:40:38 CET; 3h 5min ago
TriggeredBy: ● restic-backups-daily.timer

We can see that the service is triggered by restic-backups-daily.timer, which looks like this:

$ systemctl status restic-backups-daily.timer
● restic-backups-daily.timer
     Loaded: loaded (/etc/systemd/system/restic-backups-daily.timer; enabled; preset: enabled)
     Active: active (waiting) since Wed 2023-11-22 13:52:14 CET; 3h 53min ago
    Trigger: Thu 2023-11-23 00:00:00 CET; 6h left
   Triggers: ● restic-backups-daily.service

To test if backups are working we start the service manually:

$ sudo systemctl start restic-backups-daily.service

To check the output we run:

$ journalctl -u restic-backups-daily.service
systemd[1]: Starting restic-backups-daily.service...
restic-backups-daily-pre-start[53021]: Fatal: unable to open config file: Stat: b2_download_file_by_name: 404:
restic-backups-daily-pre-start[53021]: Is there a repository at the following location?
restic-backups-daily-pre-start[53021]: b2:my-bucket
restic-backups-daily-pre-start[53038]: created restic repository c66237620d at
restic-backups-daily-pre-start[53038]: Please note that knowledge of your password is required to access
restic-backups-daily-pre-start[53038]: the repository. Losing your password means that your data is
restic-backups-daily-pre-start[53038]: irrecoverably lost.
restic[53054]: no parent snapshot found, will read all files
restic[53054]: Files:         846 new,     0 changed,     0 unmodified
restic[53054]: Dirs:          107 new,     0 changed,     0 unmodified
restic[53054]: Added to the repository: 244.128 MiB (212.474 MiB stored)
restic[53054]: processed 846 files, 314.304 MiB in 0:16
restic[53054]: snapshot d409fc8f saved
restic[53079]: Applying Policy: keep 7 daily, 5 weekly, 12 monthly snapshots
restic[53079]: keep 1 snapshots:
restic[53079]: ID        Time                 Host        Tags        Reasons           Paths
restic[53079]: -----------------------------------------------------------------------------------------------
restic[53079]: d409fc8f  2023-11-22 14:09:36  mycomputer              daily snapshot    /home/arthur/documents
restic[53079]:                                                        weekly snapshot
restic[53079]:                                                        monthly snapshot
restic[53079]: -----------------------------------------------------------------------------------------------
restic[53079]: 1 snapshots
restic[53096]: using temporary cache in /var/cache/restic-backups-daily/restic-check-cache-1922151602
restic[53096]: create exclusive lock for repository
restic[53096]: load indexes
restic[53096]: check all packs
restic[53096]: check snapshots, trees and blobs
restic[53096]: [0:01] 100.00%  1 / 1 snapshots
restic[53096]: no errors were found
systemd[1]: restic-backups-daily.service: Deactivated successfully.
systemd[1]: Finished restic-backups-daily.service.
systemd[1]: restic-backups-daily.service: Consumed 8.131s CPU time, received 1.6M IP traffic, sent 213.2M IP traffic.

The backup finished successfully. Since this is the first run and the restic repository didn't exist before, there was an error at the beginning which can be ignored. The next run should not have this error since the repository has been initialized now.

Testing Backup Restore

To test that we can restore backups we have to use the restic CLI. We can run a nix shell with the restic package:

$ nix-shell -p restic

To access B2 from restic we need to set two environment variables that have the account key ID and the account key itself. Thes eare the same ones we saved in secrets/restic/env.age):

$ export B2_ACCOUNT_ID="my-id"
$ export B2_ACCOUNT_KEY="my-key"

Now we can list our snapshots. Since we've manually run the backup job before, it should show that we have one snapshot:

$ restic -r b2:my-bucket-name snapshots
enter password for repository:
repository c6622116 opened (version 2, compression level auto)
ID        Time                 Host        Tags        Paths
-----------------------------------------------------------------------------
47a123a4  2023-11-22 14:40:11  desktop                 /home/arthur/documents
-----------------------------------------------------------------------------

To restore it into the restore-backup directory we run:

$ restic -r b2:my-bucket-name restore --target restore-backup latest

The restored files should now be available.

Desktop notifications for failures

To notify us in case the backup fails we can setup desktop notifications. This also works when the backup is started (and fails) before the window manager launched. The notification will be shown on the next start.

Basically we create a systemd service that runs the notify-send command in a shell script, and attach it to the OnFailure event of the restic backup service.

We put the following code into the same restic.nix file as above:

{
environment.systemPackages = [
pkgs.libnotify
  ];
systemd.services.restic-backups-daily.unitConfig.OnFailure = "notify-backup-failed.service";
systemd.services."notify-backup-failed" = {
enable = true;
description = "Notify on failed backup";
serviceConfig = {
Type = "oneshot";
User = config.users.users.arthur.name;
    };
# required for notify-send
environment.DBUS_SESSION_BUS_ADDRESS = "unix:path=/run/user/${
toString config.users.users.arthur.uid
}/bus";
script = ''
${pkgs.libnotify}/bin/notify-send --urgency=critical \
        "Backup failed" \
        "$(journalctl -u restic-backups-daily -n 5 -o cat)"
    '';
  };
}

To try it out we set the user of the restic backup service to a non-existing one:

{
services.restic.backups = {
daily = {
# ...
user = "doesntexist";
    };
  };
}

Now we manyally trigger a backup:

$ sudo systemctl start restic-backups-daily.service
Job for restic-backups-daily.service failed because the control process exited with error code.

This will show a desktop notification:

example desktop notification

With this working the automated backups are done. They will run every day at midnight or on the next boot if the machine was off. In case the backup fails we will get a notification and can then use the systemd logs to further investigate and fix the issue.

geschätzte Lesezeit: 2 min

Tamara Bunke wurde vor 86 Jahren geboren (19.Nov.1937) und wurde keine 30 Jahre alt. Sie war Argentinierin, Deutsche, Kubanerin, Revolutionärin, Agentin, Pionierleiterin, Dolmetscherin, Weggefährtin von Che Guevara und kurz auch Babelsbergerin.

Tamara Bunke ist in Kuba bis heute eine Nationalheldin. Im „Museum und Monument der Erinnerung an den Kommandanten Ernesto Che Guevara“ in Santa Clara (Kuba), welches eines der wichtigsten nationalen Gedenkorte an die Kubanische Revolution ist, wird auch an Tamara Bunke alias Tania – la Guerillera gedacht. Unter den dort beigesetzten 38 Kampfgefährten Che Guevaras befinden sich auch die Gebeine Tamara Bunkes. Sie ist die einzige Frau, der dort gedacht wird.

Die Eltern von Tamara Bunke flohen als Widerständler 1935 vor den Nazis von Berlin nach Buenos Aires (Argentinien). Die Eltern traten 1936 der argentinischen KP bei und wurden die Mitbegründer der Gruppe „Das andere Deutschland“. In Buenos Aires kam Tamara 1937 als Haydée Tamara Bunke Bíder zur Welt. Die Familie Bunke kommt 1952 in die DDR, nachdem sie nach 1945 in Buenos Aires mit der steigenden Zahl der deutschen Nazis zusammenleben mussten, vor denen sie zuvor geflohen sind. Die Bunkes wollten das bessere Deutschland aufbauen helfen. Sie kamen nach Babelsberg. Von da aus ging es nach Fürstenberg und später nach Stalinstadt (heute Eisenhüttenstadt).

Nach einem Besuch von Ernesto Che Guevara in der DDR-Hauptstadt (er: damals Direktor der kubanischen Nationalbank, sie: Studentin der Romanistik und Dolmetscherin), fliegt sie im Mai 1961 trickreich über Prag nach Kuba. Dort studierte Tamara Bunke zunächst Journalismus und arbeitete als Übersetzerin und Dolmetscherin für verschiedene Behörden. Später wurde sie vom kubanischen Geheimdienst ausgebildet. Sie reist nach Europa und wird 1964 als Agentin nach Bolivien geschickt. Sie unterstützt dort auf vielfältige Weise den bolivianischen Guerilla-Kampf unter dem Kommando von Che Guevara. Am 31. August 1967 wird Tamara Bunke in einen Hinterhalt gelockt und in Valdo del Yeso (Bolivien) erschossen. Ihr Leichnam wird 1998 nach Kuba ins Mausoleum überführt.

Zu Ehren von Tamara Bunke gibt es aktuell eine Veranstaltungsreihe. Organisiert wurde diese

  • vom kommunalpolitisches forum Land Brandenburg e.V.,
  • der Geschichtswerkstatt Rotes Nowawes e.V.,
  • dem Lateinamerika-Arbeitskreis tierra unida e.V. und
  • der Rosa-Luxemburg-Stiftung Brandenburg e.V..

Im Treffpunkt Freizeit ist seit dem 8.11. eine Ausstellung zum Leben und Wirken von Tamara Bunke zu sehen. Konzipiert wurde diese wissenschaftlich fundierte Ausstellung von der HTW Berlin. Zu sehen ist die Ausstellung noch bis zum 22.12.2023. Die Schau wurde bereits in Lateinamerika und verschiedenen Orten in Deutschland gezeigt.

Am Freitag den 24.11. um 19 Uhr läuft im Buchladen Sputnik der Dokumentarfilm „Tanja – Tagebuch einer Guerillera“.

Am Dienstag den 5.12. ab 18 Uhr gibt es ein Gespräch mit dem Autor/Dramaturg Fabian Scheidler, der MdL Marlen Block und einer Vertreterin der Letzten Generation mit dem Titel: Von Revolutionärinnen, Schulschwänzerinnen und Klimakleberinnen. Widerstand und ziviler Ungehorsam in Geschichte und Gegenwart.

Am Mittwoch den 6.12. wird ab 18 Uhr ein Vortrag zu Tamara Bunke in Potsdam Babelsberg zu hören sein. Wo? In der Lounge des AWO-Kulturhauses Babelsberg. Frank Reich und Christian Raschke von der Geschichtswerkstatt Rotes Nowawes blicken u.a. auf das Jahr 1952 zurück, als die Familie Bunke aus Argentinien in Babelsberg von Freunden aufgenommen wurden.

In der DDR trugen über 200 Schulen, zahlreiche Kollektive und Kindergärten den Namen der Revolutionärin. Doch im vereinigten Deutschland bestand die Gefahr, dass „Tania“ nach zahlreichen Umbenennungsorgien und Akten von Kultur- und Geschichtsrevisionismus, dem öffentlichen Vergessen anheimfällt. Zum Glück ist dem nicht so. Sie war eine Frau, die sich gegen die Ausbeutung von Menschen stellte und dies mit ihrem Leben bezahlte.

image_pdfRunterladen als PDF

geschätzte Lesezeit: 2 min

Ausführliche Berichterstattung über das Neubauvorhaben der ProPotsdam am Wieselkiez.

Die Baustelle im Wieselkiez am Schlaatz beim Richtfest. Foto: Anna Winkler/ProPotsdam

Dem Richtfest am Wieselkiez gaben die lokalen Medien einen großen Raum, die PNN und die MAZ am 15. November in großen Druckartikeln, beide bereits am Vorabend mit vielen Fotos. Im Schlaatz baue die ProPotsdam im Auftrag der Stadt erstmals 50 Wohnungen in Holzmodulbauweise. Die dunkelbraune Fassade, die Außenwände, die Decken und das Tragwerk seien aus Holz statt Beton oder Stahl. Das sei nicht nur emissionsärmer als konventionelle Baumaterialien, sondern diene sogar als CO2-Speicher. Die Landeshauptstadt Potsdam reagiere mit dem Neubau nicht nur auf den steigenden Bedarf an Sozialwohnungen bedingt durch Flucht und Migration, sondern auch auf die fortschreitende Klimakrise und die nachhaltige Bauwende. „Der Holzhybridbau lässt sich zum einen schnell errichten, zum anderen behält die Materialität Klima und Umwelt im Auge“, habe Oberbürgermeister Mike Schubert (SPD) erklärt. Nach nur einem Jahr Bauzeit sollen die 50 barrierefreien Sozialwohnungen im März 2024 bezugsfertig sein.

Beim Richtfest am Dienstag hätten Baubeteiligte einen Blick in die ersten Wohnungen werfen können. In einer Fünf-Zimmer-Wohnung seien Küche und WC bereits eingerichtet. Das Holztragwerk aus Fichte sei aus Brandschutzgründen hinter 36 Millimeter dickem Gipskarton versteckt. Aus selbem Grund würden die beiden fünfstöckigen Wohngebäude im Energiestandard KfW 40 mit Mineralwolle gedämmt. Der Rest bestehe zu etwa zwei Dritteln aus Holz, schätze Hubert Nopper, Geschäftsführer von Aktivhaus aus Stuttgart, die das Projekt entwickelt hätten. Nopper habe sich laut MAZ überrascht von der Geschwindigkeit der Baugenehmigung in Potsdam gezeigt. Erst im November 2022 habe man den Antrag eingereicht und Anfang März 2023 die Genehmigung bekommen: „So etwas haben wir noch nie erlebt.“ Auch für ProPotsdam-Chef Bert Nicke sei das ein Rekord.

Durch das modulare Bauen gehe die Fertigstellung schneller. Insgesamt 90 Module seien für die Zwei-, Drei-, Vier- und Fünf-Zimmer-Wohnungen, jeweils mit Balkon oder Loggia, verbaut worden. Die barrierefreien Wohnungen würden über einen zwischen den spiegelgleichen Gebäuden stehenden Fahrstuhlturm erschlossen, der über Brücken auf außen liegende Loggien führe, erläutert die MAZ. Verkleidet seien die Häuser mit ineinander gesteckten, vorvergrauten Brettern aus europäischer Lärche. Die Gebäude seien vollständig recycelbar.

Der Großteil der Wohnungen solle komplett möbliert werden, die Stadt werde den Neubau von der ProPotsdam anmieten, so der OB. Bis zu 210 Menschen könnten hier ein Zuhause finden. Zuerst sollen Geflüchtete aus verschiedenen Herkunftsländern einziehen, so Schubert. Der Neubau sei als dauerhafter Wohnraum für die kommenden 30 bis 40 Jahren gedacht. Für eine Durchmischung von Groß- und Kleinfamilien sorgen die verschiedenen Wohnungsgrößen von 65 bis 110 Quadratmetern. Die Lage neben der Tram-Haltestelle ermögliche Mobilität, im Stadtteil seien bereits soziale Einrichtungen vorhanden.

Die PNN erinnern daran, dass der Neubau am Wieselkiez sei Teil des vom Land geförderten Sonderbauprogramms sei, mit dem 450 Wohnungen für Bedürftige in Potsdam entstehen sollen. Die ProPotsdam habe 22 Millionen Euro in das Projekt investiert, 18,9 Millionen Euro stammten aus Bundes- und Landesfördermitteln. Parallel entstünden in der Gluckstraße am Stern 21 Wohnungen in Modulbauweise. Wenn das Sonderbauprogramm mit rund 400 Wohnungen an acht Standorten beendet ist, müsse es weitergehen, „ohne dass unsere Pro Potsdam damit überfordert ist“, zitiert die MAZ das Stadtoberhaupt.

Den Artikel der PNN finden Sie hier im kostenpflichtigen T+-Bereich.

Der Text der MAZ ist hier im kostenpflichtigen Bereich abrufbar.

geschätzte Lesezeit: 1 min

Hi, it’s Rose! I write for Datawrapper’s blog, and this week I learned about the greatest — though not latest — in data transfer methods.

Have you been frustrated with the speed of your home internet? Are you tired of waiting for big files to upload? Does the connection just keep dropping?

Why not consider a pigeon?

It's a solution from another century, but data transfer by pigeon is actually faster than the internet in many cases, even in the world's most developed economies. After reading a U.S.-focused article about the pigeonnet in the Washington Post last week, I was so charmed by the idea that I knew I had to run the numbers for Europe as well. (But seriously, don't miss the original piece and its beautiful data visualizations — pigeon GIF included.)

A pigeon flies just as fast with one gigabyte of data as with 100 — provided the storage device is small enough, of course. They can cover about 65 kilometers per hour with any quantity of data you can physically attach to them. Your internet connection, meanwhile, has a throughput that's measured in megabits per second. More data means a slower upload — but a friend on the other side of the world can receive your message just as easily as one on the other side of town. All this means that pigeons are at the greatest advantage when transferring large quantities of data over short physical distances.

This isn't purely a thought experiment. Besides their more traditional message-carrying history, pigeons have raced the internet and won in South Africa, Australia, the U.K., and most recently the U.S. with as much as three terabytes (3000 gigabytes) of data.

It's hard to see this taking off at scale, but if you work with a lot of data and don't need it to travel too far, pigeons would be far from the worst solution. Especially if you live in Greece or Germany. Write in if you ever try it — you know how to reach me.


That's all for today! See you next Thursday for a Weekly Chart from our developer Jack.

geschätzte Lesezeit: 1 min

Die gemeinnützige Signal Foundation, die hinter dem Messenger Signal steht, hat detailliert aufgelistet, wie viel es pro Jahr kostet, um Signal zu entwickeln.

Im Blogbeitrag sind für die jährlichen Kosten für technische Infrastruktur (Server, SMS-Registrierung, Bandbreite und ähnliches) mit 14 Millionen US-Dollar pro Jahr angegeben. Die derzeitigen Personalkosten belaufen sich demnach auf 19 Millionen US-Dollar jährlich. Bei Signal rechnet man für das Jahr 2025 mit einem Anstieg der gesamten Kosten auf 50 Millionen Dollar pro Jahr.

Obwohl Signal als Non-Profit-Organisation agiere, sei die Entwicklung eines weltweit genutzten Messengers keineswegs günstiger, heißt es weiter. Der Fokus auf Datenschutz und Sicherheit beschere Signal teilweise sogar wesentlich höhere Entwicklungskosten. Mit dem Blog-Beitrag wolle Signal transparenter machen und ein Bewusstsein für die verschiedenen Geschäftsmodelle der Tech-Branche schaffen.

Signal weist darauf hin, dass Mitbewerber für diese, in der Regel viel höheren Kosten durch die Verwertung und den Verkauf der Daten ihrer Nutzer aufkommen. Im Gegensatz dazu verschlüssle Signal alle Daten und setze auf freiwillige Spenden.

Daten sind profitabel, und wir sind eine gemeinnützige Organisation, die sich darauf konzentriert, so wenig Daten wie möglich zu sammeln, heißt es im Beitrag. Im Unterschied dazu würden die meisten Technologieunternehmen so viele Daten sammeln und erstellen wie möglich, heißt es im Beitrag: