ncspot is great, spotify-tui is another, and in the past I've had some success using mopidy-spotify and an mpd frontend (a discontinued but very cool one called Cantata).
TLDR: It happens (by default) for calls between you and someone in your contacts list, because it's a p2p connection. It can be avoided by disabling p2p calls.
The reason Telegram leaks a user’s IP addresses during a call is that, by default, Telegram uses a peer-to-peer connection between callers “for better quality and reduced latency,” Telegram spokesperson Remi Vaughn told TechCrunch.
“The downside of this is that it necessitates that both sides know the IP address of the other (since it is a direct connection). Unlike on other messengers, calls from those who are not your contact list will be routed through Telegram’s servers to obscure that,” Vaughn said.
To avoid leaking your IP address, you have to go to Telegram’s Settings > Privacy and Security > Calls, and then select “Never” in the Peer-to-Peer menu, as shown below.
I didn't downvote, and I'm not accusing you of anything.
Someone asked why anyone would downvote this. Many of us don't know what waifu wallpaper stuff is about, but if I do an image search for waifu I see lots of young girl cartoon porn stuff, and I have heard of some folks calling their child-like sex pillow by that word.
So my answer is that those of us who don't know what you're talking about may have ideas from sources like that, and nothing in the post added explanation for this crowd. That may explain some downvotes.
FYI when I type "waifu" into Bing one of the suggestions is "waifu body pillow with hole." And for "waifu is" the first suggestion is "waifu is for low lives."
My point is you shouldn't expect people who don't know about it to understand it properly, when only casual familiarity content is full of stuff like that.
I think it does actually also copy files around. That may be cool and useful, but is why I don't want to use it. I don't want to accidentally do that instead of normal clipboard stuff.
All of these languages are relatively succinct, and I rely on that to reduce visual and mental clutter, because I have a pea brain.
Factor, Nim, Roc, and Zsh each offer, to differing extents, some argument-then-function ordering in the syntax, which strikes me as elegant and fun, and maybe even wise. In that order, Factor does this the most (using postfix/reverse-polish-notation and managing a data stack), and Zsh the least (piping output from one command as the input for the next command).
Roc
Roc is a functional language, and an offshoot of Elm in spirit. The lead developer and community are great. Relative to Elm, it's more inclusive and experimental in the development process, and does not primarily or exclusively target web stuff. They aim to create an ambitiously integrated development environment, especially taking advantage of any guarantees the functional design can offer.
Here's a sample, using the |> operator a lot, which lets you order the first argument to a function before the function IIRC:
Nim is so darn flexible and concise, has great compilation targets, and employs Uniform Function Call Syntax to more implicitly enable the kind of ordering in the Roc example. And you can often leave out parentheses entirely.
Factor
Factor is a full-on postfix and concatenative language, tons of fun, and turns my brain inside out a bit. I made a community for concatenative languages here on programming.dev, and while there's little activity so far, I've filled the sidebar with a bunch of great resources, including links to active chats.
The Factor REPL ("listener") provides excellent and speedy documentation and definitions, and a step-through debugger.
One idea that seems absurd at first is that for the most part, you don't name data variables (though you can, and you do name function parameters). It's all about whatever's on the top of the stack.
In some languages it's awkward to approximate multiple return values, but in a stack-oriented language it's natural.
In Factor, everything is space-separated, so functions ("words") can and do include or consist of symbols. [1..b] is not semantically something between brackets, it's just a function that happens to be named [1..b]. It pops 1 item off the top of the stack (an integer), and pushes a range from 1 to that integer on to the top of the stack.
Here it is in my solution to the code.golf flavor of Fizz Buzz:
USING: io kernel math.functions math.parser ranges sequences ;
100 [1..b] [
dup [ 3 divisor? ] [ 5 divisor? ] bi 2dup or [
[ drop ] 2dip
[ "Fizz" "" ? ] [ "Buzz" "" ? ] bi* append
] [ 2drop number>string ] if
print
] each
And in image form for glorious syntax highlighting:
Factor example walkthrough
Anything between spaced brackets is a "quotation" (lambda/anonymous function).
So:
Push a range from 1-100 onto the stack.
Push a big quotation that doesn't end till each at the bottom.
each consumes the range and the quotation.
For each element of the range, it pushes the element then calls the quotation.
dup pushes a copy of the stack's top item.
Say we're in the ninth iteration of the each loop, we've got 9 9 on the stack.
Two quotations are pushed (9 9 [...] [...]),
then bi applies them each in turn to the single stack item directly beneath,
leaving us with 9 t f (true, it's divisble by three, false, it's not by 5).
2dup copies the top two, so: 9 t f t f
or combines the last two booleans: 9 t f t
Two quotes are pushed, followed by an if (9 t f t [...] [...] if),
which pops that final t and calls only the first quotation.
[ drop ] 2dip takes us from 9 t f to t f --
it dips under the top two, drops the temporary new top, then restores the original top two.
? is like a ternary.
That first quotation will push "Fizz" if called with t (true) on the stack, "" otherwise.
bi* applies the last two items (quotations) to the two values before them,
each only taking one value.
The Fizz one applies to t and the Buzz to f,
taking us from t f [...] [...] to "Fizz" ""
append joins those strings, as it would any sequence: "Fizz"
Finally we print the string, leaving us with an empty stack,
ready for the next iteration.
Nice! So what/where is the color scheme?