movq

Wherein I Move a Lot of Words Around

However Bad It Is…

… it could always be Mac OS 9.

macos9 extensions off crash

"Vacation"

An introvert raising an extrovert child might make for an interesting sitcom. I've spent the last two days at home with the boy on vacation and I've gotten to the point where I've answered every question he's asked for the past two hours with "meh".

It's like he exhales in English.

SQLite, Python, and Transactions

I'm working an intermediary library in Python that turns a fair number of normal databases and database-like stores into simple key-value stores. There's a long story of why, but it does it have an actual use case outside of "because I can" (though, the symlink backend is pure, unadulterated "because I can").

For the SQLite store I was running into transaction issues here and there. At seemingly-random times data wouldn't save or I'd get an error saying a transaction hadn't been started when I tried to commit. So, I did some research.

John CS - Transactions with Python's sqlite3 Package:

By automatic transactions here I am not referring to SQLite's built-in behavior of wrapping data-changing operations in transactions. Rather, I am speaking of the Python module's special behavior where it actually executes BEGIN and COMMIT statements on your behalf.

A transaction is automatically started (ie: a BEGIN is executed) when all of the following conditions are met:

  1. The isolation_level is not None. [1]
  2. The Connection object thinks a transaction has not already been started.
  3. An UPDATE, DELETE, INSERT, or REPLACE statement is being executed. [2]

The BEGIN statement will be concatenated with whatever value is in isolation_level. For example, if isolation_level was equal to DEFERRED, the statement executed when the above conditions are met is BEGIN DEFERRED.

Introduction to SQLite in Python | Python Central:

Please remember to always call commit to save the changes. If you close the connection using close or the connection to the file is lost (maybe the program finishes unexpectedly), not committed changes will be lost.

11.13. sqlite3 — DB-API 2.0 interface for SQLite databases — Python 2.7.11 documentation:

If you want autocommit mode, then set isolation_level to None. Otherwise leave it at its default, which will result in a plain “BEGIN” statement, or set it to one of SQLite’s supported isolation levels: “DEFERRED”, “IMMEDIATE” or “EXCLUSIVE”.

The lesson learned here comes down to these points:

  1. Python's sqlite3 module conforms to the broken Python PEP for database access which mandates that there's always a transaction in play and your only control over it is to commit or roll back.
  2. DB modules are supposed to keep track of the current transaction state internally and not offer a begin() API.
  3. The value of connection.isolation_level can be set to None to turn off all this or to DEFERRED, IMMEDIATE, or EXCLUSIVE to turn it on. The text in isolation_level is sent with the BEGIN statement to SQLite, so all of those carry SQLite's meaning:
    1. DEFERRED - Get a shared lock on the first statement. Get an exclusive lock only when a DML statement is used. (Default)
    2. IMMEDIATE - Get a write lock immediately. Others can read, but writes will be blocked (timeout applies).
    3. EXCLUSIVE - Get an exclusive lock immediately. Others cannot even read.
  4. You can turn this behavior off, but then you have to fall back to 100% manual transaction management, and in many cases this can be done very wrong and cause random slowdowns or data loss (if you aren't well-versed in transactional databases).
  5. Due to how sqlite3 handles threaded and multi-process access, there's a timeout on getting the lock to start a DML statement, and the default is five seconds. This can lead to some interesting situations.

So, in short: abide by the PEP gods and presume a messed-up transaction environment that you can only control with commit() and rollback() or turn it all off and wing it.

In the end, I chose to manually commit at key points in order to both ensure the data was written but also for the side effect of starting a new transaction.

That, folks, is when you know you've made a broken API. Side effects should never be the goal of a line of code, but due to the API design they must be here.

Death Star Architect (as text)

I really hate this trend of posting everything as g'damned images for the sole purpose of making it easier to repost on crappy social networks where the users are too lazy to do anything but scroll.

What makes it even worse is when good content is locked in the stupid. A couple of years ago, Dorkly wrote a nice bit of humor about the Death Star architect but posted it as an image. That makes it damned-near impossible to read on anything other than a computer or tablet (which is not where most people are these days).

So, as a public service I ran it through Prizmo and present it below.


An Open Letter From a Death Star Architect

 Hey guys, It's me. The guy who put in the exhaust ports on the Death Star.

I know, I know -

"What a stupid design flaw!”

"You are singlehandedly responsible for the destruction of our ultimate weapon and battlestation!"

"How could ANYONE have made such a huge mistake?!"

Over the past week, I've gotten a lot of guff from people I considered to be friends and colleagues about how my "shoddy" design would be the downfall of our entire government Not only that, but I’ve been force-choked (and regular-choked) by more superiors than I can count (and Human Resources has been VERY reluctant to respond to my complaints about being invisibly strangled by a cyborg space wizard). But I have one response to all of you who blame me for the destruction of the Death Star:

Are you FUCKING serious???

I mean, do you understand the point of exhaust ports? Do you know HOW MUCH EXHAUST is created by this MOON-SIZED battle station? There were hundreds of floors on that thing. It housed a laser capable of instantly blowing up planets. It needs a LOT of ventilation the fact that I was able to keep those exhaust ports to the size of a womp rat should earn me some credit.

Now- let's talk a little about what happened at the Battle of Yavin IV. Some farmboy nobody flies down a trench, shoots some bombs out of his X-Wing straight ahead, the bombs take a 90 DEGREE TURN and then they go EXACTLY down the tiny exhaust port, go down miles and miles of insanely narrow pipe and hit the Death Star's core, blowing it up.  Notice anything weird there?

First off, 'exhaust' doesn't mean shit gets SUCKED DOWN. It means shit gets PUSHED UP. That's what it is it's expelling gas. Outward. As in, not in a direction that would suck down a bomb. If anything, it should have pushed the bombs UP.

So how'd the bomb take a right angle turn down it?.

Hmmmm oh I dunno OH THAT'S RIGHT WE LIVE IN A GALAXY WITH MAGIC SPACE WIZARDS.

"But Exhaust Port Designer!" you say. "All of the magic space wizards were killed!”

Damn, ya got me there OH WAIT THAT'S RIGHT! THE KID WHO TOOK THE SHOT JUST HAPPENED TO BE NAMED 'SKYWALKER.' Yep, same as our leather-daddy asthmatic boss. And he just so happened to be from the same planet as or Chokey. And it turns out- he wasn't even using his targeting computer when he made the winning shot! What a coincidence.

And - hey! Who was the guy pursuing the computer-less moisture-farmer? Oh, that's right - it was Darth Vader, his dad! And he managed to spectacularly fail at taking out this first-time pilot, who just so happened to be his son. And know what else is weird? Darth Vader was the only survivor of the Death Star explosion! And with the death of Grand Moff Tarkin, that made Vader the number 2 person in the Empire!

Sidenote: anyone else think it was weird that fucking DARTH VADER had to answer to middle management?.

Anyways, the point is this: maybe the exhaust port wasn't the problem. The shot was LITERALLY NOT POSSIBLE...

unless you had magic powers. Magic powers that allowed you to manipulate matter and move it at your whims, which - surprise, surprise - is pretty much the default use of The Force. Reminder:. our galaxy used to be run by a bunch of sexless monk warlocks. Their specialty was moving shit with their mind. And the kid who made the shot happened to be a direct descendant of the most powerful sexless monk warlock of all-time.

Maybe if we weren't up against a bunch of space wizards or if Darth Vader had tried a little harder to wipe out his kid, we'd still have the Death Star. That's the problem - not a tiny hole that did what it was designed to do.

Anyways, I was somehow "left off' plans to build a new Death Star. I noticed part of the plan allowed for a giant 'Millennium Falcon-sized' hole right in the middle that leads to the core, so maybe a tiny exhaust port won't look like that much of an oversight soon.

May the Fucks Not Be Given

-Dak Exhaustport


Again, the original is on Dorkly and this is just a different presentation format because the morons over there don't understand how computers work.

A Nice Story about Steam on Linux

Once upon a time I had a Linux box acting as a home server. It was nice.

Then I wanted a home internet gateway/router and put it at the network edge. That, too was nice.

Then it was slow. Given where it was, that made everything slow. So, I rebuilt it as something bigger than it needed to be and put a SATA RAID in it, a dual Intel server NIC card, and installed Plex server on it. Then it was very nice.

Since it was serving AFP for my Macs, I chose XFS for the RAID filesystem. That, too was very nice.

Then I realized that when I was messing around with it and had to reboot it because of changes to the file or media server bits, the home internet was down. This made the lady unhappy, which made me unhappy. This was not nice.

So I took all the old parts out of the junk box and rebuilt the original machine and made it the internet gateway. That left the beefy machine doing media and files and general stuff I threw at it. For a long time, that was perfect.

Then one day I realized that the very nice CPU was idle more often than not, and that was a shame. So I got an Nvidia GTX 750 Ti card and a nice display and made a Linux desktop out of it. A Linux desktop with an 8TB internal RAID and an SSD boot drive. A machine more than powerful enough to play some games, really. To do so, however, would mean booting out of Linux and into Windows (generally) which I did not have a full copy of and generally did not want to. Which is when I remembered all my games are in Steam and Steam runs on Linux — and now I have a nice video card. This could be nice.

Could be. But there's always one thing, and this time was no exception.

I installed Steam from the website and after many progress bars I pulled down Portal 2 to test with (because it's nice). It wouldn't start. Says it couldn't find filesystem_steam.so and other random Steam shared libraries that, confusingly, were exactly where it said it couldn't find them. I played with ldd and friends for a while and realized that Steam was simply insane because the World was in Order and Steam was confused.

So, I searched. Then I found. Staring at the screen, I sighed. Then I laughed. Then I made an annoyed grunt.

filesystem_steam.so doesn't exist on large non-ext4 file systems

XFS support: Source games need to use stat64/64-bit ints or be compiled for 64-bit.

Warning to XFS users on linux.

Steam games won't run from a separate hard disk. "I only have two XFS drives and this Ext4 SSD. The games work if I install them on the SSD."

Steam on Linux: Many games won't start? Read this!

It turns out that many games on Steam are still 32-bit games. I have a 64-bit CPU, OS, and — as luck would have it — a large enough filesystem that it's using 64 bits for inode values (file IDs). Well, that's generally not a problem when the disk is young and not full of files, but on a server RAID that's had quite the long-standing history mine has, those file IDs are out of the 32-bit range. When code that's using 32-bit inode values gets that large number it's not valid, so it can't open the file.

The solution was fairly simple. I went to Steam's preferences and created a library on the ext4-formatted SSD boot drive (it had plenty of space for my small games) and installed the games there.

They run like a charm now. It's nice.

What Insanity Looks Like

Op-ed: How I gave up alternating current | Ars Technica:

I have not set foot in a grocery store in years. Nevermore will I bumble through endless confusing aisles like a pack-donkey searching for feed while the smell of rotting flesh fills my nostrils and fluorescent lights sear my eyeballs and sappy love songs torture my ears. Grocery shopping is a multisensory living nightmare. There are services that will make someone else do it for me but I cannot in good conscience force a fellow soul through this gauntlet.

(Via arstechnica.com)

Everything about this piece reads like someone with significant mental health issues who is being taken seriously.

Swift

Swift is kind of like when you’re a kid and you fill the bag of jelly beans with all your favorite flavors and then reach in and have a handful all at once. Each was a good idea, but together it lacks anything that made any single piece good.

WWDC and IPv6

This WWDC marks the first time I've ever seen more IPv6 devices on the LAN than IPv4. That's kind of cool. I'm sure a lot of it is due to NDP, but that's fine. Also, I appear to have a global address assigned as well (and I've subsequently disconnected from that interface, so 😛). Very nice to see the adoption is rolling out well.

Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            198.183.28.1       UGSc           15        0     en6
default            10.102.0.1         UGScI           1        0     en0
10.102/16          link#4             UCS             0        0     en0
10.102.0.1/32      link#4             UCS             3        0     en0
10.102.0.1         link#4             UHLWIi          1       12     en0
10.102.158.5/32    link#4             UCS             0        0     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              5    24864     lo0
169.254            link#13            UCS             0        0     en6
169.254            link#4             UCSI            0        0     en0
198.183.28/22      link#13            UCS             6        0     en6
198.183.28.1/32    link#13            UCS             2        0     en6
198.183.28.1       0:0:c:9f:f0:1      UHLWIir        11        0     en6   1155
198.183.28.68/32   link#13            UCS             1        0     en6
198.183.28.68      68:5b:35:c5:1a:cd  UHLWI           0        2     lo0
198.183.28.111     0:1:a:a:d4:d1      UHLWI           0        0     en6   1185
198.183.28.119     68:5b:35:c8:33:e2  UHLWI           0        0     en6   1189
198.183.28.122     68:5b:35:cf:fe:5c  UHLWI           0        0     en6   1197
198.183.30.96      ac:87:a3:37:f0:7c  UHLWI           0        0     en6   1192
198.183.30.98      68:5b:35:bf:b0:f9  UHLWI           0        0     en6   1184
198.183.30.244     a0:ce:c8:2:c9:f4   UHLWI           0        0     en6   1198

Internet6:
Destination                             Gateway                         Flags         Netif Expire
default                                 fe80::1ae7:28ff:feae:321f%en6   UGc             en6
::1                                     ::1                             UHL             lo0
2620:0:????:111::/64                    link#13                         UC              en6
2620::????:111:6a5b:35ff:fec5:????      68:5b:35:c5:1a:cd               UHL             lo0
2620::????:111:bde4:9cb6:3e40:????      68:5b:35:c5:1a:cd               UHL             lo0
fd53:????:f8d5:141b::/64                fe80::f9c4:522:ff91:9dc9%utun0  Uc            utun0
fd53:????:f8d5:141b:f9c4:522:ff91:????  link#10                         UHL             lo0
fe80::%lo0/64                           fe80::1%lo0                     UcI             lo0
fe80::1%lo0                             link#1                          UHLI            lo0
fe80::%en0/64                           link#4                          UCI             en0
fe80::1610:9fff:fee4:9b23%en0           14:10:9f:e4:9b:23               UHLI            lo0
fe80::%awdl0/64                         link#8                          UCI           awdl0
fe80::ac9b:3fff:fe09:673%awdl0          ae:9b:3f:9:6:73                 UHLI            lo0
fe80::%utun0/64                         fe80::f9c4:522:ff91:9dc9%utun0  UcI           utun0
fe80::f9c4:522:ff91:9dc9%utun0          link#10                         UHLI            lo0
fe80::%en6/64                           link#13                         UCI             en6
fe80::20e:c6ff:fefe:4bc6%en6            0:e:c6:fe:4b:c6                 UHLWI           en6
fe80::223:32ff:fecb:6980%en6            0:23:32:cb:69:80                UHLWI           en6
fe80::2e0:4cff:fe68:178%en6             0:e0:4c:68:1:78                 UHLWI           en6
fe80::e4d:e9ff:fea0:b3b7%en6            c:4d:e9:a0:b3:b7                UHLWI           en6
fe80::e4d:e9ff:feb0:4957%en6            c:4d:e9:b0:49:57                UHLWI           en6
fe80::e4d:e9ff:feb0:eeb5%en6            c:4d:e9:b0:ee:b5                UHLWI           en6
fe80::e4d:e9ff:fece:ac28%en6            c:4d:e9:ce:ac:28                UHLWI           en6
fe80::129a:ddff:fe6f:98d%en6            10:9a:dd:6f:9:8d                UHLWI           en6
fe80::12dd:b1ff:fed4:21c9%en6           10:dd:b1:d4:21:c9               UHLWI           en6
fe80::12dd:b1ff:fede:84e4%en6           10:dd:b1:de:84:e4               UHLWI           en6
fe80::12dd:b1ff:fede:881e%en6           10:dd:b1:de:88:1e               UHLWI           en6
fe80::12dd:b1ff:fede:bf4e%en6           10:dd:b1:de:bf:4e               UHLWI           en6
fe80::12dd:b1ff:fee7:bdce%en6           10:dd:b1:e7:bd:ce               UHLWI           en6
fe80::1610:9fff:fee4:9b23%en6           link#13                         UHLWI           en6
fe80::1ae7:28ff:feae:321f%en6           18:e7:28:ae:32:1f               UHLWIir         en6
fe80::2a37:37ff:fe02:3ae5%en6           28:37:37:2:3a:e5                UHLWI           en6
fe80::2a37:37ff:fe03:acc4%en6           28:37:37:3:ac:c4                UHLWI           en6
fe80::3e07:54ff:fe11:1273%en6           3c:7:54:11:12:73                UHLWI           en6
fe80::3e07:54ff:fe33:a785%en6           3c:7:54:33:a7:85                UHLWI           en6
fe80::3e07:54ff:fe39:5ef%en6            3c:7:54:39:5:ef                 UHLWI           en6
fe80::426c:8fff:fe35:939c%en6           40:6c:8f:35:93:9c               UHLWI           en6
fe80::426c:8fff:fe35:a53d%en6           40:6c:8f:35:a5:3d               UHLWI           en6
fe80::426c:8fff:fe35:aee4%en6           40:6c:8f:35:ae:e4               UHLWI           en6
fe80::426c:8fff:fe35:b5ac%en6           40:6c:8f:35:b5:ac               UHLWI           en6
fe80::426c:8fff:fe35:be92%en6           40:6c:8f:35:be:92               UHLWI           en6
fe80::426c:8fff:fe35:e3bf%en6           40:6c:8f:35:e3:bf               UHLWI           en6
fe80::426c:8fff:fe37:ae78%en6           40:6c:8f:37:ae:78               UHLWI           en6
fe80::426c:8fff:fe37:c6bf%en6           40:6c:8f:37:c6:bf               UHLWI           en6
fe80::426c:8fff:fe3b:9f0%en6            40:6c:8f:3b:9:f0                UHLWI           en6
fe80::426c:8fff:fe4d:ee77%en6           40:6c:8f:4d:ee:77               UHLWI           en6
fe80::6a5b:35ff:fe95:b12%en6            68:5b:35:95:b:12                UHLWI           en6
fe80::6a5b:35ff:fe9a:78a6%en6           68:5b:35:9a:78:a6               UHLWI           en6
fe80::6a5b:35ff:feb8:898e%en6           68:5b:35:b8:89:8e               UHLWI           en6
fe80::6a5b:35ff:febe:5914%en6           68:5b:35:be:59:14               UHLWI           en6
fe80::6a5b:35ff:febf:b0f9%en6           68:5b:35:bf:b0:f9               UHLWI           en6
fe80::6a5b:35ff:febf:cb6d%en6           68:5b:35:bf:cb:6d               UHLWI           en6
fe80::6a5b:35ff:fec0:71ba%en6           68:5b:35:c0:71:ba               UHLWI           en6
fe80::6a5b:35ff:fec1:2841%en6           68:5b:35:c1:28:41               UHLWI           en6
fe80::6a5b:35ff:fec1:6b5e%en6           68:5b:35:c1:6b:5e               UHLWI           en6
fe80::6a5b:35ff:fec1:e970%en6           68:5b:35:c1:e9:70               UHLWI           en6
fe80::6a5b:35ff:fec3:72f%en6            68:5b:35:c3:7:2f                UHLWI           en6
fe80::6a5b:35ff:fec3:8f7%en6            68:5b:35:c3:8:f7                UHLWI           en6
fe80::6a5b:35ff:fec3:3344%en6           68:5b:35:c3:33:44               UHLWI           en6
fe80::6a5b:35ff:fec3:697a%en6           68:5b:35:c3:69:7a               UHLWI           en6
fe80::6a5b:35ff:fec3:8c35%en6           68:5b:35:c3:8c:35               UHLWI           en6
fe80::6a5b:35ff:fec3:cf8f%en6           68:5b:35:c3:cf:8f               UHLWI           en6
fe80::6a5b:35ff:fec4:4cbb%en6           68:5b:35:c4:4c:bb               UHLWI           en6
fe80::6a5b:35ff:fec4:5e76%en6           68:5b:35:c4:5e:76               UHLWI           en6
fe80::6a5b:35ff:fec4:c1be%en6           68:5b:35:c4:c1:be               UHLWI           en6
fe80::6a5b:35ff:fec4:c861%en6           68:5b:35:c4:c8:61               UHLWI           en6
fe80::6a5b:35ff:fec4:d642%en6           68:5b:35:c4:d6:42               UHLWI           en6
fe80::6a5b:35ff:fec4:d744%en6           68:5b:35:c4:d7:44               UHLWI           en6
fe80::6a5b:35ff:fec4:e541%en6           68:5b:35:c4:e5:41               UHLWI           en6
fe80::6a5b:35ff:fec4:eb94%en6           68:5b:35:c4:eb:94               UHLWI           en6
fe80::6a5b:35ff:fec4:f3ad%en6           68:5b:35:c4:f3:ad               UHLWI           en6
fe80::6a5b:35ff:fec5:10f5%en6           68:5b:35:c5:10:f5               UHLWI           en6
fe80::6a5b:35ff:fec5:1311%en6           68:5b:35:c5:13:11               UHLWI           en6
fe80::6a5b:35ff:fec5:1acd%en6           68:5b:35:c5:1a:cd               UHLI            lo0
fe80::6a5b:35ff:fec5:571b%en6           68:5b:35:c5:57:1b               UHLWI           en6
fe80::6a5b:35ff:fec5:652e%en6           68:5b:35:c5:65:2e               UHLWI           en6
fe80::6a5b:35ff:fec5:735a%en6           68:5b:35:c5:73:5a               UHLWI           en6
fe80::6a5b:35ff:fec5:c33b%en6           68:5b:35:c5:c3:3b               UHLWI           en6
fe80::6a5b:35ff:fec5:caf2%en6           68:5b:35:c5:ca:f2               UHLWI           en6
fe80::6a5b:35ff:fec5:d32a%en6           68:5b:35:c5:d3:2a               UHLWI           en6
fe80::6a5b:35ff:fec5:dc91%en6           68:5b:35:c5:dc:91               UHLWI           en6
fe80::6a5b:35ff:fec5:f31b%en6           68:5b:35:c5:f3:1b               UHLWI           en6
fe80::6a5b:35ff:fec6:a70%en6            68:5b:35:c6:a:70                UHLWI           en6
fe80::6a5b:35ff:fec6:1d59%en6           68:5b:35:c6:1d:59               UHLWI           en6
fe80::6a5b:35ff:fec6:254a%en6           68:5b:35:c6:25:4a               UHLWI           en6
fe80::6a5b:35ff:fec6:64a5%en6           68:5b:35:c6:64:a5               UHLWI           en6
fe80::6a5b:35ff:fec6:fa8f%en6           68:5b:35:c6:fa:8f               UHLWI           en6
fe80::6a5b:35ff:fec7:3b05%en6           68:5b:35:c7:3b:5                UHLWI           en6
fe80::6a5b:35ff:fec7:54ad%en6           68:5b:35:c7:54:ad               UHLWI           en6
fe80::6a5b:35ff:fec7:8e45%en6           68:5b:35:c7:8e:45               UHLWI           en6
fe80::6a5b:35ff:fec7:ce02%en6           68:5b:35:c7:ce:2                UHLWI           en6
fe80::6a5b:35ff:fec7:d1e5%en6           68:5b:35:c7:d1:e5               UHLWI           en6
fe80::6a5b:35ff:fec7:d30a%en6           68:5b:35:c7:d3:a                UHLWI           en6
fe80::6a5b:35ff:fec7:ef87%en6           68:5b:35:c7:ef:87               UHLWI           en6
fe80::6a5b:35ff:fec7:f3cd%en6           68:5b:35:c7:f3:cd               UHLWI           en6
fe80::6a5b:35ff:fec7:f428%en6           68:5b:35:c7:f4:28               UHLWI           en6
fe80::6a5b:35ff:fec8:3104%en6           68:5b:35:c8:31:4                UHLWI           en6
fe80::6a5b:35ff:fec8:33e2%en6           68:5b:35:c8:33:e2               UHLWI           en6
fe80::6a5b:35ff:fec8:3422%en6           68:5b:35:c8:34:22               UHLWI           en6
fe80::6a5b:35ff:fec8:4781%en6           68:5b:35:c8:47:81               UHLWI           en6
fe80::6a5b:35ff:fec8:4971%en6           68:5b:35:c8:49:71               UHLWI           en6
fe80::6a5b:35ff:fec8:4c68%en6           68:5b:35:c8:4c:68               UHLWI           en6
fe80::6a5b:35ff:fec8:4e1e%en6           68:5b:35:c8:4e:1e               UHLWI           en6
fe80::6a5b:35ff:fec8:4e2b%en6           68:5b:35:c8:4e:2b               UHLWI           en6
fe80::6a5b:35ff:fec8:4e71%en6           68:5b:35:c8:4e:71               UHLWI           en6
fe80::6a5b:35ff:fec9:f87c%en6           68:5b:35:c9:f8:7c               UHLWI           en6
fe80::6a5b:35ff:feca:4c96%en6           68:5b:35:ca:4c:96               UHLWI           en6
fe80::6a5b:35ff:feca:4d71%en6           68:5b:35:ca:4d:71               UHLWI           en6
fe80::6a5b:35ff:fecc:cc2c%en6           68:5b:35:cc:cc:2c               UHLWI           en6
fe80::6a5b:35ff:fecf:24cc%en6           68:5b:35:cf:24:cc               UHLWI           en6
fe80::6a5b:35ff:fecf:f89c%en6           68:5b:35:cf:f8:9c               UHLWI           en6
fe80::6a5b:35ff:fecf:fc4d%en6           68:5b:35:cf:fc:4d               UHLWI           en6
fe80::6a5b:35ff:fecf:fcb5%en6           68:5b:35:cf:fc:b5               UHLWI           en6
fe80::6a5b:35ff:fecf:fe5c%en6           68:5b:35:cf:fe:5c               UHLWIi          en6
fe80::6a5b:35ff:fed0:2196%en6           68:5b:35:d0:21:96               UHLWI           en6
fe80::6a5b:35ff:fed0:21c6%en6           68:5b:35:d0:21:c6               UHLWI           en6
fe80::6a5b:35ff:fed0:249f%en6           68:5b:35:d0:24:9f               UHLWI           en6
fe80::6a5b:35ff:fed0:32f9%en6           68:5b:35:d0:32:f9               UHLWI           en6
fe80::6a5b:35ff:fed0:3570%en6           68:5b:35:d0:35:70               UHLWI           en6
fe80::6a5b:35ff:fed0:366b%en6           68:5b:35:d0:36:6b               UHLWI           en6
fe80::6a5b:35ff:fed0:3928%en6           68:5b:35:d0:39:28               UHLWI           en6
fe80::6a5b:35ff:fed0:3d21%en6           68:5b:35:d0:3d:21               UHLWI           en6
fe80::6a5b:35ff:fed0:4149%en6           68:5b:35:d0:41:49               UHLWI           en6
fe80::6a5b:35ff:fed0:45eb%en6           68:5b:35:d0:45:eb               UHLWI           en6
fe80::6a5b:35ff:fed0:4c8c%en6           68:5b:35:d0:4c:8c               UHLWI           en6
fe80::6a5b:35ff:fed0:a382%en6           68:5b:35:d0:a3:82               UHLWI           en6
fe80::6a5b:35ff:fed0:f683%en6           68:5b:35:d0:f6:83               UHLWI           en6
fe80::6a5b:35ff:fed0:f980%en6           68:5b:35:d0:f9:80               UHLWI           en6
fe80::6a5b:35ff:fed1:5b60%en6           68:5b:35:d1:5b:60               UHLWI           en6
fe80::6a5b:35ff:fed2:8eb1%en6           68:5b:35:d2:8e:b1               UHLWI           en6
fe80::6a5b:35ff:fed2:9ebc%en6           68:5b:35:d2:9e:bc               UHLWI           en6
fe80::6a5b:35ff:fed2:b3b4%en6           68:5b:35:d2:b3:b4               UHLWI           en6
fe80::6a5b:35ff:fed2:b3ed%en6           68:5b:35:d2:b3:ed               UHLWI           en6
fe80::6a5b:35ff:fed4:e7a9%en6           68:5b:35:d4:e7:a9               UHLWI           en6
fe80::6a5b:35ff:fed4:f350%en6           68:5b:35:d4:f3:50               UHLWI           en6
fe80::6a5b:35ff:fed4:f3cd%en6           68:5b:35:d4:f3:cd               UHLWI           en6
fe80::6c40:8ff:fec9:ab64%en6            6e:40:8:c9:ab:64                UHLWI           en6
fe80::7626:acff:fe16:23b7%en6           74:26:ac:16:23:b7               UHLWI           en6
fe80::7a31:c1ff:fef2:a3b9%en6           78:31:c1:f2:a3:b9               UHLWI           en6
fe80::7ec3:a1ff:fe87:27a%en6            7c:c3:a1:87:2:7a                UHLWI           en6
fe80::7ec3:a1ff:fe87:1683%en6           7c:c3:a1:87:16:83               UHLWI           en6
fe80::7ec3:a1ff:fe87:4e0c%en6           7c:c3:a1:87:4e:c                UHLWI           en6
fe80::8249:71ff:fe12:156e%en6           80:49:71:12:15:6e               UHLWI           en6
fe80::9a5a:ebff:fec6:dcfb%en6           98:5a:eb:c6:dc:fb               UHLWI           en6
fe80::9eeb:e8ff:fe1e:f138%en6           9c:eb:e8:1e:f1:38               UHLWI           en6
fe80::aa20:66ff:fe1c:ca1f%en6           a8:20:66:1c:ca:1f               UHLWI           en6
fe80::aa20:66ff:fe29:e46c%en6           a8:20:66:29:e4:6c               UHLWI           en6
fe80::aa20:66ff:fe2a:fa82%en6           a8:20:66:2a:fa:82               UHLWI           en6
fe80::aa20:66ff:fe2b:24a3%en6           a8:20:66:2b:24:a3               UHLWI           en6
fe80::aa20:66ff:fe39:d631%en6           a8:20:66:39:d6:31               UHLWI           en6
fe80::aa20:66ff:fe3c:7098%en6           a8:20:66:3c:70:98               UHLWI           en6
fe80::aa20:66ff:fe42:64ef%en6           a8:20:66:42:64:ef               UHLWI           en6
fe80::aa20:66ff:fe44:c045%en6           a8:20:66:44:c0:45               UHLWI           en6
fe80::aa20:66ff:fe44:cf0e%en6           a8:20:66:44:cf:e                UHLWI           en6
fe80::ae87:a3ff:fe08:c081%en6           ac:87:a3:8:c0:81                UHLWI           en6
fe80::ae87:a3ff:fe17:e7d9%en6           ac:87:a3:17:e7:d9               UHLWI           en6
fe80::ae87:a3ff:fe22:1d09%en6           ac:87:a3:22:1d:9                UHLWI           en6
fe80::ae87:a3ff:fe23:ec3f%en6           ac:87:a3:23:ec:3f               UHLWI           en6
fe80::ae87:a3ff:fe30:f7fa%en6           ac:87:a3:30:f7:fa               UHLWI           en6
fe80::ae87:a3ff:fe31:2ce3%en6           ac:87:a3:31:2c:e3               UHLWI           en6
fe80::ae87:a3ff:fe31:70d1%en6           ac:87:a3:31:70:d1               UHLWI           en6
fe80::ae87:a3ff:fe31:7d06%en6           ac:87:a3:31:7d:6                UHLWI           en6
fe80::ae87:a3ff:fe32:3f33%en6           ac:87:a3:32:3f:33               UHLWI           en6
fe80::ae87:a3ff:fe35:7b61%en6           ac:87:a3:35:7b:61               UHLWI           en6
fe80::ae87:a3ff:fe35:c434%en6           ac:87:a3:35:c4:34               UHLWI           en6
fe80::ae87:a3ff:fe37:9134%en6           ac:87:a3:37:91:34               UHLWI           en6
fe80::ae87:a3ff:fe37:9682%en6           ac:87:a3:37:96:82               UHLWI           en6
fe80::ae87:a3ff:fe37:cf5e%en6           ac:87:a3:37:cf:5e               UHLWI           en6
fe80::ae87:a3ff:fe37:d106%en6           ac:87:a3:37:d1:6                UHLWI           en6
fe80::ae87:a3ff:fe37:f07c%en6           ac:87:a3:37:f0:7c               UHLWI           en6
fe80::ae87:a3ff:fe37:fa99%en6           ac:87:a3:37:fa:99               UHLWI           en6
fe80::ae87:a3ff:fe38:ff5%en6            ac:87:a3:38:f:f5                UHLWI           en6
fe80::ae87:a3ff:fe38:15e6%en6           ac:87:a3:38:15:e6               UHLWI           en6
fe80::ae87:a3ff:fe38:1e53%en6           ac:87:a3:38:1e:53               UHLWI           en6
fe80::ae87:a3ff:fe38:2926%en6           ac:87:a3:38:29:26               UHLWI           en6
fe80::ae87:a3ff:fe38:308e%en6           ac:87:a3:38:30:8e               UHLWI           en6
fe80::ae87:a3ff:fe38:30c4%en6           ac:87:a3:38:30:c4               UHLWI           en6
fe80::ae87:a3ff:fe38:7094%en6           ac:87:a3:38:70:94               UHLWI           en6
fe80::ae87:a3ff:fe38:710a%en6           ac:87:a3:38:71:a                UHLWI           en6
fe80::ae87:a3ff:fe38:7d68%en6           ac:87:a3:38:7d:68               UHLWI           en6
fe80::ae87:a3ff:fe38:8141%en6           ac:87:a3:38:81:41               UHLWI           en6
fe80::ae87:a3ff:fe38:85bb%en6           ac:87:a3:38:85:bb               UHLWI           en6
fe80::ae87:a3ff:fe3a:439b%en6           ac:87:a3:3a:43:9b               UHLWI           en6
fe80::ae87:a3ff:fe3a:90bb%en6           ac:87:a3:3a:90:bb               UHLWI           en6
fe80::ae87:a3ff:fe3a:db3f%en6           ac:87:a3:3a:db:3f               UHLWI           en6
fe80::ae87:a3ff:fe3b:1935%en6           ac:87:a3:3b:19:35               UHLWI           en6
fe80::ae87:a3ff:fe3b:22bf%en6           ac:87:a3:3b:22:bf               UHLWI           en6
fe80::ae87:a3ff:fe3c:cd39%en6           ac:87:a3:3c:cd:39               UHLWI           en6
fe80::b8e8:56ff:fef3:d800%en6           ba:e8:56:f3:d8:0                UHLWI           en6
fe80::ba8d:12ff:fe53:a3e6%en6           b8:8d:12:53:a3:e6               UHLWI           en6
fe80::c62c:3ff:fe32:eb07%en6            c4:2c:3:32:eb:7                 UHLWI           en6
fe80::d2a6:37ff:fee4:1925%en6           d0:a6:37:e4:19:25               UHLWI           en6
fe80::de9b:9cff:feee:605c%en6           dc:9b:9c:ee:60:5c               UHLWI           en6
ff01::%lo0/32                           ::1                             UmCI            lo0
ff01::%en0/32                           link#4                          UmCI            en0
ff01::%awdl0/32                         link#8                          UmCI          awdl0
ff01::%utun0/32                         fe80::f9c4:522:ff91:9dc9%utun0  UmCI          utun0
ff01::%en6/32                           link#13                         UmCI            en6
ff02::%lo0/32                           ::1                             UmCI            lo0
ff02::%en0/32                           link#4                          UmCI            en0
ff02::%awdl0/32                         link#8                          UmCI          awdl0
ff02::%utun0/32                         fe80::f9c4:522:ff91:9dc9%utun0  UmCI          utun0
ff02::%en6/32                           link#13                         UmCI            en6

Could You Be More Obvious?

windows 8.1 listing on amazon Really? Your account name is "disc burner" and you're selling cheap copies of Windows Pro? Unbranded discs with a key tossed in? Of course, if Microsoft would stop charging a premium for the OS and bring it down to dozens of dollars instead of hundreds, this wouldn't be as much a thing.

This is Not Security

I recently received a notice from my kid's after-school care provider that they had setup an online service to check on the bill and update personal information, etc. Well, that's nice — I thought — so I hopped right on setup the account.

At first, some good signs. All the accounts were pre-setup with the registered email and a password was pre-set that was based on some information most people wouldn't have. Not perfect, but better than most.

However, when I tried to login I was mis-generating the password (four digit year instead of two) so I gave up and hit the "Forgot Password" link to setup the account that way.

This, folks, is where I started to get a little concerned.

email showing plain text password

Yes, that's not only the real password sent over email, but a clever person will pause and say, "Wait, the password is recoverable?"

It would appear so. Passwords are stored in a recoverable way and regularly emailed in plain text to people rather than having a reset system.

That terrifying moment behind me (and knowing that I simply had to use a unique password on this site), I used 1Password's generator to make a good password. Well, there's problem two.

Your new password is too long, it must be 10 characters or less.

The passwords, which are recoverable, are limited to 10 characters or less. Oh, and there are also no length or complexity requirements. My password could be "x" and be valid.

On the one hand, that does increase the number of possible permutations (something I advocate for) but it also lets idiots be idiots (something I don't advocate for). In any case, the site where my kid's registration information resides is eminently hackable.

I know what you're thinking. Surely, if there's any sense in the world, they at least got the most basic, trivial thing right when it comes to safeguarding personal information on the web? You'd be wrong.

URL bar with no SSL indicator

That's right. No SSL. At all.

The only word for this is irresponsible. When they get hacked and my information is out in the world there will be no amount of spin that will give me a moment's pause in putting all the blame completely on their system design, of which every component is in blatant violation of their declared security practices.