Archive for the 'General' Category

The saga of the television continues

A couple of weeks ago, Memorial Day Weekend actually, Jessi and I finally got a TV. I had been planning on a 42″ Olevia 720p display with no tuner, because it was an incredibly good deal on Newegg, but then I found an even better deal at Best Buy, and was able to get a 42″ Insignia 1080p display with a tuner for just about $100 more. So we’ve now got a 42″ 1080p TV hooked up to some cheap rabbit ears I picked up at Radio Shack. It’s pretty awesome just for the irony factor of that alone, but with those cheap rabbit ears we’re able to pick up a good 20 digital stations, about half of which are in HD as well as a number of analog stations. So we’ll be able to watch, for example, the Olympics in all their HD glory without the need for cable or satellite.

As I’ve mentioned before, my intention has been to set up some sort of HTPC to manage the content for the TV. I went back and forth before deciding on ElGato’s EyeTV on a Mac Mini over MythTV on a PC, but in the meantime I didn’t really want to spend the $500+ on a mini, so I set up an old gaming PC I built a couple years ago and hooked it up to the VGA input on the TV. At first, just to try and get things going quickly I installed Ubuntu on it. This proved to not really work at all. Ubuntu could see, but not use the integrated sound card on my motherboard, and video without sound isn’t very fun. I probably could have fixed that with a little tweaking, but there was a bigger problem: my 5-ish year old Athlon 64 3000+ just didn’t appear to be up to the task of playing HD video. I decided to give it a real test: a 1080p rip of the BluRay version of The Fifth Element in a matroska container using H.264 encoding. Basically, it just didn’t work at all. So I decided to scrap that idea and just set it up with MythTV for now so we can at least watch TV with basic PVR options.

I threw an Gentoo on it, and got MythTV running (with sound!) and started planning out the new system to replace it. Then I figured, what the hell, my entirely system from the kernel to mplayer has been compiled from source and optimized for the Athlon 64 architecture, I might as well give the HD video another shot. Amazingly, mplayer opened the 1080p matroska video and played it. Success! It did have some issues with the audio going out of sync, but some command line flags fixed that (’-cache 8192 -autosync 1′ is what ended up working). So, it appears, a 1.8 GHz single core Athlon 64 can decode 1080p H.264 in real time! This discovery vastly dropped the minimum hardware requirements, and thus the cost, of a MythTV based HTPC so I decided to give that option another look. A bit of research later, and I was able to spec out a full HTPC with HDMI output and all that good stuff for just about $200.

It’s hard to argue with those numbers, so it looks like I will be going with a MythTV solution after all. I’ll be using a 2.2 GHz dual-core Athlon 64 X2, which my experiment suggests will be more than adequate for what I need and, of course, powering it all with a fully optimized Gentoo install. I’m going to keep the old gaming PC running as my backend for all the storage so I don’t need to cram too much into the tiny little case I’m getting for the HTPC, and trying to figure out the final design for that system is proving to be an interesting problem in it’s own right, but I’ll write more about that later in what I’m sure will be a fascinating exposition on the relative merits of various advanced filesystems and the several different UNIX-like operating systems that love them.

A big new project goes live


It’s been a while since I’ve been able to announce a big new project. Not because I haven’t had any, but because everything I’ve been working on lately has been so large that nothing is quite ready to go live yet. But finally, I get to announce a big project that I recently finished: the Becoming MOBOS video blog. As I’m sure many of you from the Boston area are aware, there is a new Mandarin Oriental that’s been under construction down by the Pru. They hired me to create an internal video blog for them. Unfortunately, since it’s internal, I can’t link to it, but the screenshot to the right links to a full-size, albeit redacted, image. It’s a WordPress based blog using a verstion of WPelements.com’s MassiveNews theme customized by your truly. I also used FlowPlayer to provide the Flash video playback capabilities. All in all, I think it turned out to be a pretty slick site.

That’s not the only news, however. In preparation for announcing the Becoming MOBOS site I’ve been doing a little work sprucing up my own website. So I also get to announce a new version of the dy/dx tech website (I also changed hosts for it, so you may need to wait for the DNS to propagate if you’re still seeing the old site). The overall look of the site is the same as before, but I’ve removed some rather pointless elements such as the Google Map that used to be on the front page. In it’s place is now a slideshow of screenshots from my portfolio, which I think is a much better use of the space. The majority of the changes, however, are under the hood. As you may recall, I redeveloped the site using Django a while ago. Since then I’ve spent a lot more time with Django and know a lot more about it, so I completely redeveloped the site (using the newforms-admin branch and was able to make a lot of improvements to the code, and basically leave it better positioned to integrate more features in the future. Among other things, I plan on migrating this blog to a Django-based solution and integrating it into the dy/dx tech website to some extent. I’ve been working heavily with Django for the past several months, and I just keep liking it more and more. It makes every part of my job so much more enjoyable and, in a lot of cases, faster. Be on the lookout for another project going live in the next couple weeks: this one will be Django-based and will be very public, and, I predict, very popular.

I did it!

Finally, after five failed attempts, I’ve managed to get my California license converted to a Massachusetts one. On Friday Jessi, who’s been using her Illinois license for the past 4 years in MA, and I drove up to the RMV in Lowell (we’d had enough with the one in Boston) and actually managed to get our licenses converted. At the moment we’ve only got temporary ones, but soon I should, for the first time in my life, have a license that actually has my current address on it! Now I just have to hope that my new Massachusetts license retains my motorcycle endorsement, because the temporary license they gave me has no indication of that. I’m not going to be very happy if, after all that, I only have a half-functional license. Especially if they want to try and make me take the motorcycle test again.

Boom! No web site for you!

Currently I’ve got two projects hosted on WebFaction servers. So far, I really like them. As managed hosts go, they’re probably the best I’ve worked with, and they certainly make life very easy when building Django powered sites.

Today I got an email from one of the clients whose project is hosted on WebFaction saying that their site is down. So I checked it out, and while I was able to access it, it was extremely slow, to the point where a less forgiving browser/LAN setup might cause it to time out. So I fired off a support ticket to WebFaction, and within a couple minutes, not only was the site back up to speed, but I was provided with a very good explanation for why my server was having problems.

Apparently there was an explosion at one of WebFaction’s data centers this weekend. It took out power to the data center, but fortunately no one was hurt and none of the servers were damaged. Obviously, there have been some interruptions in service for the servers in that data center (which includes both of my WebFaction projects), but they’ve already gotten a significant number of the servers back online (though only one of mine).

Amazingly, this is actually the second time I’ve had a server taken out by an explosion at a data center. The first time was with a hosted Microsoft Exchange server with a hosting company in London.

It really sucks having sites down, especially critical ones (fortunately only one of the projects I have hosted with them is critical, and it’s the one that’s back up already), but as reasons for downtime go, you have to admit that an explosion is a pretty good one.

Some fairly large computer news

I’ve been working away from home more and more often lately, and the 13″ screen on my MacBook has been feeling more and more restrictive. So I decided to replace it with a something bigger. Obvoiusly my first thought was a MacBook Pro, but they’re just so expenssive that it’s hard to justify the cost. So instead, I bought a ThinkPad. I got a T61 with a 15″ WSXGA+ screen, 802.11n, dual-layer dvd burner, 2.5 GHz Core2Duo… basically the exact same features (and even hardware probably) as a MacBook pro. The biggest difference? I spent less than $1000 dollars on it.

This is actually my second ThinkPad; I had an x61 that I bought in college and actually used as my main computer when I first moved to Boston because my PowerMac was in-transit and I didn’t have anything else. I’ve also been impressed with the ThinkPad line, the higher end ones have very nice build quality, and they’re popular enough with the Linux crowd to have good Linux support. So, for the second time in my life, I’m running Linux as my main OS (specifically Gentoo Linux on kernel 2.6.25 with the tuxonice patches).

The biggest issue with using Linux was finding the appropriate replacements for my commonly used apps. Most of them were Easy: Firefox stays the same, I use Google Apps to host my email so no problems there either. For instant messaging I was planning on using Pidgin, but ended up going with Kopete because after trying it out, I just like it better (that’s right, I’m using KDE, 3.5 for now). The biggest challenge, was trying to find something to replace TextMate for coding in. I absolutely love TextMate, and take advantage of a lot of its advanced features all the time. Fortunately, back when I was a CS student, I got nice and familiar with Emacs, and was well aware that, even if the functionality I wanted wasn’t built in, someone’s probably created an add-on for it, and if not it would be pretty simple for me to do it myself. Turns out I was right.

I haven’t completed all my Emacs modification yet, but so far just two little scripts have given me most of what I was looking for. First was yasnippet, which provides a snippet feature that works in pretty much the exact same was as TextMate’s. Someone even wrote a script that will download TextMate bundles directly from the repository and covert the snippets they contain to work with yasnippet. You can’t do much better than that. I’m also using emacs-textmate which provides an Emacs minor mode that emulates some more of TextMate’s behaviors; specifically, it adds in the ability to automatically insert paired characters, so if you type ‘(’ it automatically inserts ‘)’, and handles deleting them gracefully as well.

There were a few other features that I use extensively in TextMate as well that weren’t provided by either of these add-ons. Fortunately, it was relatively simple for me to implement them myself (with a little help from a friendly Emacs guru on the Gentoo forums) and patch emacs-textmate to provide it. Specifically, I duplicated TextMate’s auto indent feature by adding an extra keybinding to emacs-textmate to bind the return key to the built-in Emacs function newline-and-indent. I also bound M- to a new function of my own creation defined thusly:

(defun open-next-line()
  (interactive)
  (move-end-of-line nil)
  (newline-and-indent))

This duplicates the behavior of command-return in TextMate, which is pretty much the same as ‘o’ in vi[m]. I’m still working on how to duplicate command-shift-return, which inserts the appropriate line ending character based on language (’;’ for C and C-like languages, ‘:’ for Python, &c.) and then opens and goes to the next line. But I don’t think that will be too hard once I learn a little more elisp. After that I just need to figure out how to duplicate Textmate’s tag closing function, which is a huge time-saver when coding HTML.

All in all, I’m quite happy with my new computer. Things may not be quite as pretty as in OS X, but they can be if I just put a little work in to making them so (I’ve already got e17 installed, which comes close and with some more tweaking may replace KDE as my default environment). As much as I love Mac OS X, there is definitely a strong argument to be made for Linux, at least for people who aren’t afraid to get their hands dirty with the command line and a good old text editor. Even with just a couple days spent adjusting the system, I think it’s already at a point where I could see using it full time, maybe even prefer it to OS X. Which is really saying something when you consider that I’ve been a Mac user for about 24 years.

I love Django

I’m currently working on a fairly large Django project that I think I’ve mentioned a couple times in the past. In that Django project there is a Person model and an Organization model. Both Persons and Organizations have email addresses. Organizations are related to Sites (through a ManyToMany field), but Persons are not (they’re related to Organizations through an intermediary table). I’m currently attempting to create a contact form, so that people can email either a Person or an Organization using newforms.

For security reasons, we don’t want the user to actually see the email address, just the name of the Organization or Person. Fortunately, newforms has the ModelChoiceField class that you pass a queryset of options. In keeping with DRY principles, I want to be able to use a single Form regardless of whether the person is trying to email a Person or an Organization (both models have a field named ‘email_address’). Unfortunately, this is where I ran into my first problem: ModelChoiceField doesn’t really allow you to define the queryset dynamically, you have to define it in the form definition. Luckily I found this blog entry which provides a method to re-define the queryset in the __init__() method which allows you to change it based on the HttpRequest object. My next problem was that I only want the user to be able to email Organizations and Persons on the current Site. Since Organizations are directly related to Sites I just used the CurrentSiteManager. However since People are not directly related to Sites, and are instead related only to Organizations (through an intermediary table), I couldn’t do this. Instead, I decided to try this crazy bit of code:

Person.objects.filter(persontoorganization_map__organization__in=Organization.on_site.all())

Amazingly, it just worked exactly as I would have wanted it to. No fuss, no problems, just a queryset of Persons related to the current site. Go Django!

Getting there with the TV

I posted a while ago about my plans for our TV setup. In the intervening months I’ve made a few changes to my plans and taken a big step towards getting it all set up.

The biggest change is that I’ve removed MythTV from the picture. Originally I was planning on either building my own MythTV powered HTPC or buying a TVease Zodiac MythTV system. It appears that TVease has gone out of business, so that’s now out of the question. But in the course of my research on building a MythTV box, I realized that it would be a similar price and far far easier for me to just buy my HDHomeRun through Elgato and get their EyeTV software with it. I can then just run it on a Mac Mini using Pyetv to control it all through Front Row.

With that in mind, I’ve now purchased my HDHomeRun from Elgato, and am currently watching the Detroit and Dallas in the Stanley Cup playoff live in a window next to my browser as I write this. We’ve also get it scheduled to automatically record Lost and Grey’s Anatomy.

So far I really like the EyeTV software. With the HDHomeRun we’ve got two tuners so we can do picture in picture and/or record one thing while watching another (or just record two shows simultaneously). I’ve had no problems or complains with either the software or hardware so far, though I have had a few problems actually introduced by my computers. For some reason, my iMac occassionally loses its AirPort connection which means it loses its connection to the HDHomeRun. As a result, our recording of the latest Grey’s Anatomy stopped after 7 minutes. Fortunately this won’t be a problem with the final setup because I’ll just connect the Mini to the network via ethernet. On the plus side, the 802.11n network I setup for my iMac gives me no problems watching two HD shows simultaneously. The other problem we’ve run into is that occasionally the reception isn’t that good. But that’s easily fixable by just getting a better antenna, which won’t be hard to do since we’re currently using some cheapo rabbit ears.

All in all, I’m pretty confident that this is going to work out well. And it will be easily upgradeable if we decide we want to get cable and/or sattelite (probably sattelite because if we’re paying all that money I’m going to want Setanta Sports).

Last night at the Apple Store

AppleSo as I mentioned, I was at the opening of the new Boston Apple Store on Boyleston St. last night. Unfortunately I was a little late showing up and didn’t get my free t-shirt. :(

As I mentioned, it’s an extremely nice location with some extremely cool design. The entire top floor (of three) is dedicated to support with a gigantic Genius Bar that is apparently able to support several thousand people per day, and a ton of iMacs lining the walls where you can get one on one help/tutoring (they call it their One-to-One program). Another cool new features they’re rolling out (or possible already had and I just haven’t been paying attention) is their personal shopping service. You can make an appointment to show up and have, essentially, a personal shopper to help you out with any questions or help you might need while shopping. Seems like a pretty cool idea, and I imagine it will be very useful for the parents who want to get their kid a new computer or something but really have no idea what they’re looking for.

All in all, I think this store is going to be a huge success. Especially positioned, as it is, directly across the street from the Prudential Center and the soon-to-be-opened Mandarin Oriental hotel. It will definitely be a little more pleasant to visit than the Cambridgeside location, though parking won’t be nearly as easy so you’ll probably start seeing more people with big iMac boxes on the T…

And in closing, these people weren’t on the guest list and therefore aren’t as cool as me:
These people aren't as cool as me.

(Yes, both pictures in this post were taken with my iPhone.)

Apple Store Boyleston

I’m currently at the grand opening event of Apple’s new flagship retail store in Boston. I’ve only just gotten here, but so far I’ve hot to say that I’m impressed. It’s something like a cross between the 5th Ave. location in New York and the Miracle Mile location in Chicago. In short: three stories of beautiful, glassy architecture with a huge skylight topping it off and the iconic white Apple logo overlooking the Pru. Also, they’re giving me free beer and appetizers, so far so good. I’ll write more about itlater, for now I’ll just enjoy it, and play with the toys.

And another thing

Why is everything that disrupts parking labelled an ‘emergency’ around here? When it snows enough to disrupt parking it’s a ’snow emergency’. When they’re forbidding parking so that they can paint lines on the street it’s an ‘emergency’. Last night we walked into Porter Square for dinner and passed no fewer than two different ‘emergencies’: ‘Emergency! We’re painting lines on the street! Please file calmly, but quickly to the nearest exit!’, ‘Emergency! We’ve torn up the sidewalk! Please …walk around it!’.

Seriously, people, these are not emergencies… Ok, there’s a vague case for the ’snow emergency’, but there is absolutely no excuse for labeling an event that has been planned for weeks if not months as an emergency.