Ryan Finnie

I bought a launch day Apple TV 4K... and returned it the same day

I have a big fancy Vizio 65” 4K HDR TV in the living room. My guiding principle on TVs is I won’t buy a TV that I can’t move myself. Problem is, they keep making them larger, but thinner and lighter. So over the decades that limit keeps getting pushed up: 27” CRT, then 37” LCD, then 42”, then 55”, then 65”. But at this point the bezel is basically nonexistent and my arms are only so long, so I think I’ve hit the permanent limit. Besides, I can quit whenever I want.

I have a few entertainment devices hooked up to it, all controlled by a Harmony remote setup:

  • Apple TV 3rd generation (2012)
    • YouTube content, mostly pop science/engineering videos, and watching grown men and women play video games
    • Streaming my ripped DVD collection from a 6 year old Mac Mini in the office
  • Xbox One S
    • Gaming, mostly Hitman these days
    • Twitch (again, watching grown men and women people play video games for my amusement)
    • 4K Blu-Ray player
  • Xbox 360
    • Previous generation games, when I feel the desire
  • Wii U
    • Super Mario Maker, plus the previous Wii games I have

When Apple announced the Apple TV 4K a few weeks ago, I decided to order it. I never got the 4th generation because it didn’t really offer anything I needed beyond my current use case. However, the few UHD Blu-Ray titles I’ve bought have come with iTunes codes, so I’ve got them downloaded to my Mac Mini to be served to the Apple TV (albeit at 1080p), and Apple announced they will be upgrading purchased 1080p titles to 4K, so I figured I’d give it a shot and pre-ordered it.

I watch a lot of YouTube content, usually in short bursts of 10-20 minute videos between doing other things, so the YouTube experience is important to me, more than movies or gaming. Here’s a summary of the experience of the YouTube app on the older 3rd generation:

  • Home shows a changing array of videos YouTube thinks you may like, and is generally good at this
  • Subscriptions shows latest video activity from channels you subscribe too, as well as a list of channels
  • My YouTube shows your view history, your videos, your playlists, etc

When watching a video, you have several actions available:

  • Left/Right to rewind/fast forward.
  • Select to pause/unpause. While paused, it shows you a menu of the Up Next video and a few Related videos, the ability to thumbs up/down the video, and to go to the video’s channel.
  • Up/Down to show video position, along with basic information about the video (title, channel, views, release date). Down is quite useful: when you press it, the seek bar is divided up into about 15 hash marks, and you can go left/right to quickly seek to a general point in the video.
  • Back to exit out of the video.

Now, here is how I discovered it works on newer models, including the Apple TV 4K:

  • Home, Subscriptions and My YouTube generally look and work the same as before.
  • Left/Right will still rewind/fast forward, but I rarely use those as it takes too long and can be inaccurate. Mind you, I’m talking about using a Harmony remote here, not the touchpad remote which comes with it, which seems to be a slightly better seeking experience.
  • When you press Select to pause, the video menu is completely missing. No way to browse related videos, or go to the video’s channel. While paused, you can use left/right to go back/forward a fixed 10 seconds, no matter the length of the video.
  • When you press down, the hash mark navigation no longer exists. Instead it now shows you the title and screenshot (no release date or view count), and “Visit this video on your computer or laptop and click the flag icon to submit a claim” followed by the video’s URL. What?

The lack of hash mark navigation is annoying but I could have lived with that change. But the lack of the Related menu is a deal breaker for my use case. First of all, it’s useful to find, well, related videos. If you let a video run to the end, it will go on to the next related video, but that’s not always what I want to watch.

But more importantly, most YouTube videos have about 30 seconds of junk at the end which I don’t want to watch. On the 3rd generation, once the content portion of the video was done, I could press Select to pause, then immediately go to the next video or pick a related video, or go Back. With the 4K, my only options are to go Back, or wait until the end for whichever video YouTube has chosen for me.

So for my primary use case, the YouTube app is basically broken, removing half the features I use. Funny enough, the primary reason I bought it (4K iTunes purchase upgrades) is also broken, or at least not what I expected. Turns out you can’t download the 4K movies, only stream them from the Internet, which can be hit or miss. And I’ve already got the 4K Blu-Rays, so I may as well watch them with a consistent experience via the Xbox One.

And so ends the journey of a launch day Apple TV 4K. It spent a week traveling from Hong Kong to my front door, then a few hours later from my front door to the Apple store a few miles away. The five year old 3rd generation Apple TV will continue to be my primary multimedia source, until 1) YouTube improves its app, 2) it dies, or 3) planned obsolescence forces me to upgrade.

Amy, the Above Average Gaming PC

Amy, the Above Average Gaming PC

As I mentioned in a previous post, my home systems are named after Futurama characters. The only hard rule I’ve had is I’ve never used “the big three” because I didn’t want to assign assumed significance to them, but other than that, the only loose sub-convention is women tend to be laptops and desktops.

Amy, the Above Average Gaming PC leo and inez (Amy’s parents) are the G4 Mac Minis. nibbler is the main router and “omniserver”. linda (Morbo’s newscast co-host) is my laptop, a Lenovo ThinkPad X250. ndnd (Lrrr’s wife) is a (“modern”; 6 years old) Mac Mini media server. And amy is my Windows gaming PC. When I replace a “standard” computer, I’ll keep the same name; for example, my main laptop has always been named linda.

(While I don’t anthropomorphize my computers, I found it awkward to write the rest of this post while mixing e.g. amy and “it” in the same sentence. So for the sake of convenience and narrative, sometimes I’ll be using gender pronouns, sometimes I won’t.)

amy had been getting a little outdated. Normally what I tend to do is make incremental upgrades of desktop computers every other year or so. A full list is here at pcpartpicker.com, but in general, all of the main components were 4 to 5 years old:

  • Intel Core i5-3570K
  • 32GB DDR3 RAM
  • Dual AMD Radeon HD 7790
    • Unless you’re seriously into a single game which has good support for SLI/CrossFire, I’d recommend not doing it, as overall compatibility can be a nightmare.
  • 250GB Samsung 840 Pro SSD + 2TB WD Black HDD

A pretty decent system at the time, but it’s dated. Notably, a month or so ago I bought and tried to play Player Unknown’s Battlegrounds. Even at lowest settings, it was nearly unplayable. That was the first time I took advantage of Steam’s refunds.

So this month I decided to build a new gaming PC (also to be named amy). AMD Ryzen is the new hotness, so I went that route. I don’t think I’ve built an AMD system since Intel introduced its Core CPUs; the last AMD system was probably an Athlon 64 X2. And while the AMD Vega video cards were just released, they’re not very price competitive. Nvidia GeForce 10 series are somewhat expensive too due to Bitcoin miners, but an okay deal can be had on a 1060.

As previously mentioned, I have tended to do incremental builds: buy about 30-50% new components to replace, and re-use 50-70% of an existing system’s components. I don’t think I’ve ever spent more than $750 at a time on computer components. But as it’s been more than a few years since I’ve done this, I decided to build a completely new system, from the case up.

Let’s just say, I spent a bit more than $750. It wasn’t exactly “money is no object”, but I did suppress my urge to try to save little bits here and there. “Hmm, the Western Digital 256GB NVMe drive is $100 and should work OK… But I know the Samsung 960 EVO will be good and is only $20 more.”

Of course, those little splurges add up over the course of an order, and the initial cost after shipping and tax ended up being $1,599.95 (no, really). It’s not exactly a top of the line gaming PC, but it’s comfortably above average in every respect. Hence the name.

Amy, the Above Average Gaming PC

Amy doesn’t like to brag. She’ll freely admit she’s not a Threadripper with triple 1080 Tis and liquid nitrogen cooling. But she’s pretty good. Sufficient. Above average. She once wrote a song which her friends liked, but doesn’t plan to go pro or anything. She enjoys dim sum. She has a 780 credit score.Amy, the Above Average Gaming PC

Amy, the Above Average Gaming PC I’ll admit, I went with the Fractal Design Define C Tempered Glass case because I thought it looked sexy, in an understated way. Of course, the RGB lighting which happened to come on the motherboard and graphics card belies that understated tone, but it still works.

This is the first time I’ve ever put even modest effort into cable routing and presentation in a case. Ten years ago, nobody would have considered routing most of the system’s cables behind the main motherboard tray, but now you have cases which are built with that in mind, with cable management channels, rubber grommets between the front and back, and PSU/hard drive basements. The result is a clean, simple layout in the front which lends itself well to display behind glass.

The specs are very respectable and should last awhile:

  • AMD Ryzen 5 1600X
  • 32GB DDR4 RAM
    • 2x 16GB sticks with 2 slots free; I believe since it’s at 2400MHz, 64GB should be possible in the future
  • Nvidia GeForce GTX 1060 6GB
  • 250GB Samsung 960 EVO NVMe SSD + 2TB Seagate FireCuda SSHD

I had originally ordered a Cooler Master Hyper T4, but realized after it arrived that the only native AM4 mounting direction is vertically, which would have blocked 3 of the 4 memory slots. Luckily I had a new Arctic Freezer 7 Pro, which I don’t even remember buying, but it was in a box in storage. It fits, and goes with the black/white aesthetics of the Fractal Design case.

I still don’t like how the cooler is mounted vertically, and will probably go with a Hyper 212 EVO and AM4 bracket eventually. The problem is the AM4 bracket must be ordered directly from Cooler Master, so it may take awhile. But thermals aren’t a problem; I’m not overclocking, have two 140mm intake fans and one 120mm exhaust, so air is constantly moving within and out of the case.

The first game I played on the new system? Flaunting technology, I played the original Half-Life, which is 20 years old this year. The graphics card didn’t even bother to turn on its fan.

Big Brother in Motion

A few weeks ago, I installed a networked security camera overlooking the front yard. It performs three functions:

  1. It continually records a 640x480 10fps low-bitrate stream.
  2. When motion is detected, it saves a 2304x1296 20fps high-bitrate recording of the event. The camera can do 30fps, but only at 1920x1080 or lower, so lower framerate is an acceptable trade-off for a higher resolution.
  3. When motion is detected, it saves a series of three 2304x1296 JPEG images, one second apart each.

The motion detection normally activates when a car drives by, so most of the burst shot images were of a car at three different positions. I decided to average each of the sets together from a three day period, and the result was pleasing.

convert 00001a.jpg 00001b.jpg 00001c.jpg -evaluate-sequence mean 00001.jpg

From there, I converted the sets of averaged images into a video.

ffmpeg -framerate 5 -i %05d.jpg -c:v libx264 -profile:v high -crf 20 \
    -pix_fmt yuv420p -s 1920x1080 -r 30 output.mp4

The invocation converts the images into a 5fps video, forces yuv420p color (as the night shots were true greyscale), downscales to 1080p, and upconverts from 5fps to 30fps (as I wasn’t sure if YouTube would properly handle a 5fps video). The music was added post-upload from the YouTube audio library, and I’m very pleased with how well that track syncs up with the events in the video itself.

The input images were actually hand-curated a bit before making the video. I removed all images of me (walking to the mailbox, backing out of the driveway, etc) and all images where it’s unknown why the camera motion detection occurred (which are rare).

A large number of removed images were due to the separate security light underneath the camera, which has its own motion detection and is more sensitive and prone to false trigger, especially around dusk. The security light will turn on, causing a camera event. The camera will then realize it has enough light to switch from greyscale to color, causing another event. A few minutes later, the light will turn off; third event. The camera will switch from color to greyscale; fourth event. Repeat a few times until both the light and camera settle on “really, it’s dark now”.

Also of note is the first day was a rare day (for Northern Nevada) when it rained. A remote friend pointed out the craziness of it raining three times during a single afternoon, completely wetting the roads each time, and then completely drying out each time before the next rain. Yeah, that happens.

M.2 SATA SSDs on Mac Mini G4s

It’s 2017. I have two PowerPC G4 Mac Minis which have been in service since they were released in 2005. Long overdue for an upgrade. No, I’m not going to replace them. Instead, I’m giving them solid state drives.

My two G4 Mac Minis (leo and inez – the home network uses Futurama characters for a naming scheme) were released in 2005, and for the most part, they have been running 24/7 since then, usually for Finnix builds. One of the nice things about the G4 Minis is they are very power efficient for the period – about 12 watts at idle – so I treat them as always-on servers. inez is the more powerful of the two, with a 1.4GHz G4 and a 320GB 2.5” IDE HDD from an upgrade in 2010. leo is a stock 1.2GHz G4 and an 80GB HDD. Both have maxed out 1GB RAM.

But I’ve been thinking about their longevity lately, and not just because Debian and Ubuntu are dropping the 32-bit PowerPC architecture. Namely, their hard drives. IDE hard drives are not manufactured anymore, and they will eventually fail, being constantly spinning mechanical platters. I checked leo’s original 12-year old hard drive SMART data, and its seek failures were so high, I’m surprised it’s still running. inez’s upgraded hard drive is “only” 7 years old and looks to be in good shape, but it will fail someday.

So what other options are available? The drives are standard laptop-style 2.5” 44-pin IDE drives. SSDs really didn’t exist until the SATA era. CompactFlash to IDE adapters are available, but most of the ones I’ve seen are “loose” (not in a form factor emulating a standard physical drive size), and besides, CompactFlash is basically obsolete too. SD to IDE adapters exist and I’ve tried a few over the years, but compatibility tends to be terrible, and the interface is slow.

HP 15-f019dx

But the other day, I found something I didn’t expect to exist: an M.2 SATA (up to 2280 length) to 44-pin IDE adapter, housed in a 2.5” enclosure. And from what I read at the time, supposedly they worked well. They’re available from several outlets (Amazon, eBay, AliExpress, etc), but all appear to be the same base manufacturer. The difference is just price and how long you want to wait for them to arrive. I ordered two from Amazon, as well as two of literally the cheapest 128GB M.2 SATA drives available ($52 each on sale at the time).

Migrating the hard drives was a bit of an ordeal. The G4 Mac Minis have no room for expansion (the drive and a single stick of memory barely fit in the case as is). My first idea was to use a 44-pin laptop IDE to 40-pin regular IDE adapter I had, install it in an old spare x86 machine I had, boot Finnix, recreate the partitions and sync from machine to machine. But mac-fdisk is only available on PowerPC, so that was out. I could have done the same with a G4 tower, but that’s buried in a closet. What I ended up doing was 44-pin to 40-pin, then 40-pin to USB. The latter involved cannibalizing an old IDE CDROM to IDE enclosure, removing all but the PCB (because of the layout of the 44-pin to 40-pin adapter), but once I had that worked out, I attached the USB device to the Mac Mini.

Let me reiterate: at this point I was going from SATA to M.2 to 44-pin IDE to 40-pin IDE to USB.

The partitioning and syncing was relatively straightforward, but keep in mind for NewWorld PowerPCs, extra work is needed to make the bootstrap partition (#2) actually bootable, using hattrib to essentially do the following:

hmount /dev/sda2
hattrib -c UNIX -t tbxi :yaboot
hattrib -b :
humount

Once the new drives were physically swapped in after the transfers (which is physically a pain on G4 Mac Minis), I checked them out. This is something I never expected to see from smartctl on a 12-year-old PowerPC:

Device Model:     ADATA SU800NS38
Rotation Rate:    Solid State Device
Form Factor:      M.2
ATA Version is:   ACS-3 (minor revision not indicated)
SATA Version is:  SATA 3.1, 3.0 Gb/s

I didn’t do tests on leo with its nearly-failing drive before swapping it out, but I did do bonnie++ on inez before. Mind you, before the upgrade, its hard drive was a 320GB Western Digital Blue drive from 2010; essentially one of the last and most modern 2.5” drives produced. And here’s the before/after with literally the cheapest M.2 SATA drive I could buy new:

Version  1.97       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
inez(old)        2G           35513  17 16987  11            46172  13 157.3   6
Latency                        2113ms    1488ms             68443us    1952ms
inez(new)        2G           87089  40 41527  27           102046  27  4145 178
Latency                         836ms     229ms              7650us    8976us

Version  1.97       ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
inez(old)        16 15257  77 +++++ +++ 20204  72 15349  75 +++++ +++ 19069  73
Latency               669us    1460us    1694us     691us     110us     671us
inez(new)        16 16910  85 +++++ +++ 22496  80 16591  82 +++++ +++ 21245  82
Latency               832us    1410us    1703us    9260us     120us     840us

I’m impressed. I expected the IDE interface to be a large bottleneck, so I didn’t expect those sorts of speed increases.

Side note: I bought two of the exact same drives. ADATA SU800NS38 128GB, same firmware (Q0125D), similar serial numbers. They both appear to perform about the same, but the raw disk sizes are different. One is 128,035,676,160 bytes, one is slightly lower at 128,034,594,304 bytes. Weird.

What would Brian Behlendorf do?

(With apologies to both Brian Behlendorf and Mr. Bad for the title.)

In 1996, the final official release of NCSA HTTPd was made, 1.5.2a. If you were born after 1996, just remember that there were web servers which came before Apache. Also, get off my lawn.

In 2007, I decided on a lark to get ncsa-httpd working on (at the time) modern Linux/GCC. It only took a handful of changes, and I packaged it up as an (unpublished) Debian package, ignoring modern FHS requirements and continuing to put everything under /usr/local/etc/httpd/, as it was in the 90s.

This evening, my IRC friend Screwtape posted a link he found about building a new Gopher search engine using 1990s technology, and that got me thinking about ncsa-httpd again. I went back to my project from 2007 and discovered it was no longer buildable on GCC 5, and with help from Screwtape, I got it building again.

HTTP/1.0 200 Document follows
Date: Mon, 22 May 2017 05:56:08 GMT
Server: NCSA/1.5.2
Content-type: text/html

After that, I continued on, finding a few bugs in the source code, fixing them, finding a few more, etc. After a few hours I stopped and realized what I was doing, and threw those patches out. I was literally reinventing the Apache project, 22 years too late.

I’ve made the patches required to build on modern systems available in this repository. And if you’re interesting in the Debian packages, they’re available as well.

Oh, and it should go without saying, do not use this in a production environment, on anything accessible from the Internet, etc. We’re talking about code which has been unmaintained for over 20 years, and has many known vulnerabilities.