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:

geschätzte Lesezeit: 1 min

In my workflow with Git, I prefer using SSH authentication for platforms like GitHub and GitLab. It allows me to avoid saving multiple credentials on my machine; instead, I simply register my already existing public SSH key in my account settings. It seems like a clear victory, right?

Unfortunately, it's not a one-size-fits-all solution:

  • Recently, I encountered an issue that could be easily resolved using Git submodules in GitLab CI. GitLab has the ability to automatically check out submodules, albeit only if they are referenced using their HTTPS URLs.
  • The convenience of copying and pasting HTTPS URLs of GitLab/GitHub repositories directly into your git clone command is undeniable. I've been guilty of lazily using these HTTPS URLs when I assumed I'd only need read-only access, only to later realize that I had to switch them over to SSH URLs...

However, to my surprise, I discovered the following configuration options in Git. You can actually substitute the visible URLs of remote repositories based on their prefixes! This means that you can use SSH for local development and HTTPS for CI environments without having to manually switch back and forth.

Here's how to do it:

[url "ssh://git@github.com/"]
    insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
    insteadOf = https://gitlab.com/

This config ensures that every time you try to interact with a remote URL that starts with https://github.com/ or https://gitlab.com/, Git will substitute it with the corresponding SSH URL. This means you can continue using HTTPS URLs in your .gitmodules file, but when you clone or pull locally, it will use SSH. It also works for git clone.

I have no idea how I missed this feature before, but it's certainly a quality of life improvement.

geschätzte Lesezeit: 1 min

I have a problem with mixing unstable, stable & home-manager that I cannot figure out. Any help would really be appreciated.

I am trying to use helix in its newest version (23.10) instead of the previous (23.05). This works for root, but not for non-root:

$ hx --version
helix 23.05
$ sudo -i
# hx --version
helix 23.10 (f6021dd0)

which is what is expected with the follwing configuration (3 files following):

I bring in home-manager and unstable like this:

sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.05.tar.gz home-manager
sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixos-unstable
sudo nix-channel --update

My /etc/nixos/configuration.nix is essentially this:

{ pkgs, ...}:
let
  unstable = import <nixos-unstable> {};
in {
  imports = [
    ./hardware-configuration.nix
    <home-manager/nixos>
  ];
  nix.settings.experimental-features = [ "nix-command" "flakes" ];
  environment.systemPackages = [
    unstable.helix
    pkgs.zsh
  ];
  users.users.jps = {
    # ...
  };
  home-manager = {
    extraSpecialArgs = { inherit unstable; };
    useGlobalPkgs = false;
    useUserPackages = true;
    users.jps = import ./home.nix;
  };
  system.stateVersion = "23.05";

The home.nix is essentially

{ config, pkgs, unstable, ... }:
{
  imports = [
    ./helix.nix
  ];
  home = {
    stateVersion = "23.05";
    sessionVariables = {
      EDITOR = "hx";
    };
    packages = [
      pkgs.helix
      pkgs.zsh
    ];
    # ...
  };
}

and helix.nix is just including a configuration file:

{
  programs.helix.enable = true;
  xdg.configFile."helix/config.toml".source = ../common/helix/config.toml;
}

Now, if I try to use the helix package from unstable (like root does) by changing home.nix to

    packages = [
      unstable.helix
      pkgs.zsh
    ];

then I get a collision:

error: collision between `/nix/store/nayfcdjkl4d1n5w5c0n72np99zvy9x3m-helix-23.10/bin/.hx-wrapped' and `/nix/store/1g9pz0sc47y6v3q7ya6mik0gj37vjiay-helix-23.05/bin/.hx-wrapped'

Why is that?