New Year, New Server

TL;DR: 4x8TB WD + 2x3TB Seagate on Arch w/ btrfs RAID10 is fun.

I’m obsessive about keeping data. I pretty much never delete anything, and I’ve started archiving data from other sources that could potentially disappear in the future like websites, YouTube videos, and even old Operating System installer images. Doing something like this takes quite a bit of disk space, and my old server with only 6 terabytes of usable redundant storage was just not cutting it. I had only a few gigabytes left available on that server, plus a few terabytes of non-redundant data on my main desktop PC with nowhere better to move the files, so I decided it was finally time to rebuild.

The first step was to find the best value I could on large hard drives. As a frequent lurker on r/datahoarder, I had seen people mention that the WD easystore 8 TB drives were frequently on sale for around 50% off at Best Buy, and often had proper WD Red drives inside. I set up an IFTTT recipe to notify me when the prices changed on the Best Buy website, and got 4 drives for only $150 a piece, which is quite a savings over pretty much any other 8 TB drive on the market. Unfortunately, I wasn’t thorough on checking the model numbers on the boxes, so I ended up with the generic non-Red drives once I opened up the enclosures, but since I’m paranoid and was planning on running RAID10 with checksums anyway, I didn’t really care that much.

Weirdly though, two of the four drives wouldn’t power on with a standard SATA power connector. After a bit of research, there seemed to be two solutions for the issue, with one a bit more elegant than the other, but both a bit weird. Some people found that you could add a resistor between certain leads on the cable to trick the drive into powering on, while some others found that using a Molex to SATA power adapter seemed to fix the problem as well. A hacky combination of adapters resulting in a SATA > Molex > SATA > 4-way SATA splitter, and the drives were up and running! Now for the fun part.

My last server, Vista, ran Ubuntu 14.04 with mdadm RAID10 on 4x 3 TB HDDs. This time around, I wanted to use the best OS ever, Arch Linux, and my favorite filesystem toy, btrfs. I put in a 120 GB ADATA SSD, and in no time at all, my Arch server was up with a basic RAID10 filesystem running on my new drives. Then I started up rsync, and called it a night.

Around 6 TB of data later, the new server just needed a bit of software setup to match the old server’s feature set, and it was good to go. I swapped the IPs of the machines on my DHCP server to keep existing static entries working, and after a few days of running the old one to make sure everything was there, I took it down. Since I had a few spare SATA ports on the new server still, I moved two of the 3 TB Seagate HDDs from the old server over to the new one and added them to the btrfs volume, put another one in my desktop PC, Rin, and the fourth drive into one of the enclosures from the 8 TB drives. Finally, plenty of disk space everywhere I need it.

A look at the current filesystem status shows just how wonderfully overkill this is for a home file server:

[alan@longhorn ~]$ btrfs filesystem usage /storage -H
    Device size:                           38.01TB
    Device allocated:                      12.46TB
    Device unallocated:                    25.54TB
    Device missing:                         8.00TB
    Used:                                  12.44TB
    Free (estimated):                      12.78TB      (min: 12.78TB)
    Data ratio:                               2.00
    Metadata ratio:                           2.00
    Global reserve:                       536.87MB      (used: 0.00B)

I still need to go through a few terabytes of data on my desktop PC, and eventually organize it all and move it over to Longhorn, but the result I’ve got now is something I’m incredibly satisfied with. The new setup leaves Longhorn with 38 terabytes of hard drives, giving a usable 19 terabytes after RAID1 redunancy and the overhead of btrfs’s metadata storage.

My First iPhone

I’ve always had an interest in Apple products. Despite that, I’ve never owned an iPhone. My first Apple device was an original iPod nano, quickly followed by the iPod 5G. These were neat devices, but nothing that incredible, considering how expensive they were compared with a similarly-usable MP3 player.

Then Apple announce the iPhone.

For its time, the iPhone was incredible. It had a good portion of the functionality of a desktop PC in a device so small it fit better in your hand than most current phones. Everything on the iPhone was years ahead of competitors, from the display quality, to the touch responsiveness. Even the camera was far ahead of the rest of the market when it came out.

I was only a young teenager when the iPhone came out, and since that was before the times when 5-year-olds had smartphones, I never got one. I didn’t experience iPhone OS in person until I used an iPod touch in 2008. During all of high school, I was obsessed with modding iOS on my iPod touch, becoming the local expert on iOS jailbreaking and recovery, and general Apple device repair and maintenance. I loved how open the OS became once you had root access, and reached a point where I’d refuse to use a non-jailbroken device. I’d gotten my 2nd generation iPod touch to run fairly closely to more modern devices, with multitasking, wallpapers, and even some of the iOS 6 exclusive apps on iOS 4.

When it came time to get my first smartphone though, I ended up buying a Samsung Galaxy S4. By that point, innovation in iOS had basically disappeared. After iOS 5, there really wasn’t much draw to new iOS releases, and I particularly disliked the visual style changes of both iOS 6 and 7. I’ve not really heavily used any Apple mobile devices since then. Jailbreaking has gotten nearly impossible on modern devices, and Android gives you a ton of customization out of the box, and even the ability to switch operating systems completely. Everything I do on my phone these days is basically impossible to do on a modern iPhone.

And then I bought one.

My first iPhone, purchased in November 2017, is, in my opinion, the best iPhone out there.

iPhone 2G

The original iPhone predates Apple’s obsession with blocking any and all attempts to modify their devices, leaving it totally open to install any compatible iPhone OS version, and jailbreak and tweak to your heart’s content. Mine is running iPhone OS 3.1.3, unlocked and running a slightly tweaked Cydia setup. I’m planning on setting up my own Cydia repository with only older packages that support the OS so I can use it without causing issues, because modern jailbreak tweaks don’t exactly play well with such an old OS.

I actually really like my iPhone. The size is very different from current phones, but it feels more natural to hold than my Pixel 2 XL, and even the smaller iPhones like the SE and 5S. The extra thickness looks a bit weird in comparison, but adds a lot of grip, and the battery life is impressive for a 10-year-old phone.

I’ll probably never own a “new” iPhone, unless I get one just for testing apps I develop, since I rely on things on my Android phones that just aren’t possible on iOS without jailbreaking and a lot of extra work, but it’s fun to play around with an older device that reminds me of my early iOS days, back before there was really anything else good out there.


I gave in and bought a drone a couple months ago. I’ve been fairly interested in them for a few years now, but couldn’t justify a few hundred dollars to get a semi-decent one.

So when the DJI Spark was announced, I immediately spent $700 preordering the Fly More package. The Spark is tiny. Really, really tiny. For a full 1080p camera, high airspeeds, good maximum altitudes, and decent battery life, it’s stupidly small. Excluding rotors, it’s smaller than my phone.

The camera is on a nice 2-axis stabilized gimble, and records full 1080p60, but the image quality leaves a bit to be desired. It looks more like upscaled 720p than proper 1080p. Compared with the competition in the base $500 price range though, it’s still fantastic considering the full feature set you’re getting.

For some reason, the recorded video files render weirdly in some software. They play fine in QuickTime before editing, but if I use them in iMovie or Final Cut projects, they have a weird stuttering issue that seems to be a problem with how their frame rate is detected. The issue is less prevalent in DaVinci Resolve, but only Adobe Premiere Pro seems to render the footage properly, which is disappointing because Final Cut’s render times are fantastic.

Despite loving the form factor, the image quality leaves me wanting to buy a Mavic Pro. I may end up owning both at some point, since there are still plenty of use cases for an ultra-portable quality drone. If you want to see what I’ve recorded and edited so far, I have a playlist on my YouTube channel dedicated to Spark videos.

An attempt was made

Over the last several months, I’ve been working with a good friend to start a business. We called that business StructHub.

StructHub was a platform designed to improve the consumer out-of-box experience for physical products, by providing a mobile-friendly digital instruction platform, interactive product manuals, one-click product registrations, and a management system for consumers to keep track of all their products. The consumers we met with during our initial development loved the concept, and often had extra features of their own they wanted to see implemented, and we took note of the more common ones as features to plan into a final release, but we never quite made it that far.

The issue with our platform was that it was the consumers that wanted it, but the manufacturers and retails would have to be the ones paying for it. Even after we’d worked out how to make it very competitively priced, to the point where it could even offer a cost savings over printed materials, manufacturers struggled to find the value in making the switch. Willingness to replace tried and trusted paper with a digital platform was something we found only in a handful of companies.

Most companies willing to use digital instructions and registration are building products that already have a dedicated mobile application, where introducing our platform would’ve only complicated the process for consumers and provided no value. While we could support embedding StructHub features in third-party applications, many of the advantages of having a unified platform for product information would be lost.

So while we had an incredible time working on our platform and meeting with potential customers, StructHub isn’t going to come to life just yet. We’re changing our focus onto new ventures. If for some reason you’re interested in learning more about StructHub, I have an archive of the landing page.

Windows 10 is Terrible

I frequently whine about not liking Windows 10, but often don’t explain why. Usually that’s because I’m ranting on Twitter and don’t feel like breaking my rant into several tweets.

I think I need to just write a solid list of reasons Windows 10 sucks. Here we go…

Many of my issues with Windows 10 are from longstanding issues with Windows overall.

Microsoft’s own Surface products have even more issues than my other PCs. I’ve heavily used both the Surface Pro 4 and Surface Book with Performance Base and experienced similar issues on both.

This is just the stuff I can think of off the top of my head. I’ll probably add more as I think of it. Windows 10 has come a long way from the absolute pile of garbage it was the first year or so after RTM, but it still has a long way to go.

Splatoon 2

Nintendo is running an open beta for Splatoon 2 today on the Nintendo Switch. It’s pretty fun!

Sadly they have this really weird setup where you can only play for an hour at random times they’ve selected throughout the weekend, so you can’t get super into it and you have to work the play times out through your schedule. Luckily I usually have no plans on the weekends, so yay Splatoon 2!

Splatoon 2 Beta Weapons

The beta is quite limited, but still very fun. After a quick tutorial, you’re giving the choice between four weapons, the Splattershot, Splat Roller, Splat Charger, and the new Splat Dualies (which I love!). Pick a weapon, and you’re taken straight to a game lobby with a randomly chosen map. The Reef and Musselforge Fitness are the current maps.

Splatoon 2 Beta Controls

The controls are a bit different from the original Splatoon. I played with a Switch Pro Controller, but I’d guess they’re the same on the normal Joycons since the layout is the same between them. The biggest thing I love about the Switch Pro Controller is that, unlike the Wii U version, it includes motion controls! Splatoon 2 uses motion controls by default, but it handles them a bit differently from Splatoon. The right analog stick doesn’t control looking up and down when motion controls are enabled now, so it’s only used for turning. I found it a bit weird at first, but I think I like it now that I’ve played like that bit.

Victory Screen with Splat Roller

I’m certainly not the best Splatoon player out there, and I think I lost the majority of my games, but overall Splatoon 2 is super fun. The new weapons and specials are very flexible (and I still suck with Chargers), the maps are detailed and well-laid out, and the sountrack is quite different from Splatoon, but still very familiar. Obviously there’s a lot of content missing at this stage, but I’d guess most of the game is actually finished, but just wasn’t included in this testing release. The game ran incredibly well on the Switch, with fast loading times, good framerates, and responsive controls.

Starting a Match

Another Victory Screen

Seriously though, those Splat Dualies are awesome.

Another Victory Screen

I tried to record some gameplay on my Spectacles, but the exposure was all kinds of wrong since I played in a dark room so you can’t even tell what’s going on in the videos, so I won’t bother to share those. I do have more Splatoon 2 Screenshots from my gameplay if you want ‘em for some reason. They’re only 720p even though I played on a TV, but I guess that’s just how the Switch stores screenshots, because for some reason Nintendo still doesn’t get that copyright works against them sometimes 😛.


I despise most social media. Facebook is nothing but sponsored ads and obscure reminders, Snapchat is just weird filters over poorly-lit selfies, and Twitter is full of (brief :P) political rants.

For some reason, everyone seems to love it all. Everyone has their preferred social network. I’m often posting random tech thoughts on Twitter or reposting Steven Universe fan art on Tumblr. I was interested in Facebook in the earlier days, back when you never saw a sponsored post, and I briefly tried Instagram when everyone was obsessed with taking pictures of their food, but I’ve really never understood the appeal of Snapchat. It’s incredibly popular, but every time I try to get into it I just get annoyed with the bad UI and complete lack of interesting content. So when Snap, Inc. announced their new name and their first product, you’d think I had no interest.

Snap, Inc.’s Spectacles are amazing. They’re some of the best-designed reasonably-affordable new tech I’ve seen in a long time. The build quality of every part is fantastic, from the custom magnetic USB cable to the charging case. Every little bit of the hardware is designed to serve a purpose without getting in the way of the user.

Using them feels very natural. I’m not sure I’ll ever reach a point where I’m regularly wearing them, but when they are on, starting a recording is a simple button press away. There’s a light on the inside of the frames that indicates when the recording is active and when it’s getting close to ending, allowing you to press again to add another 10 seconds.

My goal with this is to get myself to use Snapchat more. So far I still hate the UI and don’t get the point of the network, but I love using Spectacles! They’re very convenient and flexible since you can just record whatever you’re looking at with no setup and without having to hold anything.

I’ve realized since getting them that my life is fairly boring to watch. I think they’ll help me do interesting things more often so I have a good reason to actually have them. I’ll likely go hiking or something quite a bit more just to have an excuse to use them, kind of like when I first got my DSLR.

Overall, Spectacles are awesome. If you’ve got a bit of cash and either live in NYC, get really lucky and find a Snapbot, or want to spend a bit extra to get one on eBay, I highly recommend getting a pair.

The Pizza Blog

Between regularly ordering take out pizza, baking frozen pizzas several nights a week, and often going to sit-down pizza restaurants, I eat quite a lot of pizza.

For no real reason other than that I like websites, pizza, and photography, I’ve started a blog about pizza! I give brief reviews and usually include a photo of most of the pizzas I eat. Check it out at Yes I love that domain.


Technology is awesome. Sometimes we just design things in a stupid way that unnecessarily limits the use of an otherwise awesome product. Apple does that a lot lately.

iOS is amazing. It’s fast, it’s efficient, it has incredible user retention, it’s reasonably visually appealing (minus some obvious contrast issues), it’s secure… all good.

But what if you don’t want to use Safari? You can install Chrome, but it’s just a Safari WebView with Chrome’s sync. Same with Firefox. Up until recently, third-party apps couldn’t even use the full Safari engine, severely limiting JavaScript performance.

Maybe you want to download a file? That seems simple enough. Except you can’t. iOS doesn’t allow you to save anything other than images from websites without third-party applications that are limited in what files they support as well. Even if you do manage to download a file, good luck opening it.

My biggest issue with iOS is one most people will probably not have even noticed. Try unlocking your screen and seeing how long it takes before the device responds to any other user input. It’s about 2 seconds. You’re waiting for an animation that does nothing. Try pressing the Home button from an app. Notice that delay? That one’s more practical - it waits to see if you’re going to press it twice, to enter the multi-tasking view. Still, after using Android for a while, that second delay is annoyingly long. Android doesn’t need to wait when pressing the home button because button clicks are unambiguous. Rather than use one button for several actions, each does one specific thing.

Customizing iOS is basically impossible. Jailbreaking supposedly makes this easy, but that’s mostly a luck game. Apple patches jailbreak exploits like they’re the worst thing that could possibly happen to them, instead of just letting users choose to unlock their devices with a big warning like Android does. If you do get lucky enough to be running the right version of iOS when a jailbreak is released, you better not be interested in updating for the next year or so.

The new MacBook Pro is nice. It’s incredibly thin and lightweight. I’m mostly okay with removing USB type-A ports too. Type-C is the future and we may as well embrace it.

That Touch Bar though. It’s so pointless. 95% of it’s functionality is just a shortcut to functionality already available via a hotkey, only you can’t feel for it and it’s not in a consistent place between applications.

Weirdly, the Touch Bar feels cheaply implemented in person. On Apple’s renders, it looks beautifully designed and seems to sit flush with the keyboard. The actual LCD is visibly lower than the keys, and seems to be much lower quality than the main display, which makes it seem like an extra add-on rather than a well-integrated feature.

I also miss my SD card slot, and MagSafe, while proprietary, was really nice.

MySQL Backups

MySQL is pretty nice for a free, Open Source RDBMS. Before trying any kind of management, you should totally have a .my.cnf file in your ~. Put your username and password for localhost there, and then remove read permissions from everyone but yourself. This file specifies the default options to use with MySQL command line tools, making them much easier to work with, and avoiding having to repeatedly type in your password or accidentally letting it end up in a history file somewhere.


Flexible backups with mysqldump

The mysqldump tool is fairly straightforward, but you’re likely not using it to it’s full potential.

To make working with your export easier (making structure adjustments and such), it’s often useful to export the schema and data separately. A --no-data dump will include table schemas and view declarations, while a --no-create-info backup will only include table data.

mysqldump --no-data dbname | gzip > dbname-schema.sql.gz
mysqldump --no-create-info dbname | gzip > dbname.sql.gz

If you plan on changing your column ordering or adding columns from your schema file, your inserts in the data backup will no longer import correctly. To work around this, you can use the --complete-insert flag, which includes column names in the inserts, ensuring they restore properly as long as all the columns backed up are still present in the new table.

mysqldump --complete-insert --no-create-info dbname | gzip > dbname.sql.gz

Restoring views to a new server can fail if the view’s DEFINER is not a user on the new system. If you’re going to be importing the database on a different system with potentially different users, you can use grep to filter out the DEFINER rows, ensuring views import without errors.

mysqldump --no-data dbname | grep -v "50013 DEFINER" | gzip > dbname-schema.sql.gz

I pretty much always pipe mysqldump through gzip since there’s no good reason to keep an uncompressed export sitting around. Restoring gzipped backups is very simple to do in-place with the help of zcat.

zcat dbname-schema.sql.gz | mysql dbname
zcat dbname.sql.gz | mysql dbname

If you’ve got any stored procedures, triggers, or functions in your database, these will only be backed up if you use the --routines flag. I prefer to keep these in another file.

mysqldump --routines --no-data --no-create-info dbname | gzip > dbname-routines.sql.gz

If you’re using BLOB columns with unfiltered data, you may run into issues restoring backups of that data. To work around this, you can store those in hexadecimal which, while larger by default, shouldn’t take up too much more space once gzipped. Enable hex encoding with the --hex-blob flag.

mysqldump --hex-blob --no-create-info dbname | gzip > dbname.sql.gz

If your database consists entirely of InnoDB tables, you have the option of using a transactional backup, which ensures data integrity without requiring table-level locks! This can be enabled with the --single-transaction flag, but keep in mind any non-InnoDB tables will not be locked, and may be backed up inconsistently.

mysqldump --single-transaction --no-create-info dbname | gzip > dbname.sql.gz

Multi-threaded backups with mydumper

If all you’re looking for is a crazy-fast backup of a large database’s structure and data, you should be using the amazing mydumper tool, which uses a multi-threaded approach, backing up each table in a separate thread.

It’s fairly straightforward to use. Let’s do a gzip-compressed single-database backup.

mydumper -c -B dbname -d export_dir

Restoring a mydumper backup is quite simple

myloader -d export_dir

Mydumper also has powerful options like regex table name matching and row-count file splitting. Read the man page for details on everything mydumper and mysqldump can do.