Sat 2020-02-22 02:36

  • Posted:
  • Edited:

Cory Doctorow sometimes posts insightful and interesting articles and talks but this piece isn't one of those, I'm afraid. In this latest editorial on the EFF website, Doctorow opines that adversarial interoperability was the downfall of the Gopher protocol. That the Web killed Gopher by... wait for it.. working with it.

Nice thought, but speaking as someone who is fairly familiar with it, what killed Gopher was that it was a rather shit protocol limited by inherent design flaws. The new kid HTTP was able to do everything Gopher could do (and in most cases, do it better) and could also do things Gopher couldn't. This was because of the HTTP protocol's flexible (and rather agnostic) design. It wasn't by some Machiavellian conspiracy that the World Wide Web supplanted Gopher. It was because HTTP was simply more capable and easier to use for most people, that the Web caught on.

Let's also not forget (as Doctorow apparently did in the above-linked article) that UMN (the university where Gopher was invented) shot their own baby in the head in 1993. The university placed their Gopher server implementation under a restrictive license, thus creating fear within the contemporary Gopher admin circles that other similar or derived server implementations might also be subject to UMN copyright claims.

Considering Doctorow is usually a staunch critic of copyright, it's odd he didn't see fit to mention that factoid. I guess it would have weakened his overall premise? I mean, given that CERN httpd (1990) was under a permissive license from the beginning, as were successors NCSA HTTPd (1993) and Apache (1995), it's really not that surprising that Gopher would drop out of favor with university computer science departments of the era who were concerned that deploying Gopher services might open their schools up to UMN claims for licensing fees. HTTP was the safer option.

In its day (an era of largely text-mode Internet communications and basic file downloads, where packet-level security was not a pressing concern), Gopher was a decent-enough protocol. But as soon as graphical web browsers hit the scene, people began to see the enormous possibilities of the Web and the writing was on the wall for its buck-toothed predecessor. These days, aside from the interest of retro-tech fetishists and those misguided persons who blame the sad state of the Web on its underlying protocol (rather than on the shit web developers who link 5MB+ of Javascript frameworks, ads, and trackers into every webpage they create) Gopher is a thing that ran its course a long time ago. And for good - technical - reasons.

Tue 2020-02-18 01:17

  • Posted:
  • Edited:

This crap is just one example of why I steer clear of WordPress. Install a theme and get a security vulnerability as a bonus.

The sheer breadth of the WordPress install base paints an enormous target on the back of not only the core product, but also every popular plugin. And frankly, it seems too many plugin developers don't take that reality seriously. In this case, ~200,000 websites are now vulnerable until patched (assuming they ever will be, I mean c'mon..).

I guess it could be worse. Given the WordPress market share, anyone who finds a serious security hole in the base WordPress package could potentially root a third of the Web.

Tue 2019-12-31 20:57

  • Posted:
  • Edited:

I've used PulseAudio on many Linux laptops and workstations over the years, and it usually works so well, so consistently that I've never felt the need to dig around under the covers. It was basically this magical software that I installed and my computer had sound.

Over the holiday break, I had some spare time to tinker and I thought it might be nice to finally put together some kind of audio streaming solution for the apartment. Sort of a "whole house audio" system - without the wiring. I setup a music server running MPD on an older Intel NUC I had sitting in my parts drawer, and NFS-mounted my music library from the NAS. Then I enlisted a couple of old Raspberry Pi 2B's I had sitting around collecting dust, added a USB WiFi adapter to each, and made them my audio receivers to connect to speakers.

The question then was, how to get music from the MPD server to the RPis?

It turns out the answer was pretty simple and - as you've probably guessed already - it involved PulseAudio. Did you know that PulseAudio has a network transport? I didn't. It was time for me to learn some new stuff about an old tool.

First off, because no one would be logged into a desktop session on these devices I had to set PulseAudio on the music server and the RPis to run in system mode. Some tweaking was involved to accomplish this (see the linked docs) and all of the config lines I used below go in /etc/pulse/ rather than /etc/pulse/

For strangers to the innards of PulseAudio, first grasp the basic concept that PulseAudio defines inputs and outputs as "sources" and "sinks". My first step was to create a new fake sink (a "null" sink) to receive the system audio, and transport the audio sent to that null sink (captured by the "monitor" of that sink) via RTP stream to my RPis.

On the server:

load-module module-null-sink sink_name=rtp 
load-module module-rtp-send source=rtp.monitor mtu=1408 destination_ip=[remote IP 1] 
load-module module-rtp-send source=rtp.monitor mtu=1408 destination_ip=[remote IP 2]

On the RPis:

load-module module-rtp-recv sap_address=[local IP]

Well, that was actually pretty simple. I configured MPD to use PulseAudio as an output, restarted both PulseAudio and MPD, and started playing a song in MPD. BINGO! Synchronous streaming audio to the RPis and their connected speakers, and the apartment was filled with music in every room.

I played with this setup for a day or so: adding music playlists to MPD, setting up M.A.L.P. on my phone to remote control MPD, etc. Then I thought, wouldn't it be cool if I could take the output from my SiriusXM receiver and stream that audio to every room, also? It turns out that yes - it is cool. But it was a task not without some challenges to accomplish.

For starters, my NUC didn't have a stereo line-in port so I picked up a no-name $15 USB sound card that did. Then I thought it would be a simple matter of plugging in the stereo out from the SiriusXM receiver to the line-in on the USB card, but nothing is ever that simple. I had to go back to the PulseAudio docs and this time learn about the loopback module, which acts like a virtual mixer.

First, I had to create an additional null sink dedicated for MPD:

load-module module-null-sink sink_name=mpd_out

Next, I had to tell MPD to send its output to that sink (in /etc/mpd.conf):

audio_output {
    type    "pulse"
    name    "Pulse Output"
    sink    "mpd_out" 

Then I had to use pactl list sources to find the cryptic ass name PulseAudio had given to the USB sound card interface, which turned out to be:


Say that five times fast.

Finally, I had to mux the monitor of the MPD sink and the line-in source together by sending them both through the loopback module to the RTP stream sink:

load-module module-loopback source=mpd_out.monitor sink=rtp
load-module module-loopback source=alsa_input.usb-0d8c_USB_Sound_Device-00.analog-stereo sink=rtp

I turned on the SiriusXM receiver and... nothing. The USB sound card has both a mono mic port and a stereo line-in port, and for whatever reason the mic port has a higher default priority and the system preferred it as the capture device. I had to tell PulseAudio to prefer the line-in port instead. While I was at it, I set the volume on the line-in port to normalize it with the MPD output, and made sure the port was not muted:

set-source-port 1 analog-input-linein
set-source-volume 1 15000
set-source-mute 1 0

I restarted PulseAudio and the SiriusXM output started piping to all of the speakers in the house. So cool. Now I have a whole house audio system with a choice of either playlists from my music library or live SiriusXM satellite radio. I think my next project will be to setup an IR receiver/repeater system so I can change the radio station while sitting on the couch in the other room.

Mon 2019-09-23 06:51

In my younger years I remember reading in cyberpunk fiction about the concept of technoshock: a state where technology advances faster than the average person can incorporate it into their lives, causing a sort of psycho-social backlash effect. I figure we're about five minutes from that point because even technologies that are commonplace are apparently beyond the ability of some people to master. Case in point:

For the last six months or so, a woman who likely has a similar name to my own has been using an old Gmail address of mine to do such things as create accounts on clothing retailers' websites and buy plane tickets. Far beyond a one-time mistake, this person has used the wrong email address many, many times, and continues to do so on a regular basis. Setting aside that clearly many websites still don't do email confirmations for new accounts, I guess she should consider herself lucky that I am the recipient of this mistake. My personal code of ethics prevents me from resetting the passwords on her accounts, locking her out, potentially accessing her saved payment and address information, stealing her identity, or in the most recent case - claiming or cancelling her airline boarding pass. The only thing I've done thus far is unsubscribe my own address from those website mailing lists. You'd think by this point she'd start to wonder why she doesn't get the sales announcements, order confirmations, or airline notifications, and realize she had been using the wrong email address all this time. But you'd be wrong.

For another case, there is the gentleman in Charlotte, NC who is apparently confused about his own phone number and for the last few months has been giving out one of my private numbers to apparently every single person he ever meets (based on the volume of calls and texts I get looking for 'Mont'). My cellphone's caller block list now contains nearly a hundred 704 and 980 numbers belonging to people trying insistently and at all hours of the night to reach this fellow. To the point that I now set my phone to Do Not Disturb before going to bed, as it's the only way to prevent waking up to a midnight caller looking for this other person. When I have answered - knowing the call isn't for me - the callers have usually hung up immediately. If the call rolls to voicemail I often receive a succinct, cryptic message like "tryin' to gitcha, holla back quick." I won't conject as to the business 'Mont' engages in, but he certainly keeps odd hours and markets his contact information prolifically. I've considered using a call filter app to forward all calls received on that number from area codes 704 and 980 to 404-893-7000. Seems like there would be potential there for karmic lulz.

But really, phone numbers and email addresses are decades-old technologies, and some people apparently have a problem navigating them successfully. That doesn't bode well for these same folks in the fast-paced, AI-centric, automated, app-driven, technocratic future we're hurtling towards. These people probably already feel like their grasp of the technology upon which they rely is tenious at best. How are they going to feel in another 5-10 years when they (and probably most other people) will no longer have any idea how practically anything works?

Technoshock... incoming.

Wed 2019-08-28 00:12

Have you ever been in a discussion with someone, where they're telling you how to do something and you feel like they're kind of talking to you like you're an idiot. So you draft a lengthy email with screenshots and descriptive text explaining to them that you've tried doing what they said, and as you can see in the screenshots it isn't working. You click Send and recline in your chair with a sense of smug satisfaction at your own vindication that you are not the idiot - they are.

And then... you happen to look at your sent mail and notice in the very screenshot you took that one thing you've been missing and which was there all along but you failed to notice. That one thing that solves your problem. And then the revelation pours over you like a bucket of ice water... you are an idiot. And you just made a complete ass of yourself.

Have you ever had that happen to you? I have. Just now.