Spending quality time with the Pi-Top.

Apr 30, 2017

A couple of months ago for my Lesser Feast I decided to treat myself to a toy that I've had my eye on for a couple of months: A Pi-Top laptop kit.  My fascination with the Raspberry Pi aside (which includes, to be honest, being able to run a rack full of servers in my office without needing to install a 40U rack and a new 220 power feed), it strikes me as being a very useful thing to have under one's desk as a backup deck or possibly a general purpose software development computer.  Most laptops have one unique motherboard per model and if you want to upgrade (or need to replace it) you're pretty much limited to buying a brand-new laptop.  To upgrade a Pi-Top you just need to buy a new RaspberryPi, slide a panel aside, and swap a few cables, a system design that I think could be useful indeed.  It also has remarkably few components; the screws and fasteners aside, the PiTop is composed of only a few modules: A base with a battery, a keyboard and touchpad panel, a lid with display, a black lexan access panel, a hub circuit board that ties everything together, and a RasPi.  You can get a couple of modules to go with it, such as a prototype board for electrical engineering experiments and modular speakers, all of which attach to a sliding rail and plug into a unique pinset on the hub.  I'm not an electrical engineer by any means but I have built many a kit over the years, and from eyeballing it it looked like a fairly simple build.  I didn't document the build with photographs or anything because I didn't think to do so at the time.  Sorry.

Click for the rest of the article...

Gargantuan file servers and tiny operating systems.

Apr 29, 2017

We seem to have reached a unique point in history: Available to your average home user are gargantuan amounts of disk space (8 terabyte hard drives are a thing, and the prices are rapidly coming down to widespread affordability) and enough processing power is available for the palm of your hand that makes the computational power that put the human race on the moon compare in the same was that a grain of sand does to a beach.  For most people, it's the latest phone upgrade or more space for your media box.  For others, though, it poses an unusual challenge: How to make the best use of the hardware without wasting it needlessly.  By this, I mean how one might build a server that doesn't result in wasted hard drive space, wasted SATA ports on the mainboard, or having enough room to put all of that lovely (and by "lovely" I really mean "utterly disorganized") data that accumulates without even trying.  I mentioned last year that I rebuilt Leandra (specs in here) so I could work on some machine learning and search engine projects.  What I didn't mention was that I had some design constraints that I had to follow so that I could get the most out of her.

To get the best use possible out of all of those hard drives I had to figure out how to structure the RAID, where to put the guts of the Arch Linux install, and most importantly figure out how to set everything up so that if Leandra did blow a hard drive the entire system wouldn't be hosed.  If I partitioned all of the drives as described here and used one as the /boot and / partitions, and RAIDed the rest, if the first drive blew I'd be out an entire operating system.  Also, gauging the size of the / partition can be tricky; I like to keep my system installs as small as possible and add only packages that I absolutely need (and ruthlessly purge the ones that I don't use anymore).  20 gigs is way too big (currently, Leandra's OS install is 2.9 gigabytes after nearly a year of experimenting with this and that) but it would leave room to grow.

Decisions, decisions.

So, what did I finally decide on?

Click for the rest of the article...

.plan file updated again.

Apr 16, 2017

I've updated my .plan file yet again.  As per usual, NSFW content, out of context quotes, and things that put your keyboard and display in danger at work abound.

OpenVPN, easy configuration, and that damned ta.key file.

Apr 15, 2017

Now that ISPs not selling information about what you do and what you browse on the Net is pretty much gone, a lot of people are looking into using VPNs - virtual private networks - to add a layer of protection to their everyday activities.  Most of the time there are two big use cases for VPNs: Needing to use them for work, and using them to gain access to Netflix content that isn't licensed where you live.  Now they may as well be a part of everyday carry.

So: Brass tacks.  Here's a quick way to set up your own VPN server, as well as a solution to a problem that frustrated me until very recently.  For starters, unless you're an experienced sysadmin don't try to freestyle the setup.  There is an excellent script on Github called openvpn-install that will do all of the work for you (including adding and deleting users) in less than a minute.  Use it to do the work for you.  Please.  Also, if you build an OpenVPN server, consider going in with a couple of friends on the cost.

Chances are you're running either Windows or Mac OSX (Linux and BSD users, you know what to do) so you'll need an OpenVPN client on the users' end.  This means that you want to run either the Windows version of the OpenVPN client or an OSX client like Tunnelblick.  However, these clients assume that you're just loading an all-in-one configuration file, called an .ovpn file.  If you've never done it before they're remarkably tricky to build but they're basically a copy of the OpenVPN client.conf with all of the crypto keys embedded in special stanzas.  It took me a lot of fumbling and searching but I eventually figured out how to reliably make them.  To save you some time here's a copy of the one I use with all the unique stuff removed from it.  If you open it in a text editor you'll notice a couple of things: First, the very first non-commented line says that it's for the client and not the server.  Second, I have it configured to use TCP and not UDP.  This is so that you don't have to reconfigure the firewall you're behind to get your traffic through.  Keep it simple, trust me on this.  Third, the ca, cert, and key directives are commented out because those keys are embedded at the end of the file.  Fourth, I have tls-auth enabled so that all traffic your server will handle is authenticated for better security.

If you freestyle (that is, build by hand) your OpenVPN server, you'll need to keep in mind the following things:

Click for the rest of the article...

Neologism: Kinetic pattern baldness

Apr 15, 2017

kinetic pattern baldness - noun - The characteristic hourglass-shaped pattern of hair loss in both men and women that results from tearing one's hair out in frustration on a regular basis.

Setting up converse.js as a web-based chat client.

Apr 09, 2017

As not bleeding edge, nifty-keen-like-wow the XMPP protocol is, Jabber (the colloquial name for XMPP I'll be using them interchangably in this article) has been my go-to means of person-to-person chat (as well as communication protocol with other parts of me) for a couple of years now.  There are a bunch of different servers out there on multiple platforms, they all support pretty much the same set of features (some have the experimental features, some don't), and the protocol is federated, which is to say that every server can talk to every other server out there (unless you turn that function off), kind of like e-mail.  You can also build some pretty crazy stuff on top of it and not have to worry about the low-level stuff, which isn't necessarily the case with newer protocols like Matrix.  There are also interface libraries for just about every programming language out there.  For example, in my Halo project I use SleekXMPP because it lets me configure only what I want to out of the box and handles all of the fiddly stuff for me (like responding to the different kinds of keepalive pings that Jabber clients send).  Hack to live, not live to hack, right?  There are also XMPP clients for just about every platform out there, from humble Android devices to Windows 10 monstrosities.  However, sometimes you find yourself in a situation in which your XMPP client can't reach the server for whatever reason (and there are some good reasons, let's be fair).

Click for the rest of the article...

Neologism: Debuggery

Mar 21, 2017

debuggery - noun - The unshakable feeling that your code is completely fucked when you spend multiple all nighters in a row tracking down a single annoying bug that winds up not being in your core code, nor any modules you've written, nor any of the libraries you're using, but in a different part of the system entirely.  In other words, your code is so poorly architected that you can't tell when problems aren't actually in your code.

Ghost In the Shell: A disappointing hack.

Apr 09, 2017

Last Thursday I made the probably unwise decision to see the live-action interpretation of Ghost In the Shell starring Scarlet Johannson at the local movie theater.  The terrible weather in the Bay Area aside (continual rain, Washington DC-like cold, gusts of wind up to 50 miles per hour), it's just not a good movie.  I was expecting a half-assed retelling of the original movie's story with additional Hollywood elements, and I wasn't disappointed in that respect.

tl;dr - Don't bother.  ScarJo's new movie is a bad cosplay that'll leave you feeling like you just took some pills a random person in a bar gave you and washed them down with a double something, straight up.

Click for the rest of the article...

Symmetric bionic augmentation.

Apr 06, 2017

Something that's always bugged me about science fiction is the lack of common sense of characters' bionic enhancements.

No, I'm not going to call them cybernetics.  RPGs and movies have it wrong.  Those aren't cybernetics, they're bionics.  The former is a feature of the latter.

Characters pretty much always seem to have their augmentations installed bass-ackwards.  Most of the time their positioning doesn't make sense at all.  Let's look at some handedness statistics: Depending on where you are, between 2% and 12% of people are left-handed.  Depending on your upbringing (if you were born left handed in some places, whether or not you were socialized to favor your right hand anyway) your grip strength with your off hand may be off by almost 11%,with a requisite difference of manual dexterity.  This makes sense because your off-side is always a little behind but training and practice can make up for that.

So, postulating advancements in technology, why would you have your dominant side augmented and your non-dominant side not unless you absolutely had to?  Let's look at a character from a fairly recent movie who is a prime example of this.  Watching Logan, this particular character appears right handed throughout the story, uses his left hand only under duress, but for whatever reason had his right hand replaced with a presumably stronger and more durable prosthesis.  It would make sense, from is observable in the movie, for him to have had the limbs on his non-dominant side replaced with prostheses to make up for the lack of strength and dexterity.  I mean, it's a movie with superheroic mutants, powerful telepaths, and offhand "Hey, let's hack your genome" levels of technology, I'm pretty sure that the surgeons could have gotten his left hand up to scratch pretty easily.  If you're a candidate for augmentation, you could either have something you're already good with replaced, and spend maybe twice as much time getting both sides of your body roughly equal, or you could have your less-good side worked on, which you're going to need to rehab and train anyway.

Neologism: High Gibson

Mar 18, 2017

High Gibson - noun, genre - Science fiction in the cyberpunk genre that makes no bones about being inspired by William Gibson's classic works.  Stylistic influences, tropes, and character archetypes are easily recognized as being inspired by the Sprawl Trilogy and the Burning Chrome short stories.  Compare with high fantasy.