#datarefuge in the Bay Area - 11 February 2017.

Jan 28, 2017

UPDATE: 20170131 - The Eventbrite page for this event has gone live!  Sign up!

I haven't had time to write about #datarefuge yet, in part because people a lot closer to the matter have been doing so, and much better than I could at the moment.  An entire movement has arisen around scientific data being 451'd because it's politically inconvenient, and not many of us know if it's being erased or just shut down.  We also don't know for certain if it's being copied elsewhere for safekeeping so we're doing it ourselves.  To do my part, I've been communicating with some of the organizers and having Leandra suck down data as fast as my home link will permit to store it on her RAID array.  But, the important thing:

On 11 February 2017, the Datarescue SF Bay event will held at the Berkeley Institute for Data Science from 0900 PST until 1500 PST.  That day, everybody at the event will identify data sets at risk of vanishing, work out how to best mirror them, and download them as fast as possible so they can be archived elsewhere.  Bring your drives, bring your boxen, and get ready to burn up bandwidth.

Autostarting Kodi on an Arch Linux media box.

Jan 20, 2017

Not too long ago, when the USB key I'd built a set-top media machine died from overuse I decided to rebuild it using Arch Linux with Kodi as the media player.  The trick, I keep finding every time, lies in getting Kodi to start up whenever the machine starts up.  I think I've re-figured that out six or seven times by now, and each time after it works I forget all about it.  So, I guess I'd better write it down for once so that I've got a snapshot of what I did in case I need to do it again later.

The instructions in the Arch Linux wiki work, but you need to pick the right ones to follow.  The short-and-sweet ones with the automagickal AUR package don't work.  Forget it.

Install LightDM from the Arch package repository (sudo pacman -S lightdm).  Then install the instructions I linked to above to the letter.  That means carrying out the following tasks:

Create the file /etc/X11/Xwrapper.config.  The file should contain only the following text in bold (no double quotes): "needs_root_rights = yes"

Follow the LightDM "Enabling autologin" and "Enabling interactive passwordless login" instructions.  Create a user named "kodiuser" (you don't need to set a password" and give it access to system groups necessary to access resouces in the system.  I used the following command to do this: sudo useradd -c "Kodi Service Account" -G dbus,network,video,audio,optical,storage,users -m kodiuser

Create two additional groups which LightDM needs to enable autologin:

  • sudo groupadd -r autologin
  • sudo groupadd -r nopasswdlogin

Add kodiuser to those groups:

  • sudo gpasswd -a kodiuser autologin
  • sudo gpasswd -a kodiuser nopasswdlogin

Click for the rest of the article...

Huginn: Writing a simple agent network.

Jan 15, 2017

EDIT: 20170123 - My reviewers have suggested some edits to the article, many of which I've applied.

It's been a while since I wrote a Huginn tutorial, so let's start with a basic one to get you comfortable with the idea of building an agent network.  This agent network will run every half hour, poll a REST API endpoint, and e-mail you what it gets.  You'll have to have access to an already running Huginn instance that can send outbound e-mail.  This post is going to be kind of lengthy, but that's because I'm laying out some fundamentals.  Once you understand those you can skip past the explanations and move on to the good stuff.

First, a little background - what's a REST API?  If you already know just skip down past the cut and move on, but if you don't know what I'm talking about I'll try to explain.  I'm going to assume that you've been able to install Huginn using my instructions or someone else's, or you've got access to a running instance.  I'm also going to assume that you're not a hardcore coder, you're someone who's trying to apply a useful tool to your everyday life.

At its simplest, an API (Application Program Interface) is a way to interact with a system or part of a system.  It's (hopefully) designed to be regular, which means that once you understand the basics you can apply that knowledge to figure out the more complex parts with a little messing around because the basics continue to apply.  Let's say that I've written a library called myLib, which implements a bunch of really annoying stuff (like opening and closing files and sorting elements of data) so you don't have to.  My library has a bunch of functions that carry out those tasks (openStupidFile(), readAllOfFilesContents(), sortIntegers(), sortFloatingPointValues(), searchThisCrapForAString()) when you call them in your own code.  Those functions are part of my library's API.  In the documentation are instructions for calling each function, which includes the arguments you need to pass to each function (e.g., openStupidFile() takes two arguments, a full path to a file and 'r' for read-only or 'rw' for read-write, and it returns a handle to the file that you can pass to another function or NULL if it failed).  The data type each function returns (the file handle or NULL value) is part of the API, as are the arguments each function takes (path to the file and 'r' or 'rw').

The same principle has been applied to the Web in several different ways.  What concerns us right now is something called the RESTful API (REpresentational State Transfer), which basically means interacting with a web service using HTTP verbs (GET, PUT, POST, and so forth) and referencing  URLs instead of functions in a library.  Like HTTP, requests are stateless, which means that you make a request, the server responds, and there's no further context beyond that.  You can think of RESTful APIs as fire-and-forget.  The general idea is that there is a web server of some kind, which could be a traditional one like Apache or a specialized one running inside a web app built around a server like web.py which responds to those URLs in some way.  If you make a GET request to a URL, it'll send you some data.  If you make a PUT request you replace something on the server at that URL with something you send it.  If you make a POST request you create a new something on the server.  If you make a DELETE request that something on the server gets erased.  All of this depends on the HTTP verbs the server supports (not all REST APIs need to support all of them), your access permissions (not every account can do everything), whether or not you've authenticated to the server (it is sometimes the case that read-only access doesn't require an account but read-write access does require an account or an API token or something else along those lines), or who owns a particular resource (Alice's resources are read-only for every other account on the server, but read-write for her alone), of course.  REST makes life easier but it's not carte blanche to run hog wild.  Additionally, many REST API services enforce access limits - you get so many requests per minute, hour, or day and after that it returns errors.  For example, Twitter's API will return an Error 420 (enhance your calm) if you trip their rate limiter.

Click for the rest of the article...

Richard Spencer, face punching, and violence.

Jan 21, 2017

I shouldn't have to write this disclaimer, but here we go anyway: I am not one of these people and never will be.  I mirrored the documents in question because data has a way of disappearing from the Net when lawyers get involved, a phenomenon called HTTP Error 451 (Unavailable for legal reasons), and we're already seeing potentially damaging and damning information quietly going away.  So, if you're going to say that because I have a copy of a particular document on my website I support the author when I just said I didn't, please pull your head out of your ass.

What a world in which I have to say this.

If you were fortunate yesterday you got to watch this man, Richard Spencer (Wikipedia page archived at 20170121@0955 hours PDT in case somebody sanitizes it) (local mirror) (mugshot), get punched dead in the face (local mirror in case the video disappears) by what appears to be an antifa protestor on live television.  Spencer is openly and vocally a white supremacist and chairbeing of an uncannily influential white supremacist think tank called the National Policy Institute (google them, I'm not linking to their website), though in the US they're calling themselves white nationalists these days.  He wrote this article (Internet Archive copy because it mysteriously vanished from his website) (local mirror)  At the Inauguration yesterday, he said this: "Let's party like it's 1933." (local mirror) There is some controversy about this guy getting clocked while being interviewed.  Perhaps, some say, they should have given him a chance to make the first move.  Perhaps he should have been taunted into throwing the first punch to have some justification for getting nailed.

I disagree, and this is why: Have you ever gotten stomped?

Seriously - have you ever gotten the living hell beaten out of you because you were not white, or because you were queer or just because somebody wanted an excuse to take you out?  Legit beaten down, wound up in the hospital, perhaps injured for an extended period of time?  Maybe still feeling it years later?

These screwheads do not give you a chance.  They do not taunt you into throwing the first punch.  They do not let you make the first move.  They come at you with everything they've got, usually as a group, and they do not let up until either you're down and out or somebody comes to your rescue (which is rare, if ever).  They have only one thing in mind, and that's turning you into paste on the floor or sidewalk.  They do not let up until they think they're done, for some definition of done.  They care about taking you out, period, full stop.

Does that make what happend to him right?  Well, yes, he's a goddamn Nazi.  His followers, and groups moving along the same lines have done the same thing to people time and time again over the years, often much worse than he got.  People like Spencer have the gift of making up erudite-sounding words to justify it.

I shed no tears and raise a toast to the unknown person who punched him.  That was a very small taste of what some of us got for the crime of merely existing.  It isn't a matter of right or wrong, it's a matter of what goes around comes around.

Inauguration Day 2017

Dec 24, 2016

"And eventually, there aren't any real people left. Just robots pretending to give a shit."

"Perhaps. Depends on the population dynamics, among other things. But I'd guess that at least one thing an automaton lacks is empathy; if you can't feel, you can't really relate to something that does, even if you act as though you do. Which makes it interesting to note how many sociopaths show up in the world's upper echelons, hmm? How ruthlessness and bottom-line self-interest are so lauded up in the stratosphere, while anyone showing those traits at ground level gets carted off into detention with the Realists. Almost as if society itself is being reshaped from the inside out."

"Oh, come on. Society was always pretty— wait, you're saying the world's corporate elite are nonsentient?"

"God, no. Not nearly. Maybe they're just starting down that road. Like chimpanzees."

"Yeah, but sociopaths don't blend in well."

"Maybe the ones that get diagnosed don't, but by definition they're the bottom of the class. The others are too smart to get caught, and real automatons would do even better. Besides, when you get powerful enough, you don't need to act like other people. Other people start acting like you."

--Cunningham and Sascha!Gang of Four, Blindsight, by Peter Watts

A long-forgotten Commodore game. Was it ever released?

Jan 14, 2017

UPDATE (20170120): The game may have been found!

Many years ago, maybe a year after 321 Contact magazine merged with Enter magazine, there was a review of a video game which seemed like it was a tie-in for the movie 2010: The Year We Make Contact.  The scenario was that you'd just gained access to the USS Discovery, and you had to repair all of the systems on board the ship to win the game.  As I recall, a free hint in the review was that you should repair HAL-9000 first, because he could help you figure out how to fix the rest of the ship.  I don't think I ever saw it in a store (then again, it's been over 30 years), nor do I recall reading about it in any of the other Commodore magazines I was reading at the time.  It may have been vaporware - an early review copy could have been sent out but it never actually hit the shelves.  I've searched for information about this game periodically over the years, and I've had searchbots prowling around looking for information about it as well (even dozens of permutations of likely titles for the work), and none of us have found anything even vaguely talking about it.

Oh, Internet hive-mind... did this ever actually exist?  If so, where could I find a copy?  And, most importantly, what was the title of the game?


As mentioned above, I think the game in question has been found. Jarandhel succeeded where I kept failing.  He was able to determine that the game's title is actually 2010: The Graphic Action Game, and it's not a Commodore title, it's a Colecovision title.  The screenshots certainly seem to match what I remember seeing in a magazine, and the game mechanics definitely fit what I recall.  The entire game has been described as being one big hacking minigame (warning: TV Tropes link).  Chances are there's an abandonware version of it floating around someplace, though I'll need to track down a Colecovision emulator to play it.

James O'Keefe caught trying to pull another fast one.

Jan 14, 2017

So, there's this guy named James O'Keefe.

He's got this problem: He likes trying to play Mission: Impossible and wreck the careers and lives of people he doesn't like by pulling scams, editing videos in interesting ways to set people up, and generally being the sort of person you'd eject from the party for being such a huge asshole that the Alpha Betas would throw him out on his ear.  He spent all of Election Day in 2016 tailing buses taking people to the polls in an attempt to intimidate them into not voting.  He's cost a couple of people their jobs.  He's also been paid to do other people's dirty work, including breaking and entering and wiretapping, and his video editing skills are creative to say the least, but he relies upon shock value to cover up the fact that he's talking out of his ass.  His track record shows that there's a 50/50 chance that he'll burn himself while trying to pull a black op (and I'm being much too polite because the guy's not even a mall ninja).

He's up to his old tricks again, only this time his reputation preceeded him and he was caught in the act when the groups he approached turned the tables on him by using his own tricks.  O'Keefe and Allison Maass (one of his employees) approached two organizations, Americans Take Action and the journalist group The Undercurrent, and offered them thousands of dollars if they would disrupt the inauguration on 20 January 2017 by shutting down bridges and inciting a riot.  Two versions of the video are available, an edited version in a news segment by The Young Turks (including some behind-the-scenes discussion that you really should watch) and longer video footage which is damning, to say the least.  When last I heard, trying to pay people to cause riots and generally wreak havoc was a felony in the United States.

Click for the rest of the article...

What's it like having synaesthesia?

Jan 03, 2017

What's it like not having synaesthesia?

That sounds like a flippant answer, but it's quite the truth.  I can't remember a time when I didn't experience sounds (music, in particular) in a deep, visceral way that involved more than just my sense of hearing.  For the longest time I thought everybody's experience of life was like mine.  I thought everybody cried when they heard violin music.  I thought everybody felt waves of cold and prickles when they heard sounds made up of square waves (yeah, I'm dating myself, aren't I?)  Didn't everybody shiver and see starbursts of pink and purple light when they heard a particular chord progression on the radio (strangely, the original Also Sprach Zarathustra doesn't have that effect on me - must be the pedals Andy Summers used in the studio)?  Didn't everybody feel... pain... when they just heard something shrieking or screaming, like bus brakes or the scream of a dentist's drill (note: video of actual drill-and-fill; feel free to not click on it)?

To answer my (rhetorical) question another way, everybody seems to be synaesthetic to some degree.  Take a look at this image.

Now, tell me: Of what you see in that image file, which one is Kiki and which one is Bouba?

Click for the rest of the article...

Upgrading Bolt CMS to v3.x.

Jan 02, 2017

Since PivotX went out of support I've been running the Bolt CMS for my website at Dreamhost (referral link).  A couple of weeks back you may have noticed some trouble my site was having, due to my running into significant difficulty encountered when upgrading from the v2.x release series to the v3.x release series.  Some stuff went sideways, and I had to restore from backup at least once before I managed to get the upgrade procedure straightened out with the help of some of the developers in the Bolt IRC channel on Freenode.  If it wasn't for help from rossriley it would have taken significantly longer to un-fuck my website.

Here's the procedure that I used to get my site upgraded to the latest release of Bolt.

Click for the rest of the article...

Neologism: Disk Paranoia

Jan 08, 2017

Disk paranoia - noun - That occasionally well-founded sense of creeping dread one feels when repartitioning, reformatting, or clearing a USB drive.  The dread stems from the fear that one is not, in fact, doing something terminal to the correct drive and you're actually zorching one of your internal drives (usually the one with all of your data on it).  This leads one to recheck the terminal window once every nine or ten seconds to make sure you're messing with the correct drive.  This may also include opening multiple other terminal windows to display the list of currently mounted devices, cross-checking the output with the disk manipulation command you're running to make sure you got the right one, and scrolling back to re-re-re-check earlier diagnostic output.