personal comments edit

this isn’t scriptable

there is no template file new automated fill-in-the-blanks cookie cutter copy/paste pattern all input fields validated rule of thumb answer

you need to think

solve problems be creative break out of the mold do the right thing

build a great product

don’t be a script because this isn’t scriptable

be a developer

develop

General Ramblings comments edit

We had a team celebration today at Kells and it was a rather fun murder mystery dinner (well, lunch) theater from Eddie May Mysteries.

The idea is that, while you eat, there are actors who come in portraying different suspects in a murder mystery. You talk to them, they leave “clues” and “evidence” at your table, and at the end you have to figure out who the killer was.

Our mystery took place supposedly in 1929, so all the actors had costumes on and acted like it was the roaring ’20s.

At one point, one of the characters left some “evidence” at our table - a purse with a bloody handkerchief in it.

Now, I’m a fan of mystery movies and such, so the first thing I start thinking is, red herring. I mean, no way it’s going to be this blatant, right?

Finally we got a chance to ask the characters questions, sort of near the end. The actress who had the bloody handkerchief sat down and I started thinking… given the time period… woman with a bloody handkerchief… maybe not living the healthiest lifestyle…

“Are you sick?” I asked.

“What?” The actress looked a little shocked.

“Sick. Are you sick? Like, not mentally ill, but physically. Do you have any disease?”

“Why do you ask?” She looked legitimately confused and started acting like I was being offensive to her character.

“Well, given the time frame, somewhat close to turn of the century, I’m wondering if you have tuberculosis. Consumption. You have a bloody handkerchief in your purse and there’s no way it’s that obvious.”

At this point she actually broke character. “This is what you get when you do the show for smart people. I’ve been doing this show for years and I’ve literally never heard anyone ask that question. Have you ever heard of Occam’s razor?”

I couldn’t help but giggle a little. “Yeah.”

“OK, good. Think way… way… way simpler than that. Truly, you’re overthinking it.” She laughed a little.

So… Maybe I should stop watching so many mystery movies. I always expect it to be this crazy convoluted thing now and I ignore the obvious stuff.

I ended up getting it right, despite over-thinking it.

Anyway, it was a pretty sweet event. The actors were good and were obviously having fun with it, which made it all the more fun for us. I would totally do it again.

media, windows comments edit

I’ve had my media center running for a while using standard Windows Media Center. I like it because it is simple, has few moving pieces, and basically “just works.”

Unfortunately, what I’ve been finding is that, when you have some 900+ DVDs in the DVD Library then it’s a bit slow to open. When you select the “Movie Library” option in WMC, it’ll take upwards of 45 seconds to come up. Not only that, but when you scroll through the movies it’s a bit slow, too.

There’s also some room for improvement when it comes to the UI for the library. Basically you get the poster for the movie, some actor and plot metadata, and that’s about it.

So, since I’d had WMC running for a while, I thought I’d look at some other options for the front end. Again, few moving pieces is a goal. And, in this case, a minimal amount of work is key – I don’t want to redo my whole setup just to switch front ends. After some research, I thought I’d give XBMC a try. It has progressed quite a bit since I originally did my research and appeared to be reasonably easy to get running.

Before I get into how I set it up, if you haven’t read about how I have things set up, what my goals are, and so on,please take a moment to check out my overview post. You’ll see that my use cases are common but not necessarily the most common – for example, all of my movies are in DVD rip (VIDEO_TS) format. When I explain how I got things set up it will be helpful to understand these things since I won’t be explaining, say, how to set up your music… since that’s not one of my use cases. Nor will I cover handling movies that are ripped files (e.g. WMV or MP4 or whatever) because I don’t have that, either. But if you’re looking to set up XBMC and you have a working WMC setup, maybe this will get you pointed in the right direction.

Goals:

  • Minimal rework. I already have a working Windows Media Center installation. I’d like to keep it working and add the ability for XBMC to work.
  • Few moving pieces. Using Windows Media Center, I didn’t have any additional software to install beyond the OS. I don’t mind installing a couple of other things, but I don’t want some complex setup that’s going to require a ton of maintenance and tweaking. I just want it to work.
  • Improved UI response time. The WMC DVD Library takes a long time to come up and show the list of movies. I’d like to see a UI come up in < 5 seconds.
  • Improved UI display. The WMC DVD Library is pretty simple. I’d like to see fan art, metadata, posters, etc.

Given all that… here’s what I did.

First, choose where you want to get your movie metadata from. Windows Media Center uses a single source to get posters, actor info, plot info, and so on. With XBMC you get your choice of where to get your TV and Movie data from. The reason you need to make this decision is that each “scraper” (the thing that goes and gets the data) is a little different and if you want things to just fall into place, you need to make the choice. I recommend usingTheTVDB.comfor the TV show scraper andIMDbfor the Movie scraper.

Next, update your video folder structure so the XBMC metadata scrapers can find the movie or TV show based on the folder names. This is the biggest part of the work. By way of comparison, my old folder structure looked like this:

  • \\server\DVD
    • Alias 1.1
      • VIDEO_TS
      • AUDIO_TS
    • Alias 1.2
      • VIDEO_TS
      • AUDIO_TS
    • Aliens
      • VIDEO_TS
      • AUDIO_TS
    • Blade Runner
      • VIDEO_TS
      • AUDIO_TS
    • Die Hard
      • VIDEO_TS
      • AUDIO_TS

Again, that’s the OLD structure so don’t use that if you’re starting fresh. Things you’ll notice in that old structure:

  • TV and Movies were intermixed. I didn’t separate the two types of DVD rips. With XBMC, you need to separate them because each scraper works against a folder tree.
  • The TV folder names were based on DVD structure and didn’t say which seasons/episodes were actually on each disc. XBMC needs that information and gets it from the folder structure.
  • Movie folders didn’t include the year of the movie in the folder name. While that’s not required, it really helps the scrapers to find the right data for the movie.

I solved those problems by doing a little moving around and renaming of files and folders. After that work, I ended up with a structure that looked like this:

  • \\server\DVD
    • Movies
      • Aliens (1986)
        • AUDIO_TS
        • VIDEO_TS
      • Blade Runner (1982)
        • AUDIO_TS
        • VIDEO_TS
      • Die Hard (1988)
        • AUDIO_TS
        • VIDEO_TS
    • TV
      • Alias
        • Season 01
          • s01e01e02e03
            • AUDIO_TS
            • VIDEO_TS
          • s01e04e05e06e07
            • AUDIO_TS
            • VIDEO_TS

That is the NEW structure – use that.

As you can see, there are some differences.

  • Under the top-level DVD folder, I now have Movies and TV as sub-folders. This allows me to tell XBMC “this folder has movies in it; this one has TV.”
  • Each movie folder includes the full name of the movie along with the year the movie was made. It is important that this matches the title and year of the movie that is in the movie metadata source you chose earlier. Remember how I recommended using IMDb for movies? Go to IMDb and look the information up. If IMDb says the movie is called “The Terminator” and the year it was made is 1984, then the folder should be “The Terminator (1984)” – not “Terminator, The (1984)” or “Terminator (1984)”. It needs to match exactly. Different movie databases may have it listed slightly differently, which is why you need to already know where you want to get your data from.
  • Under the TV folder, each TV series has a folder. Notice the folder doesn’t necessarily include the year of the TV show. The name of the show needs to match the name of the show found in the TV scraper data source. Remember I recommended TheTVDB.com? Go to TheTVDB.com and look up your show. Some shows do have the year listed (if there is more than one show with the same name). Others don’t. Make sure you match what the site says.
  • Under each TV series folder, there are season folders. In the example, you see “Season 01” – the word “Season” with a two-digit season number including a leading zero. Follow that.
  • Under each TV season folder, there are folders with each disc rip. The folder for a disc lists which season(s) and episodes the disc has. In the example, the first disc has season one, episodes one through three on it; the second has season one episodes four through seven. If you have season 4 episodes 8 through 10, you’d have “s04e08e09e10”. It’s OK if there are multiple seasons on one disc – Say you have season 1 episodes 1 and 2, then season 2 episodes 1 and 2 – that would be “s01e01e02s02e01e02” (and I’d put that in the Season 01 folder, but that’s your call).

This structure is really key. It works with both WMC and XBMC. It allows automatic metadata scrapers to work. You can read more about how XBMC uses scrapers and how to avoid wrong title matches on the XBMC site. These pages will also tell you how to handle Movies and TV that are in ripped files rather than DVD VIDEO_TS folders – something I don’t cover.

Now that you have the folder structure whipped into shape, you have to figure out if you want to have any movies grouped into sets. A “movie set” is like a series of movies you want to have appear in the list of movies like a “box set.” For example, if you have all of the Harry Potter movies, you probably want one “Harry Potter” entry in the top-level movie list and when you select it, you want to see the list of Harry Potter movies in the correct order.

To do that, you need to put a file called “movie.nfo” into the VIDEO_TS folder for each movie you want in a set. The file is literally called “movie.nfo,” not named after the movie (so, not “Die Hard.nfo” or anything like that).

The contents of the movie.nfo file look like this:

<?xml version="1.0" encoding="utf-8"?>
<movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <title>Harry Potter and the Goblet of Fire</title>
  <set>Harry Potter</set>
  <sorttitle>Harry Potter 4</sorttitle>
</movie>
http://www.imdb.com/title/tt0330373/

The top bit of the file is an XML document with “movie” as the root element. Inside there, you define…

  • The title of the movie – this is what will appear in the UI once you dive into the box set.
  • The name of the movie set – this is what will appear in the UI at the top level in the movie list. Any movie in a set with the same name will be grouped.
  • The sort title for the movie – this is how it sorts inside the set.

At the bottom of the file, outside the XML, put a link directly to the movie on IMDb. You link to IMDb because that’s the metadata scraper you’re going to use (remember?). If you want to use a different scraper, you need to put a link to the movie in the appropriate site.

Again, that movie.nfo file goes inside the VIDEO_TS folder.

You need to do the movie.nfo setup before you index your movies with XBMC or it will be painful to fix later.

You can read about .nfo file formats and movie sets over on the XBMC site.

You now have a decision to make: Do you want to share your library database with multiple XBMC front-ends or do you just have one XBMC front-end? If you only have one XBMC front-end, you can skip the setup of the database and get to the install of XBMC; otherwise, you’ll need to set up an XBMC media database.

There are three things to share across XBMC front ends: the media, the media library database, and the poster/art thumbnails.

  • Sharing the media is as simple as putting it on a network share that all the machines can access. I already have that.
  • Sharing the media library is a little more involved and requires you to set up MySQL. XBMC has a good article on how to do this, as does Lifehacker. I won’t go into the setup of MySQL or the databases here. I will say: I’m using the built-in MySQL on my Synology DS1010+ so it was super minimal to get running. I didn’t need to set up a new server or anything, just check the “enable MySQL” box on the Diskstation. Done.
  • I had to set up Thumbnail sharing after doing the initial XBMC install using the mklink command and replacing the Thumbnail folder in userdata with a directory link… but we’ll get to that in a bit.

Again, if you only have the one XBMC front end, you don’t really need to do any of that.

Now… get XBMC installed and fire it up. You won’t do anything but start it up right now because you need the userdata folder to be created.

XBMC stores all of its data in a user-specific folder called “userdata.” You need to know where this is and be familiar with it. By starting XBMC up that first time, the folder should have been created.

There are a metric ton of “advanced settings” for XBMC that don’t have any UI to them. You have to put these settings in the userdata folder in a file called advancedsettings.xml. This file will not exist – you have to create it.

Create your advancedsettings.xml file and put the following in it (this is from my advancedsettings.xml):

<advancedsettings>
  <sorttokens>
    <token>the</token>
    <token>a</token>
    <token>an</token>
  </sorttokens>
  <tvshowmatching append="no">
    <regexp>\[[Ss]([0-9]+)\]_\[[Ee]([0-9]+)\]?([^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
    <regexp>[\._ \[\-\\/]([0-9]+)x([0-9]+)([^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
    <regexp>[Ss]([0-9]+)[\.\-]?[Ee]([0-9]+)([^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
    <regexp>[\._ \-\\/]([0-9]+)([0-9][0-9])([\._ \-][^\\/]*)(?:(?:[\\/]video_ts)[\\/]video_ts.ifo)?</regexp>
  </tvshowmatching>
  <video>
    <playcountminimumpercent>101</playcountminimumpercent>
  </video>
  <videoextensions>
    <!-- add>.ex1|.ex2</add -->
    <remove>.dat|.bin</remove>
  </videoextensions>

  <!-- Database Sharing/Synchronization -->
  <videodatabase>
    <type>mysql</type>
    <host>192.168.xxx.xxx</host>
    <port>3306</port>
    <user>xbmc</user>
    <pass>xxxxxxxx</pass>
    <name>xbmc_video</name>
  </videodatabase>
  <musicdatabase>
    <type>mysql</type>
    <host>192.168.xxx.xxx</host>
    <port>3306</port>
    <user>xbmc</user>
    <pass>xxxxxxxx</pass>
    <name>xbmc_music</name>
  </musicdatabase>
  <pathsubstitution>
    <substitute>
      <from>special://masterprofile/Thumbnails</from>
      <to>smb://yourserver/path/to/shared/Thumbnails</to>
    </substitute>
    <substitute>
      <from>special://profile/Thumbnails</from>
      <to>smb://yourserver/path/to/shared/Thumbnails</to>
    </substitute>
  </pathsubstitution>
</advancedsettings>

There’s a lot there, but I’ll explain it:

  • The sorttokens section explains which things to ignore when sorting titles. I don’t want “A Bug’s Life” to show up under “A” so I added that to the list of tokens. I think the only one in place by default is “The.”
  • The tvshowmatching section defines some regular expressions that help the TV show scraper figure out that “s01e01e02e03” in your folder structure corresponds to season 1, episodes 1 through 3.
  • The video/playcountminimumpercent setting basically says “don’t mark things as played or unplayed.” I don’t want checkmarks to show up by movies based on what I’ve watched.
  • The videoextensions setting is set to ignore some files that show up in VIDEO_TS rips but aren’t actually video files. In this case, I don’t have any .dat or .bin files that are actually video files, so I don’t want them indexed as videos.
  • The last few bits – videodatabase, musicdatabase, pathsubstitution – are for sharing the database across front ends. These are explained in those articles explaining how to set up MySQL as the central database. If you’re not doing that database sharing, omit those sections. If you’re sharing, make sure to update the IP addresses, passwords, and share paths to point to your shared locations.

Now that you have your advancedsettings.xml in place, delete the database and Thumbnails folders out of the userdata folder. They will be recreated as necessary when you restart XBMC.

Note: Using XBMC 10.1, I found the pathsubstitution for getting shared Thumbnails to work… didn’t work. Instead, I manually created a Thumbnails folder on my server in a shared location. I then manually went into the userdata folder at a command prompt and created a link to the shared location:

mklink /d Thumbnails \\yourserver\path\to\shared\Thumbnails

Fire up XBMC again. If you’re sharing the media library database, XBMC will now be using the shared locations.

Go into the system settings and find the section where you can get add-ons.You need to go to the Movie Metadata add-ons section and get the IMDb metadata add-on. This will let you use IMDb as the metadata source; by default it’s not installed.

Add your movie and TV sources to XBMC pointing to the Movie and TV shared folders, respectively. Do this one at a time and let the indexing of each source finish before adding the next; I found that if you interrupt the indexing process by adding a new source, the original indexing never completes. When you add each source, you get to choose what type of data is in each source (Movies, TV, etc.) and which scraper to use. Be sure to select the IMDb scraper for movies and the TheTVDB scraper for TV.

Once everything is indexed, go check out the results. Look at the list of movies and TV shows and make sure everything was properly picked up. You may need to add .nfo files or change some folder names in order to get things scraped right. If you do, you have the choice of trying to just remove one movie/show from the database and re-scraping that or removing the whole movie/TV source and re-indexing from scratch. I didn’t have a ton of luck cherry-picking to fix, so I reindexed my whole library about five times before I got it right.

The last thing you have to do is make it look pretty. Go to the system settings and find the skins. Install the MediaStream Redux skin. Now go visit your movies and TV and use the left/right arrows to get the view menu to pop up. By default the view is “List” – not pretty. Select a different view mode like “Media Info” and you’ll start seeing that super-nice display. Another option is to “show fanart” – do that. You’ll start seeing really nice backdrops related to the movie you’re currently selecting.

That all looks like a lot of work, but it’s actually not that bad. Basically it’s just cleaning up the directory structure and adding a few little XML files. XBMC does the rest of the work.

If you have any other XBMC front ends, just do the advancedsettings.xml placement and Thumbnail sharing steps. You don’t need to re-add the sources or set up the scrapers (I’d recommend against it). You do need to set up the skin. Whenever you add a new movie, tell your original XBMC front end to scan the new movie and add it to the database – once it’s there, the other front ends will find it.

I CAN’T OFFER YOU SUPPORT ON THIS. XBMC has a great wiki and some really nice forums – I recommend asking the experts if you have questions. My setup works for me and I hope this article can help you, but I can’t support it. If you’re interested in other aspects of my media center – my network setup, why I chose what I did, what tools I use to rip DVDs, etc., check out my media center overview.

home comments edit

When we moved into our house one of the things we noticed was that things didn’t quite heat or cool evenly. Certain rooms would be hotter than others. If you set the thermostat (downstairs) to a specific temperature, in winter the master bedroom (upstairs) would still be freezing; in the summer it’d be boiling. We were able to do a little bit of control using a complex trial-and-error system involving closing down various heat registers and tweaking dampers in the garage.

Besides that, the system wasn’t terribly efficient. When the heat kicked on, it was full-on. Same for the air conditioning. It’s no surprise since the furnace and A/C units installed were the bottom-end versions that usually get installed with new houses.

Eventually we got tired of that and last year I had Sky Heating install a brand new system. We got a Trane XL20i heat pump and a Trane XC80 furnace. One of the key reasons I picked those, besides the efficiency, was the ComfortLink system they support that allows them to communicate with each other. It allows the system to know, for example, when the heat pump is at the end of its efficiency and the furnace needs to kick on - rather than just being based entirely on outdoor temperature. A bit smarter than the average system.

After the install, we did notice a much more efficient use of natural gas and the temperatures evened out a bit… but we still had some pockets of heat (or cool) and I really wanted to be able to fix that.

Luckily, the ComfortLink system also allows support for the new Trane zone system that allows you to set up automatic temperature control in specific areas of your home. Rather than having one temperature for the “whole house,” you can have a different temperature in each zone. (This thing is so new, Trane doesn’t even have a page for it on their web site.) I had heard it was coming out at some point and was lucky enough to get in on the ground floor. A couple of weeks ago, Sky Heating brought one out and installed it.

It is awesome.

First, you get a new thermostat that’s capable of dealing with the more complex programming of the zones - the Trane XL950. This thing is a monster (in a good way). Wifi-enabled. Touch screen controls that let you see everything from the current zone temperatures/schedules to the weather forecast. Stick an SD card with some photos in the side and it’s also a picture frame. Really slick.

Trane XL950
Thermostat

Your manual dampers in the system then get replaced with electronic dampers that are wired into a “zone panel” that attaches to the furnace. The zone panel is responsible for dealing with the dampers and monitoring air flow.

Rather than tell you… here’s a video I made that shows you a bit more:

And another one, a testimonial I did for Sky Heating:

Temperatures in the house are way more consistent now. I can heat or cool just the rooms I’m in, and to the temperatures they should be. Note that it does take a week or so to “dial it in” and get it set up just the way you want it - adjusting the schedule, the temperatures in each zone, and so on. It’s well worth the effort, though, and I highly recommend it. If you’re in the market for something like this, or if you want your house to feel the way it’s supposed to - comfortable - look into it. If you’re in the Portland, OR area, give Sky Heating a call. You’ll be glad you did.

media comments edit

I won an iPad 2 at a raffle recently (a 16GB wifi-only that I upgraded to 32GB wifi-only) and finally got around to setting it up this weekend. So farI like it, but it’s not quite as intuitive as people (and marketing) have led me to believe.

Keep in mind that I come from a Windows/Android world. I have all Windows PCs at home (with the exception of my Synology NAS, which is basically a small Linux box). My phone, my wife’s phone, and my parents’ phones are all Android. While I’ve messed around with a Mac a bit, the majority of my Apple experience is with my 160GB iPod Classic and iTunes on Windows.

The first thing I hit was the initial setup. I know this is supposed to be the easiest thing in the world, but the things they ask, when you’re not familiar with Apple-speak, are not really clear. Do I want to set up iCloud? I don’t know. Does it cost me anything? Is it going to mess with any of the other sync services I’ve got going on to keep my Windows stuff up to date? If I say no now, will I be able to change it later or is this one of those questions that will hose you if you don’t get it right the first time? Nearly every “simple question” asked became a tiny research project to figure out exactly what it meant.

The next thing I ran into was the fact that apparently the USB ports in my primary computer at home are not powerful enough to charge the iPad. It’ll sync, but not charge. Not a huge deal, but surprising since every other USB device I own does just fine with it.

Once I got it all synced up (I’m only syncing books and movies since I don’t anticipate listening to music on it, at least not right now) I started getting a few apps and setting them up. That’s when I discovered that I have been utterly spoiled bySwype. I’ve been using Swype on my Android phone to enter text very quickly and easily so switching back to the hunt-and-peck style touch screen keyboard really sucked. (I’m reading now that you can get Swype for iOS, so I’m going to have to go do that.)

Another thing I discovered as I was setting things up: There’s no “back” button. On Android, I can do something like…

  • Start up an application.
  • Log in and go to the settings panel.
  • Decide I don’t want to do settings and hit the “back” key to get out.
  • Continue using the application.

On iPad, you are somewhat at the mercy of the application developer. If they don’t include a “back” button in the UI, the best you can do is hit the One Home Button and try starting out from scratch. This was really a pain as I was looking at the Epicurious app, where you search for recipes and maybe want to go back to the “home” screen or go back to see your search results. There seems to be a defect where the “back” button in the UI sometimes just disappears so you get stuck. You can’t get out. I admit not having that ubiquitous hardware “back” button actually sort of put me in a little panic mode a couple of times.

I noticed in the apps is that the settings seem to be “split” across in-app settings and global settings. Some settings you change by going into the application and managing them from there. Others you have to go into the “Settings” app to manage. I didn’t even discover them in the “Settings” app until really late in the game because there are so many settings categories that you have to scroll down to get to the apps section.

I had a hell of a time getting wifi sync to work. You can plug your iPad in and it is supposed to detect if your computer is running iTunes and then automatically sync. I checked the option in iTunes to allow wifi sync, but for some reason it just wasn’t working. I ended up finding a forum where people had to disable and re-enable UPnP on their router for it to work. I did that and magically things started functioning. Not sure how non-techies are supposed to figure that out.

Let’s just say the iPad experience is taking some getting used to.

One thing I wish it had was a multi-user setup. I want to use the iPad and set up GMail, Facebook, Twitter, and all that with my user accounts. But my wife also wants to use the iPad. Our only real option right now is to sign in and out of every app every time. That’s a pain in the ass to say the least. I mean, I can see that iPhone is probably not really a multi-user tool, and iPod could go either way… I even faked out iTunes years ago… but an iPad is like a family device. Sounds pretty multi-user to me.

But I got it set up, and so far I’m enjoying it. I did a Skype session with my mom and it was really smooth. I bought The Monster at the End of This Book and my daughter was sucked in so bad she kept trying to tear the iPad out of my hands so she could hold it all by herself. I bought iMovie so I can mess with some video editing (though I still have to figure out how to get pictures and video off the iPad and onto my computer). I can see that after I get settled into it, I’ll have a good time. It’s just going to take some real getting used to… and possibly me having to relinquish some of that control over my environment that I hold dear.