Saving stuff before it vanishes down the memory hole.

Jan 26, 2017

UPDATE - 20170302 - Added Firefox plugin for the Internet Archive.

UPDATE - 20170205 - Added Chrome plugin for the Internet Archive.

Note: This article is aimed at people all across the spectrum of levels of experience with computers.  You might see a lot of stuff you already know; then again, you might learn one or two things that hadn't showed up on your radar yet.  Be patient.

In George Orwell's novel 1984, one of his plot points of the story was something called the Memory Hole. They were slots all over the building in which Winston Smith worked, into which documents which the Party considered seditious or merely inconvenient were deposited for incineration.  Anything that the Ministry of Truth decided had to go because it posed a threat to the party line was destroyed.  This meant that if anyone wanted to go back and double check to see what history might have been, the only thing they could get hold of were "officially sanctioned" documents written to reflect the revised Party policy.  Human memory's funny: If you don't have any static representation of something to refer back to periodically, eventually you come to think that whatever people have been telling you is the real deal, regardless of what you just lived through.  No mind tricks are necessary, just repetition.

The Net's a lot like that.  There are literally piles and piles of information everywhere you look, but most of it resides on systems that aren't yours.  This blog is running on somebody else's server, and it wouldn't take much to wipe it off the face of the Net.  All it would take is a DMCA takedown notice with no evidence (historically speaking, this is usually the case).  This has happened in the past a number of times, including to an archive maintained by Project Gutenberg and documents explicitly placed into the public domain so somebody could try to make a buck off of them.  This is a common enough thing that the IETF has made a standard HTTP error code to reflect it, Error 451 - Unavailable for legal reasons.

So, how would you make local copies of information that you think might be pulled down because somebody thought it was inconvenient?  For example, climatological data archives?

Click for the rest of the article...

Year 1 under an authoritarian regime.

Jan 29, 2017

UPDATE: 20170612

Due to extenuating circumstances, I don't think I can keep updating this entry.  For the sake of my mental, emotional, and physical health I'm going to let it go.  Lifeline, Edison, and other parts of me are going to continue monitoring and archiving the USian political situation but I, the organic core of everything, need to step back and do other things.

UPDATED: 20170604

In response to reading this tweet, I thought I'd type up the following list, and add links to some stuff I've observed.  I'll update it as necessary.  List beneath the cut.

Click for the rest of the article...

Prediction: The United States of America will be at war again by 26 July 2017.

Jan 28, 2017

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

I very much want to be wrong.

Within 180 days of 0000 hours UTC, Friday, 27 January 2017, the United States of
America will declare war once again.  That puts it at Wednesday, 26 July 2017
at 0000 hours UTC.  I do not know for sure, but countries in the Middle East
seem the most likely targets.

This seems due, in part, that the USA seems to be trying to start the Crusades
again (George W. Bush tried once).  The Trump administrations' public and
flagrant distrust, disapproval, and seeming pants-shitting-fear of Muslims
around the world would seem to point to this.

This seems due, in part, to the low approval ratings of President Donald J.
Trump.  As of 28 January 2017 @ 1454 hours PST8PDT, they are at 36% approval,
44% disapproval on http://www.pollingreport.com/djt_job.htm.  I've made a PDF
copy of this file here:

https://drwho.virtadpt.net/files/trump_approval_ratings-20170128.pdf

SHA-512 hash of trump_approval_ratings-20170128.pdf:
81e512ea8e0dce363a262393263481030f13ac98b6ba630de76374bf601dd3bde31b3d6a39a3dcd2b06e44da4b993d6576f6fa27152c59dce81a7c5887709307

To jack up his approval ratings (and improve his chances of re-election, if
nothing else) this is a logical national action to take.  It certainly worked
for George W. Bush after 9/11 but wasn't enough to sustain his approval ratings
in the long run.

Evidence of the above claim: http://www.gallup.com/poll/116500/presidential-approval-ratings-george-bush.aspx

Local copy of the above claim:
https://drwho.virtadpt.net/files/george_w_bush-overall_approval_ratings.pdf

SHA-512 hash of george_w_bush-overall_approval_ratings.pdf:
3c20ec88b4c64a36db135d2ad13d437383f62ca1316b083c3c75352b11514b5df8c0353c20cfce74c332ea861591a9747f6acff446cde4d025761029b0f6d03f

I have received no orders, demands, or suggestions to write or post this.  I
have received no pay or other compensation to write or post this.

I have no insider knowledge.

I have only the patterns of history to suggest this, and I'm seeing everything
happen all over again.  And again.

I don't want to be right again.

- --The Doctor [412/724/301/703/415]

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEzSisNPw1FP5+EBZ4PWenWlRDxGQFAliNJkoACgkQPWenWlRD
xGQeTQ/9F/qo5trLC/R01ofDQCmwlBskZzxcsEIx5OGvtlgPBUyc+lRJOFSwK3tk
Yg2cuV06EjujyXGEojL8M/UxVONUj1KBK/7P/X/pIPKd3bVT1attUP5ChX9Htdof
ZdUpEZMzxoAC5dlqKosOdYUqpwBTMY56v5L3S4zQjmpw6vQi2GmWGK9kAr/xYZ95
2ACWz9CZHqCbv53Vt9b+dsf/MI7AWyrg+ic6w0egenTucTKIcdUhJCJh/BhhM8zU
bJNokb96QC8zP+fk/mleZiLAMX8XGrka0wxNbQazZfDWEMmvFVzrPR8FLupxI3jv
10tg+UbHPioUQIOUWeGk7HJRtdKGY+qx4AUlz5wzJBAtAYaiXfVBF9wZhsCBPLyB
hlzebG3gFg1kOBh08THUhAr5BTi5SgX/zRpBDhXIW2ALalkYm4SFYq5EiCYfR5vQ
iMpGs9hLWCupdiJpy9tcqgs32Pvxy7bksEgIhTbIaHZ27Q31D5fz2JiheqoYY8Ho
9P28gx6WXA+jARaOFsKhTFd2fIX0Ab/fgcOypUy0JGZKnzW7eOlt6pO9KUtI2RYr
7szCCJ1xyg0aT7+88oj8D20axvKCMYKYhDH88LgjLX5ZgqBOS31DgAM7oOUx//pA
WQejS32raPl0aEZznAtvWm7JTbrQ3HMPf7RYaw4NrmK0bNANGnk=
=SbdJ
-----END PGP SIGNATURE-----

#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