Browser Add-ons, Mozilla, Mozilla Firefox, OPML Support, Programming

OPML Support updated for Firefox 20

I’ve just published an update to my OPML Support Firefox extension for the first time in three years. The extension previously added an OPML button to the toolbar in the Bookmarks Manager, but as of Firefox 20, the button disappears because of a change to the way that the Bookmarks Manager’s toolbar is assembled. Version 3 of OPML Support moves the Import OPML and Export OPML options into the existing Backup/Import button’s menu.

opml-menu-mac

Thanks to the OPML Support users who alerted me to the problem via email and in the comments here, since I don’t often have occasion to check whether my buttons are disappearing.

Standard
Automattic, Programming

The Plight of the Self-Taught Programmer

At each company-wide Automattic meetup, every employee is required to give a flash talk on a topic of his or her choosing. At our meetup last September, I gave a short overview of some of the programming terms I don’t pronounce correctly in my head, since I initially learned them on my own and took a guess at their pronunciation. Here are the slides from that fateful day.

The Plight of the Self-Taught Programmer: Chris Finke

a.k.a. Is it pronounced GIF or GIF?

GIF: A picture of a JIF peanut butter jar.

I say “GIF”, but apparently lots of other people pronounce it “GIF”.

animated-jif

Get it?

SQL: My Sequel 2. This time, it's personal.

I learned it as Ess-Cue-Ell and was very confused the first time someone asked me if I had worked with my sequel. “My sequel to what?”

/etc or Etsy?

Still not sure about this one. Thankfully, I never have to say it out loud.

C#: C Sharp or C Pound?

I remember reading a newsgroup post where someone was ridiculed for calling it “C Pound.” That someone was not me, but it could have been.

GUI: A hand covered in something gooey.

Gee-You-Eye is not as fun as the correct gooey pronunciation.

Apple's Operating System: Mackossex.

My college roommate was a diehard Apple fan and especially loved their operating system, “Mackossex” (Mac OS X).

XPI: Zippy.

Firefox extensions use a file format called XPI, pronounced “zippy”, not “ex-pee-eye.”

LaTeX is not the same as latex.

For years, I thought that LaTeX was spoken the same as latex until I heard a professor mention that he had used “layteck” to typeset his papers. In my senior year of college. Dodged a bullet there.

Egill: Not a chance.

I have a coworker from Iceland named Egill. It’s not “Ee-gill”, “egg-ill”, or “Ay-gill”. It doesn’t even have an L-sound if you say it properly, and I’ve been informed that because I’m not from Iceland, I probably can’t physically pronounce it.

Finke = Fing-key. Rhymes with inky. And slinky.

As a public service, here’s a pronunciation guide to my name.

Standard
Life

I was talking with my wife tonight about the shutdown of Google Reader; she uses it heavily and relies on a number of features that aren’t all found in the alternatives. She was worried that on July 1st, she’ll be forced to settle for something that doesn’t meet all of her needs. My reply? “The worst case scenario is that you’ll have to tell me what you want, and I’ll build it for you.”

Being a programmer in the early twenty-first century is like being a blacksmith in the early twentieth century. No matter what is available to the public at large, you have the advantage of being able to build your own tools.

In which I forge a simile

Aside
JavaScript, Programming, Typo.js

A practical application of Typo.js

I released Typo.js about two years ago as a pure JavaScript implementation of the Hunspell spellchecker. I’ve been using it in Comment Snob for Chrome, but I haven’t seen many other projects using it. (JavaScript spellchecking is a very narrow niche, to be fair.)

A few days ago, however, I was made aware of a new project using Typo.js: NoTex. It’s a browser-based reStructuredText editor.

NoTex screenshot

The author, Hasan Karahan, has used Typo.js to support 87 (!) different dictionaries. I’m happy to report that spellchecking in the app is smooth and indistinguishable from the native browser spellchecker.

You can follow NoTex’s development on GitHub.

Standard
Life

Welcome to Twenty Thirteen

No, not the year, the theme! Twenty Thirteen will be the default theme in WordPress 3.6, but in order to help test it ahead of time, I’ve already enabled the trunk version of it here on my blog. I also took a few minutes to customize one of the default headers so as to give it a little personal flair; see if you can spot the super-subtle changes I made!

For posterity, and for anyone reading this via a feed reader, here’s how my site looks right now:

My blog with Twenty Thirteen enabled and a customized version of the default header.

It’s a beautiful (and more importantly, readable) theme designed by Joen Asmussen.

If you want to follow Twenty Thirteen’s development, subscribe to the Twenty Thirteen tag on the Make WordPress Core blog.

Standard
Programming

How to stream your ripped DVDs to TiVo with metadata and commentaries

pyTivo is a tool that allows you to stream video files from your computer to your TiVo. It has served me well for watching home movies, but when I decided to rip my DVD collection and watch movies via TiVo instead of using the physical discs, I found two problems:

  1. No metadata. All I see on TiVo is the title (which is just the filename of the video). I’d like to see the year the movie came out, the MPAA rating, the description, etc. just like I do for movies I recorded off of TV.
  2. No commentary tracks. The best part of owning a physical DVD is access to the commentary track(s); unfortunately, pyTivo isn’t able to stream the video in such a way that alternate audio can be selected via TiVo’s built-in audio selection, so the default leaves you with just the first audio track.

I’ve written two scripts to fix these problems, and they’re available at GitHub.

pytivo_metadata.py

pyTivo uses metadata files to supply information to the TiVo about each video file, like the description or the year the movie came out. pytivo_metadata.py generates metadata files for all videos in a given directory (and subdirectories) so you don’t have to write them yourself.

Here’s an example of a filename from a ripped DVD:

/path/to/movies/The Family Man.m4v

This is the movie “The Family Man,” starring Nicolas Cage. Without any metadata, this is what the movie looks like on TiVo:

IMG_6717

Running pytivo_metadata.py /path/to/movies/ will query The Open Movie Database API for information on all videos in that directory that don’t have metadata files; here’s the metadata that pytivo_metadata.py will save to The Family Man.m4v.txt:

title : The Family Man
vProgramGenre : Comedy
vProgramGenre : Drama
vProgramGenre : Romance
isEpisode : false
year : 2000
movieYear : 2000
description : A fast-lane investment broker, offered the opportunity to see how the other half lives, wakes up to find that his sports car and girlfriend have become a mini-van and wife.
mpaaRating : P3
vActor : Nicolas Cage
vActor : Téa Leoni
vActor : Don Cheadle
vActor : Jeremy Piven
vDirector : Brett Ratner
vWriter : David Diamond
vWriter : David Weissman

pyTivo will automatically use this file to supply the metadata for The Family Man.m4v to TiVo.

IMG_6718

(See the pyTivo wiki for more info on the metadata file format.)

No guarantees are made regarding the correct movie being returned from the API, so maybe do a cursory check of that after running the script. Or don’t. Whatever.

pytivo_commentary.py

If you rip a DVD and include multiple audio tracks in the file, you can stream each of those tracks via pyTivo by using pytivo_commentary.py.

If you’re using Handbrake, go to the Audio tab and add each commentary track as an additional entry:

Screen Shot 2013-01-21 at 8.29.54 PM

Then, add a note to the filename to let pytivo_commentary.py know that there’s a commentary track available:

The Family Man (Commentary).m4v

If the movie has more than one commentary, name it like this:

The Family Man (Commentary x 3).m4v

(Yes, The Family Man, starring Nicolas Cage, does have three commentary tracks; one of them is completely dedicated to the music score. What a country!)

pytivo_commentary.py will then generate multiple copies of the video and metadata file (one for each commentary) and add “Commentary #1″ (or #2 or #3) to each title. The additional video files are only hardlinks to the original, so no additional disk space is needed.

Screen Shot 2013-01-21 at 8.58.59 PM

Then, add this line to the [Server] section of your pyTivo.conf (and restart the pyTivo service):

audio_lang=commentary

This causes pyTivo to choose the first audio track it can find that includes the label commentary. In the metadata file for each commentary track, you’ll see a line like this:

Override_mapAudio 0.2 : commentary

This tells pyTivo to explicitly use the label commentary for the second audio track instead of whatever the label was which means that when you stream this video, pyTivo will send the commentary audio track instead of the original audio. Because the metadata file for the non-commentary version doesn’t have this override, pyTivo will send the first audio track.

Conclusion

There you have it; now you can rip your DVDs to a hard drive, stream them to your TiVo, listen to the commentaries, and never have to worry about scratches, extra remotes, or mandatory previews before your movie.

These scripts were tested with the wmcbrine version of pyTivo (specifically, the version pulled as of this commit).

The scripts and their required module (pytivo_utilities.py) are available on GitHub in the pyTivo Utilities repository.

Standard
Automattic, Blogging, Life, WordPress

Work with me here.

In 2012, we committed and deployed changes to WordPress.com, on average, every 26 minutes. Why so long between deploys? Because we don’t have enough people working here! Help change that by coming to work with us. We’re looking to hire around 60 people this year; if my math is correct, that’s a lot!

Do you like the Internet? Working from home (or coffee shops or co-working spaces or libraries or your friend’s house or a grassy area with Wi-Fi access)? Making a difference for millions of users? Being part of a profitable company? Retina displays? Work with us.

Do any of these places sound like interesting locations for week-long team meetups? Hawaii, New Zealand, Mexico, Spain, New York City, Miami, San Francisco, Iceland, Boston, Las Vegas, San Diego, Italy, Berlin, Amsterdam, Montreal, Portugal, New Orleans, Chicago, Winnipeg, or Montevideo, Uruguay? Work with us. (And that’s just a selection of 2012 meetup locations.)

Are you a backend developer? Work with us. Mobile developer? Work with us. Customer service and support? Work with us. Designer? Work with us. Front-end developer? Work with us. Wordsmith? Work with us. Sysadmin? Work with us.

Do you dislike cubicles? Dress codes? Commuting? Working 9-5? Work with us.

Working at Automattic is the best job I’ve ever had, and I’ve even worked at AOL, so you know that it must be good. Won’t you come work with me and treat yourself to the best job you’ve ever had?

Standard
Apple, Bug Evangelism, iPhone

iPhone 5 shuts off when opening Camera

I’ve experienced a strange iPhone 5 or iOS 6.0.2 bug three times in the last week. Here are the steps to reproduce:

  1. Use phone until battery level is at the most 40%.
  2. In in an environment with a temperature below 50º Fahrenheit, play music through the phone speakers for at least 30 minutes.
  3. Confirm that the battery level is above 15%.
  4. Open Camera app, with or without stopping the music playback.
  5. Phone immediately shuts off as if the battery was dead.
  6. Attempt to turn phone on; screen shows “no battery” symbol.
  7. Plug phone in to a power source. The phone will turn back on after a few seconds, showing at least 15% battery power.

These specific steps are the result of me using my phone as a stereo while I work on projects in my garage in Minnesota in the winter.

I’ve reported the problem to Apple; has anyone else experienced this? I don’t know if the temperature, music playback, or actual battery level are relevant, but it’s definitely due to opening Camera.

Standard