Finding the perfect streaming media box

For years, I’ve been looking for the best way for my wife and me to watch TV. We haven’t had cable TV in years, so up until about 2 years ago, we strictly watched what I recorded on my Mac Mini using El Gato’s EyeTV. I switched to using the HDHomeRun instead of the EyeTV tuners and things have been running flawlessly. One day my wife mentioned trying Netflix and we tried it out on my Nintendo Wii. While it worked OK, the quality wasn’t great and the user interface was kind of weird because of the WiiMote controller.

At that time, I decided to get an Apple TV (2nd generation of the small box). It worked quite well for Netflix and managed to setup some scripts to export all the TV content we recorded into iTunes and then use the Apple TV to play it. The system worked and I had no complaints. Almost another year went by and when we moved into our new house, we got a new Vizio 50″ TV. Since we already had Amazon Prime, I thought I would check out some of the Amazon Prime Videos available using the Vizio TV. The interface on the TV for Amazon was so poor, it was practically unusable.

I had heard good things about the Roku, so I decided to give it a shot. It handled Netflix and Amazon Prime. In addition, there was a Plex app for the Roku. Even though I had played with Plex in the past, I wasn’t all that familiar with it. I installed the server software on my Mac Mini, tweaked my scripts that exported the EyeTV shows to the Apple TV and had the shows exported to Plex.

So now I had Netflix, Amazon Prime, as well as my TV shows working on the Roku. Everything worked well and is pretty easy to use.

Why mess with something that works? Well, a friend of mine had an Amazon Fire TV and said he liked it. I’ve read mixed things about it and didn’t have a need to get one. About a week ago, one showed up at my door with a game controller, so what did I have to lose?

The Fire TV is a bit different than the Roku and with Plex installed on the Fire TV, I should be able to get the same content I already had. After a week playing with the Fire TV, I have to say that it has potential. The Plex app, however, needs a bit of work. It is an Android app with few customizations other than working with the game controller and remote. In particular, the Plex server generates media index files which lets me see thumbnails while I’m fast forwarding so I can also stop the forwarding when the show starts.

Unlike the other boxes, the Fire TV runs Android and has a pretty wide selection of apps, including games available for it. I’ve used some Amazon credit to purchase some games and have downloaded a few free ones. While I’m not a hardcore gamer, I’ve been pretty impressed with the gaming ability of the TV. I’ve already wasted a ton of time playing games, so it must say something about the box! The game controller works well not only for games, but also for navigating the menus; the joystick makes it quite easy to quickly move around.

As much as I wanted the Fire TV to replace my Apple TV and Roku, it doesn’t quite do that. It could almost replace the Roku if Plex worked better; Plex for Android was designed for a mobile device and as I wrote earlier, hasn’t really been updated for the Fire TV. I am using my Fire TV for Amazon Prime, Netflix, and gaming. The Apple TV has 1 feature that neither of the other 2 has and that is AirPlay for the times when I want to throw my iPad or iPhone’s screen up on a big display.

The battle of the Bluetooth tags

Several years ago, I started looking into Bluetooth LE as it would let me work with devices and potentially get something in the app store without having to become an Apple partner and get a device certified. While I haven’t released anything for the app store, I’ve done some dabbling with the technology.

One of the areas that seems to have a lot of interest is in “beacons” to provide finer grained location data for apps. A simple example is putting a “tag” on a set of keys and knowing when you’re close to them. This seems quite popular and a lot of companies are getting into this area. In the past year or so, I’ve collected a number of different “tags” to compare the apps and see how they function. For the most part, the tags are advertised as helping you find lost items. At this point in my life, I rarely lose things, so my interest in these is more academic than practical.

I’ve purchased tags from StickNFind, tile, and XYFindIt. I’ve had the StickNFind ones the longest, but never got around to writing a review; the other 2 sets just arrived.

To begin with, all three have this concept that if you lose your whatever out in public, someone else with the app will somehow come within close proximity to your device, receive the ping from the tag and then upload the location to their cloud server. To me, this seems like one of the stupidest features as it requires a large number of people to have the app running in order to blanket the world with the receivers for the beacons. They should all just cut this out and forget the cloud component of their “service”. I have no idea why people think this is a good idea, but it is ridiculous.

Moving onto the hardware. All 3 devices look a little different and take slightly different approaches. The XYFindIt and the StickNFind devices both have replaceable batteries; the tile is a sealed device and they expect you to replace the tile about every year. There have been numerous complaints about the devices arriving DOA because the batteries were dead. I think that the tile is very short sighted in this as the tiles themselves aren’t cheap and if they expect you to replace them yearly, I’m not sure who will do this. Having said that, I like the design of the tile devices. They are flat and have a built in place to put them on a keychain. The StickNFind comes with a piece of plastic that you stick onto the back of the device and then put that on a key ring. The XYFindIt devices are hexagonally shaped and have a hole for a keyring.

The tile has the best looking hardware design. In addition, the tile’s audible beep when finding it is more pleasant than the other two. However, the lack of a replaceable battery keeps me from feeling completely comfortable with it.

IMG 3792

From left to right: StickNFind, XYFindIt, tile.

While all the hardware is basically the same (a fob/tag that you hook on a keychain and beeps when you alert it), the software you install on your phone is where the differences are more noticeable.

Starting with the StickNFind, the app resembles a radar (because that is such a great analogy in trying to locate something). The biggest problem with this is that the Bluetooth LE ranging is so inaccurate, the radar image is useless.


The app doesn’t use any standard controls and I have no idea what most of it means. The app is basically useless when all I want to do is find my tag. You can send out a request to the tag if you’re close enough to sound the beeper, but I can’t tell if it is in range. Also, I found the app to be flakey and took awhile to realize that I was logged into my account (I’d prefer not to have accounts for these things as they’re not really needed). I’m not sure how useful Maps is (this applies to all the apps) as most of the time that I’m looking for something, the chances of me leaving it somewhere else are practically zero; if I did leave it, what are the chances that I’ll be able to recover it?

Moving onto the XYFindIt app, I really wanted to like it as it is the newest of them all and I would have thought that they had the most time to see what others did wrong and make it better.

Screen Shot 2014 11 30 at 7 39 14 PM

The dots around the outside move around and act like a compass, I think, but I doubt they actually mean anything because if I recall correctly, given the granularity of Bluetooth LE for location, it is extremely hard to be able to tell what direction the tag is located. Also, the icons are pretty strange on this screen. I’m not sure why there is an eject icon for more and I couldn’t tell if tapping the speaker icon turned the beeper on or turned it off. Lastly, the dB level is not accurate and pointless. Furthermore, the map shows the last places your tag has been; my tags have never left my desk and has given me 6 different locations for them. Not all that helpful.

Lastly, the app for tile. This app is clean and gets to the point of the tags, finding your stuff.

Screen Shot 2014 11 30 at 7 38 40 PMScreen Shot 2014 11 30 at 7 38 48 PM

I really like the simple interface and the “Find” button. If I’m close enough to hear the beep, then I can find it. I don’t really need the fancy “warmer”, “colder”, etc. For the most part, I found that the Find button did connect to the tag and played the pleasant sound; that’s more than I can say for the other tags.

Normally I list pros and cons of products, but I’m going to skip that and go onto the summary.

As much as I wanted to find some tags to use to help my wife find her keys and to put in my suitcase in case I get separated from it, I’m not convinced that any of these products is worth the money. The tile is close to being the device I’d recommend, but it was kind of hit or miss in connecting, the global find “feature” is a turn off, and the non-replaceable battery makes it a non-starter. The other 2 products have poor quality apps and a design that isn’t as ascetically pleasing as the tile.

When my tiles die, I’m going to attempt to crack them open and see if I can put them back together. They have so much promise, but if you want 4 of them, it’s basically $70 per year to use them.

Save your money and wait for the next round of Bluetooth LE tags.

Swift Lessons

As I wrote in my last post, I’ve been learning Swift. This has been interesting. Chris Lattner and his team have been working on Swift for years and have done something that is amazing. Not only have I learned a bit about programming in Swift, I’ve learned a few things about using Swift.

  • Swift isn’t ready for prime time. I’ve seen references to this from Apple.
  • There are lots of bugs in the compiler; SourceKit crashes all the time and auto complete dies.
  • The syntax, while flexible, is a bit confusing at times. For instance, I have a framework in my app called Vera. In some places I access classes of that framework using the Vera namespace, i.e. Vera.Device.Category.Audio to get an enum value and in other places, I use an array of Device. This is confusing and inconsistent.
  • In some places, parameters have names and others they don’t. While you can specifically require the parameter names, sometimes you don’t have to do that and sometimes they’re required.
  • While Swift is extremely flexible, it is confusing as anything once you start getting into wacky things go haywire. Take a look at this code with AnyObject and Unmanaged.
  • There are bugs in the optimization such that turning on optimizations breaks certain code (like the one referenced in the last bullet). I can’t remember the last time that turning on optimizations broke code that I didn’t discover until I tried to deploy an app.

I’m sure that things will get better, but at the moment more work needs to be done. I’ll keep poking with Swift and enhancing my app.

Learning Swift

When Apple announced Swift at WWDC, I knew that if I was going to keep up with the youngsters, I had to learn Swift. Unfortunately it has been a long time since I learned a new language; I learned Objective-C in 2000, I think. While I am capable of learning, finding the time to learn it and use it are getting harder and harder. However, I know that I didn’t have a choice.

I started reading Apple’s books on Swift and made it part way through when I got distracted. I’ve restarted a few times, but still haven’t finished. So I decided to take my automation app and completely rewrite it in Swift. While I could have re-used my existing code, I decided to do my implementation completely in Swift using a few open source libraries (there may have been better libraries to use, but the ones I picked seemed reasonable for now). While I’m still learning Swift, I thought it was a decent attempt to learn it. I’ve put my rewrite on GitHub for all to mock.

I’m going to keep learning and I think that reading the books will make a lot more sense now that I have a project under my belt.

Time Flies – 20 years in mobile

It dawned on me yesterday that I’ve passed 2 milestones in my career. The first is that I’ve now been writing mobile applications for 20 years. Yes, there was mobile way before the iPhone and Android! I started writing mobile applications my senior year in college when Apple sent me a Newton MessagePad in exchange for licenses of my NotifyMail program. I sometimes think about all the changes in this industry and it just makes my head hurt! Development 20 years ago was generally not treated as a hobby due to cost; today, anyone can write an app with no skill (not sure if that is good or bad).

The second milestone is that I’ve been working from home for 15 years. I worked in an office setting for less than 4 years before I started this. It is a choice that I don’t regret and can’t imagine working in an office again. Even though I work for a large company, I have tons of flexibility and am far more productive than if I was in an office everyday.

Who knows what the next 15-20 years in my career will bring, but I look forward to them.

Giving up on Xcode Server

Several weeks ago, I started having problems with my media center where recorded shows started stuttering in playback. There were a huge number of variables that could have caused it as lots of things changed, like an update to EyeTV, update to my HDHomeRun, Xcode update, OS X Server update, etc. While I’m still trying to identify the cause, I think I’ve narrowed down the problem to Xcode and Xcode Server.

Why am I blaming Xcode? Well, I went into OS X Server and looked to disable it. It wasn’t turned on and didn’t have Xcode selected. Since I hadn’t turned it off and had selected a version of Xcode, I knew something went crazy. I selected Xcode again, restarted the Xcode Server and then turned it off. I noticed that even after I did this, there were still log entries related to Xcode Server. Huh? If I disabled it, why was it still doing stuff? I found a blog entry which identified a way to completely reset Xcode Server.

Before I had completely disabled Xcode Server, I had noticed periodic log entries about the server doing stuff which wasn’t a complete surprise as it had to check source code and do other things. However, the status showed a huge number of little spikes in CPU usage. After I disabled Xcode Server, the spikes stopped. When it wasn’t doing builds, it really shouldn’t have done much to warrant the CPU spikes.

I can’t say that I’m going to miss fighting Xcode server; I installed Jenkins and got it configured how I wanted my jobs configured. Jenkins, itself, was easy to setup and do the builds; the tricky part was getting my release notes to TestFlight and to get the archives named the way I wanted. Even though Jenkins is written in Java, I’m not seeing spikes in CPU usage; in fact, when idle, I’m seeing a decrease in CPU usage.

The victims of airbnb and short term rentals

I’ve heard people say that airbnb and the like are disrupting the hotel industry by letting anyone rent out his or her residence. This may seem like a great idea until you’re the person living next door to one of these rentals. Instead of having a neighbor that you know by name, you have random people staying for 1 night, 3 nights, a week. This can bring more crime, noise, and reduce property values. San Francisco just passed an ordinance regulating short term rentals putting a cap on the number of days a place can be rented a year. This number is capped at 90 days, but that is still far too many, in my opinion.

My neighbor decided earlier this year to kick out the family that had been renting his house for a few years and turn it into a vacation rental. He claims that he is a “family man”, but the only motivation for doing this is greed. He “fixed up” the house by putting in a hot tub, redoing his deck and planting grass. His vacation rental doesn’t fit into our neighborhood as all the houses in the immediate area are single family houses that are either owner occupied or long term rentals (I’ll ignore the mini-dorm across the street owned by another greedy person). So now we’re going to get random people staying at the house and have to deal with potential noise and the feeling that we may not be safe because we have no idea who is supposed to be next door.

The city of San Diego is too chicken to pass regulations on short term rentals because that would affect beach rentals and other rental properties that bring the city money via the transient occupancy tax (provided people collect and report it). Zoning laws are supposed to separate different uses for properties, i.e. commercial and residential. A short term rental is definitely commercial as a residence is where someone lives. Shouldn’t short term rentals fall under commercial zoning regulations?

People could have similar arguments against bed and breakfasts, but they are more regulated (one we stayed in said that they could only serve breakfast and not any other meal) and have a host/manager on site.

The rise of short term rentals anywhere someone wants may be good for the property owners, but in my opinion, is not wanted by many residents of neighborhoods.