Build your own Spotify-like music streaming solution using mpd

Since I distrust centralized services such as Spotify that can delete content you love at any time they like, I’ve always bought my own music and have a huge collection. But there’s no denying that streaming music to any device or location is a useful feature. You still don’t need Spotify for that, thanks to the FOSS community you can build your own Spotify-like streaming system, and this guide shows one combination of software to accomplish this.

The goal: Stream your music collection from your own PC (or NAS or whatever storage you have) to any web browser, mobile phone and desktop clients.

The method: A little Linux magic involving the following components:

Continue reading “Build your own Spotify-like music streaming solution using mpd”

Yet another way to get a tear-free, stutter-free desktop with Plasma/KDE and Nvidia

So the proprietary Nvidia driver is a large, steaming, smelly pile of shit. At least that’s the impression you get when you read what developers say about it. There’s a bug here and a workaround there, and we haven’t even started talking about the messy situation that is EGLstreams yet. So why do people use Nvidia cards on Linux? Because so far, they give good bang for the buck, use relatively little energy for what they do and work with all commercial games. I’m pretty sure those are the reasons, anyway.

But Nvidia at least on Plasma/KDE has some serious problems with tearing and stutter — I have three Nvidia setups and they all are unsatisfying out of the box. If you use ForceCompositionPipeline like I recommended earlier, you will probably run into stutter issues. But I think I found the perfect setup now, stutter-free and tearing-free for desktop use as well as perfect for gaming.

There are two alternatives:

Method 1: Solve it by switching the GL yield mechanism to USLEEP

Add the following to ~/.config/plasma-workspace/env/kwin.sh:

#!/bin/sh
export __GL_YIELD="usleep"

Thank mahenou on Steam for suggesting I try this again. The first time I did, it was probably too late in the environment for Kwin to pick it up. It’s important that the var is set when Kwin initializes.

Method 2: Solve it by forcing triple buffering

Add the following to ~/.config/plasma-workspace/env/kwin.sh:

#!/bin/sh
export KWIN_TRIPLE_BUFFER=1 

And chmod +x the file. Then add the following to an Xorg config snippet, for example /etc/X11/xorg.conf.d/20-nvidia.conf:

Section "Device"
        Identifier      "Videocard0"
        Driver          "nvidia"
        Option          "TripleBuffer" "true"
EndSection

Finally, enable compositing and vsync

Then make sure you have compositing enabled in System Settings -> Display and Monitor -> Compositor. If you are very doubtful, do a restart. After that you should have a perfect, tear-free and stutter-free desktop experience. I had to disable compositing manually with Alt-Shift-F12 before starting games with the triple buffering method. This was unnecessary with the __GL_YIELD method.

I can’t truthfully explain why this works, but I know it works around a bunch of bugs and unexpected default settings in the Nvidia driver. Also, Kwin is now able to compute the right timings and handle triple buffering instead of rendering half-finished frames like a fucking moron when it still believed Nvidia was doing triple buffering by default.

For me this has been wonderful. The desktop is smooth as if I were using a proper graphics card like an AMD RX 580 with Mesa. Games run exceedingly well, and there is no stutter or delay like with ForceCompositionPipeline. Not even in videos. It’s all just perfect.

This is a mix of hints received from several people on Reddit and Steam that I unfortunately forgot the names of, as well as info from the Arch Linux wiki. I’d like to thank all these people for their knowledge.

Working around broken firmware for Realtek USB WLAN adapters on newer kernels

If you run a combination of newer (4.9ish) kernels and systemd, your USB wifi networking gear probably now gets funky names such as “wlx74da387e95fe” instead of “wlan0” like you were used to back in the good days. This wouldn’t be so bad, only that the firmware on those dongles can mess up when the device gets a long name. Suddenly it won’t let you connect to your wireless network, claiming that the network does not exist, even though you know for a fact that it does. What your machine is actually trying to say, I believe, is that the network device doesn’t seem to exist.

If you have those symptoms, this answer by Maciek on Stackexchange will probably help. I encountered the problem while using one of the Edimax USB wifi dongles that are popular on the Raspberry Pi.

I had to add this to /etc/udev/rules.d/70-persistent-net.rules:

# edimax USB stick
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="ba:ba:ba:ba:ba:ba", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan", NAME="wlan1"

Substitute your own dongle’s MAC address for ba:ba:ba:ba:ba:ba and things should work. Of course make sure wlan1 isn’t taken already. If everything turns out well, your dongle now has a sane name again and connecting should just work.

Using Xbox 360-compatible controllers properly inside WINE

Update: There are now easier ways to manage this, for example through Lutris. If you manage your WINEs in Lutris, you simply have a checkbox whether to include dumbxinputemu or not.

If you need to use WINE to play some Windows games, the lack of Xinput support might get on your nerves. WINE maps joystick devices to Dinput. That works for some older games, but buttons need to be mapped manually, and many newer games don’t detect the controllers at all because they expect Xinput.

I tried to get by this issue using x360ce, but this is a fickle beast already when run natively on Windows; even more so in WINE. What worked really well for me was dumbxinputemu. Sometimes dumb things are the best.

To use it, determine if you’re running a 64-bit or a 32-bit game, then copy at least the matching xinput1_3.dll from the latest release to the same directory as the game’s binaries. In the case of Steam, that’s probably somewhere inside Steam/steamapps/common. Then make sure your WINE is set to prefer the native version of the DLL via winecfg:

In the “New override for library” dropdown select “xinput1_3”, then “Edit…” that entry to set it to “native” only. If you have a very new game, you might need to do repeat all these steps for xinput9_1_0.dll. This worked surprisingly reliably for me, no more double-detection of joysticks, no more wrong labels for buttons inside games, no more fiddly x360ce that works sometimes but then mysteriously breaks. Everything behaves as it shoud. Thank you, kozec.

Our terrible future of closed protocols and proprietary systems

TL;DR (1072 words): The current trend towards closed communications systems like Slack, Facebook and the like can only hurt us as society. An open standard needs to emerge. Who’s volunteering to support things like Matrix and the “new decentralized Internet”?

I’m trying to illustrate the newly closed nature of the Internet using team chat and team collaboration as an example. But you can expand this example to pretty much anything nowadays. Because the solution to combat this closed-ness applies equally to all of these issues, I hope you can extrapolate from this as necessary.

Continue reading “Our terrible future of closed protocols and proprietary systems”

Google shutting down XMPP interoperability is a sad sign of the age of communication silos

Update: With XMPP slowly dying (at least IMHO), maybe you should consider Matrix instead of XMPP and ignore everything I write below.

Google just shut down the last piece of Google Talk, killing XMPP. This means that people using standards-based open and interoperable chat systems can no longer talk to their friends who use Google’s proprietary and closed chat system, Hangouts. For example, people who use Pidgin on any of the thousands of free and open XMPP servers in the world cannot message Google users anymore.

Instead of working towards standardization, making sure that all chat systems from all vendors can talk to each other, each large company now has their own communications silo. Skype is not compatible with Hangouts is not compatible with Apple FaceTime is not compatible with WeChat is not compatible with WhatsApp. Even though all these systems perform mostly the same function, have roughly the same features and could be built using open, mutually compatible standards. Could even be built from the same source code.

But Google, Microsoft and Facebook make more money by preventing you from talking to your friends on other systems. They want to analyze both parts of a conversation, they want to control the sender and the receiver and read all the content. This is harder to do when you have a standardized, federated system, and even harder in the case of XMPP where users can employ message encryption with just a few clicks. Encryption that is not controlled by Microsoft or Facebook but by the users themselves.

What can you do against this?

  • Geting an XMPP JID would be the first step. You can register for an account on any public XMPP server (sometimes called Jabber servers, but Jabber is now a closed product by Cisco, adding insult to injury, while the XMPP standard remains open).
  • Then get an XMPP client, for example Pidgin for the desktop and Conversations for Android. Set up your account and log in. People can now invite you to their XMPP contacts and you can start chatting.
  • If you want message encryption, make sure to enable OTR. There are many tutorials on this, I’ll just link to a random one I found.

What if you don’t do this? Then we’ll end up in a world with more communication silos, where people find it harder and harder to talk to each other, and huge multinational companies with bad privacy policies will control and record more of our communication. Because these closed platforms create inconvenience for anyone not inside those closed platforms, peer pressure will then pull everyone towards such closed platforms, until a dangerous oligopoly emerges. This latest move by Google is one more step in this direction.

I’ll leave you with a link to a relevant XKCD comic.

Google is trying to destroy the ad blocker market

Like I guessed about two years ago, Google are now trying to undermine the ad blocking market by releasing their own ad blocker, which will of course not block ads served by Google. It will probably also not block other privacy invasions or tracking systems that would benefit Google or its customers. Since Google is the world’s largest advertisement company, that’s quite a few.

This is likely just the first step of several that they might take while abusing their browser dominance. Watch carefully as things get worse the higher Chrome’s market share climbs.

You can still use an independent web browser, but who knows for how long? The effects I described in that old article linked above might lead to content no longer working correctly on anything but Google Chrome, and by that time Google’s control of what you can and cannot see, and also of how much of your privacy you are forced to surrender, will be total.

55'555 kilometers in a Tesla Model S in the Swiss Alps

Well, okay, we didn’t cover that entire length just in the Alps, but I needed a catchy title. If you want the short version: there is nothing to say here, and that’s the most significant thing I can tell you about electric driving in Europe today.

IMG_2515
Solar-powered Supercharger in Denmark

Continue reading “55'555 kilometers in a Tesla Model S in the Swiss Alps”

I'm pretty sure that Microsoft will buy (at least a stake in) Canonical

Canonical are apparently preparing for an IPO. If that happens, I’m pretty sure Microsoft will grab a good chunk of them and maybe absorb them completely later.

While Microsoft has been focusing more on the container side with Docker lately, they have also been cuddling with Ubuntu. Windows Subsystem for Linux (WSL), which runs Ubuntu in a cage, is only one of these examples. Observe also that e.g. Microsoft’s MS-SQL adapter for PHP only explicitly supports Ubuntu and RedHat, none of the other distros.

If the IPO does happen, see me back here in 2 – 5 years to resolve any bets 🙂

How Microsoft and Google are manipulating your children

Microsoft yesterday announced Windows 10 S, a cut-down version of Windows 10 for the education market. They plan to make it available to PC makers to sell laptops with, for as little as US$ 200 a pop. “Like a Chromebook, then”, you say? Exactly, like a Chromebook.

Services as drugs for kids

This is the start of a new turf war for child mindshare. Like drug dealers, Microsoft and Google know that it’s best to get them early, get them young, make them depend on your products. Microsoft even helpfully supplies teaching aids.

Continue reading “How Microsoft and Google are manipulating your children”