30 Rock 1×01 Pilot

“I’m Jack Donaghy, new VP of development for NBC GE Universal Kmart.”
“Oh, we own Kmart now?”
“No. So why are you dressed like we do?”

And with that, 30 Rock introduces us to one of its two most important characters and the relationship that defines the show. At its core, 30 Rock is a show about Liz Lemon and Jack Donaghy, the friendship that they have and how it affects every aspect of their lives.

30 Rock has been a favourite show of mine since it debuted in the fall of 2006. 30 Rock only made it to the pilot stage after Lorne Michaels made it a condition for letting Aaron Sorkin do research for Studio 60 On The Sunset Strip. Studio 60 indulged many of Sorkin’s worst habits and got cancelled at the end of the year, but 30 Rock remained, a hit with critics (if not quite audiences; Tina Fey once called it “the highest rated cable show on broadcast television”).

Now, 7 years later, 30 Rock is about to air its last episode (on January 31, 2013). It’s been the anchor of NBC’s Thursday night line up for the last few years, and I’ll be sad to see it go. So, as the show gets ready to air its 138th and final episode, I’ve decided to go back to the begining and re-watch every episode and review them along the way.

I’ll be reviewing the episodes with a forward looking eye, making a note of the origin of jokes, commenting on where the plot lines will go, and otherwise spoiling things as I go. In other words, don’t be upset when I bring up a joke a few weeks in advance, or tell you when a couple will break up. It’s a comedy show, not Lost. You’ll get over it.

Continue reading

TVShows and EZRSS.it

First and foremost, this post is about a technology. It is not about how to pirate TV shows or promoting such actions. It’s about using and modifying software.

A few years ago, a program for OS X called TVShows was released. It has two components. The first is a set of Ruby scripts which run every 30 minutes to probe TVRSS.net for TV show torrents, and then downloads the new episodes. The second is a GUI front end which shows a list of available shows and allows the user to subscribe. And it worked. It worked really well. Unlike some alternatives which need to be running constantly (wasting resources and screen real estate on something which should happen in the background) or would download torrents pointing to private trackers, TVShows downloaded new episodes, every time. Its background process was invoked by launchd every 30 minutes, meaning it took no resources when it wasn’t running and only ran for about 30 seconds (a ridiculously generous estimate) every hour. The program wasn’t feature complete, but it worked well for what it did. It has been stuck at 0.3.4 since May 2007, and version 1.0 has been promised for years, but the project had seen no movement since then. But that was fine, because it worked.

Until it didn’t.

A few months ago, TVRSS.net went offline. A message was shown saying that the site would return, but it never did. Since TVShows needed the TVRSS feeds to get new episodes, the program stopped working. Some weeks later, EZTV.it, a site which distributes TV show torrents, went down as well. After some new servers and a code update, the site rose from the ashes, and launched a new site as well: EZRSS.it. EZRSS was designed as a drop-in replacement for the now-defunct TVRSS.net. Its webpages respond to the same queries and give the same results.

Knowing what I know about languages like Ruby, I dove into the TVShows code and tried to understand its architecture. What I found was slightly confusing at first but very well laid out and ultimately easy to understand. I tried modifying my copy of the TVShows.rb script to use the new EZRSS pages. A simple Find & Replace worked really well, and I was able to get my copy to read the EZRSS feeds and try to download the torrents. Unfortunately, Ruby’s open-uri library seemed to have difficulty downloading the torrent files themselves. This was quite literally the first time I’d ever seriously looked at a Ruby script, and I wasn’t really able to figure out why open-uri was having trouble with these URIs.

Luckilly, someone much smarter than me could. On the TVShows Forums at Sourceforge, Adam Randall posted that he had fixed all the problems and had TVShows working again. He packaged it up and put it on his personal website, available at http://source.xaren.net/Applications/. I’ve tested the program and it works perfectly. I ran a diff between it and TVShows 0.3.4 and everything looks clean (sorry Adam, I just had to be sure). As Adam mentions, Ruby had issues with the unescaped [ and ] in the torrent URLs, so they were replaced with %5B and %5D respectively.

With Adam’s changes downloaded and installed, TVShows, or as he now calls it, EZTVShows, is working perfectly. I have some tips on how to use it better.

First, run the uninstall.sh script for the old TVShows before you install the new one. TVShows caches its script in the Application Support folder, so the changes Adam made won’t take effect if you don’t do this. To run it, open Terminal (it’s in Applications/Utilities), drag the uninstall.sh script onto the Terminal window, and hit Return. Drag the TVShows program to the Trash. If you no longer have the uninstall.sh file, a copy can be found in the eztvshows.tar.bz2 file from Adam’s site.

Second, there is a way to save your previous show subscriptions. Before you run the uninstall script, navigate to ~/Library/Application Support/TVShows in the Finder and copy the TVShows.plist file somewhere, like the Desktop. Next, run the uninstall script. Install Adam’s version into your Applications folder (by dragging the program there) and run it. You’ll see that none of your shows are selected. Close TVShows, and then go back to the ~/Library/Application Support/TVShows. Replace the TVShows.plist file that’s there with the one you copied earlier. Now, re-launch the TVShows program and you should see all your subscriptions return. However, the show list will be outdated, so click the Update List button to get the new version.

Adam did a great job with the changes and TVShows is working perfectly for me. Unfortunately, the original developer seems to have abandoned the project, and the latest version in the SVN repository on Sourceforge doesn’t build properly. If that can be fixed, there may be future versions of TVShows. But until then, 0.3.4 with the EZRSS changes, available from http://source.xaren.net/Applications/, is the latest, greatest version.

Exporting OmniOutliner files to Markdown

Over the past year, I’ve been learning to use two programs for nearly everything I do. The first is OmniOutliner Pro, which I used to take notes in my University lectures. Its outlines fit well with how my lectures were presented and my note-taking style, making it a near perfect tool. For non-note taking, I’ve been using John Gruber’s Markdown, which provides a simple formatting syntax, which is clear and easy to read before it’s processed, and a processor to convert the plain text into HTML.

I often use Markdown for quick note taking and even some long form writing (I’m using it to write this post, for instance). I love Markdown because all its files are just plain text; OmniOutliner’s files, while rather open, can’t come close to the openness of Markdown. Were something to happen to the Omni Group, or I were for some reason unable to use OmniOutliner, I’d like to be able to access my notes. What I really wanted was a way to get all of my school notes, stored in OmniOutliner format, exported to Markdown syntax. Continue reading

On Merging Two OS X Installations

Four years ago, I bought my first Mac, a 20″ iMac G5 which I named Zeus. It’s a great machine, but I’ve decided to sell it. As I talked about before, I bought a Macbook last January, which I named Hera (Zeus’ wife). In the last few months, I’ve noticed that Hera is so much more powerful than Zeus. With the rise in online Flash video, I’ve noticed Zeus stutter and be slow, but Hera has always been able to run it just fine. I decided it was time to put Zeus out to pasture and begin using Hera full time.

Now, Zeus’ slowness wasn’t the only reason. Whenever I travel, I bring Hera with me, which has meant using her (yes, I call it ‘her’) exclusively for weeks at a time when I’ve gone to Florida or New York or even to my parents’ place in London. In that time, using Hera exclusively has been wonderful. She’s fast and light and easy to carry. Her keyboard is wonderful, unlike the old-style one that came with Zeus.

I’m also moving to my parents’ place for a few months. Networking at their house has always been tough. I’m convinced the place acts as a Faraday Cage, so 802.11g wifi was very spotty in most places (Cell signal is also a problem). A few months ago they bought an Apple Airport Extreme, covering the house in 802.11n WiFi, which has much greater range. It’s a great fit for their house, and Hera works just fine on it. However, Zeus is too old to use it; he only can do 802.11g. The house used to have Cat5 cable running to the bedrooms, but they had it removed when they renovated their kitchen. The only place to put Zeus would be next to the router, in my mother’s office, which she likes to keep slightly neater than a pigsty. As much as I love my mother, I wouldn’t be able to work there. Without an internet connection, Zeus would be pretty useless.

So, the time came to get rid of Zeus and use Hera full time.

Continue reading

Working With TechSoup

As part of the final assignment in my Computer Science degree, I had to work with a non-profit in Toronto to help them with a technology issue they faced. I chose to work with TechSoup Canada, an organization which acts as a clearing house for large companies to donate copies of their software to the non-profit sector, saving those charities up to 95% of the cost of that software. It was a great experience and gave me an opportunity to see what issues are faced when working in the non-profit sector.

Continue reading