Photographic Bundling

Canon 24mm Tilt-Shift lens, 1-week rental: $40
Credit left on ticket for T from a couple weeks ago: ($6)
Prudential Observatory, 50th floor, admission price: $12*
Unused AmEx gift card: ($100)
Parking in work garage with shuttle to downtown Boston: Free
Discovering more than a week of vacation time that must be used before January 1: Priceless.

* Excludes student discount. My student ID, it turns out, does not expire. But probably worth $2 to not get thrown out.

SLRs with Video

The Canon 5D Mark II, and now the Canon 7D, are digital SLRs that have HD video capabilities. Video on a camera is nothing new, and “prosumer” point-and-shoot cameras have been able to do HD for a while now. SLRs are different, for two reasons:

  • Much like Live View (the ability to preview the image on the LCD), it shouldn’t be possible. An SLR has a mirror that sits in front of the sensor (formerly film, now CCD/CMOS), which redirects the image up into the viewfinder. When you squeeze the shutter, the mirror is lifted, and dropped as soon as the shutter closes. This is why you have to hold SLRs up to your eye while composing a shot. (And why you can’t see through the viewfinder while the shutter is open.)
  • SLRs have nice lenses allowing things like low-light performance and shallow depths of field.

Between HD and the high-quality optics, you can end up with some amazing films that look straight out of Hollywood. (Except that it’s first-generation quality and often has onboard sound… But I digress.)

I passed over the Rebel T1i as an unneeded frivolity, even though it greatly expands my ISO range (improving low-light performance) and adds full HD video. I just stumbled across a neat post by Dan Chung, who got his hands on one of the first production Canon 7D cameras, and produced Another Night in Beijing, the first of the two videos on that page.

Now I’m really regretting not having purchased the T1i when it was $800 with a $300 printer included…

On Parking

Uncrate recently posted about Parking Tickets, an ingenious* little way for those of us who are passive-aggressive to inform people of their need to practice their parking skills a bit more.

* Why does adding “in” in front of “genius” require an “o” be inserted in the middle? For that matter, why does adding “in” in front of “genius” make “genius” an adjective, not negate it?

I’m Just Saying

I’ve probably posted too often here about people invoking their First Amendment rights in situations that make no sense. The newspaper doesn’t run their crazy letter to the editor, or a private website takes down their threats to kill the President (!!!) and it’s “violating their First Amendment rights.” It drives me out of my mind that these people have clearly never actually taken the time to read the First Amendment, which pretty obviously does not pertain to newspapers exercising editorial standards or websites not wanting to be seen as promoting domestic terrorism. (And, actually, its restriction on the abridging of free speech doesn’t apply to newspapers or websites at all, unless they’re government-run.)

But I’ve found another pet peeve. Someone starts a post on a site somewhere expressing a controversial opinion or complaining about something. Others chime in and disagree with them. And suddenly, the original poster gets all flustered. They were expressing their opinion, and think it’s really out of line for people to disagree with them.

I never understood their reasoning, though. Aren’t the people replying to your opinion also expressing their opinion? Why is yours okay and theirs is out of line?

I hope you agree with me about this. If you don’t, I don’t want to hear it, because I’m expressing my opinion.


I just discovered sIFR, which has apparently been around for a long time. It’s really nifty, actually. A lot of the time you want to display headers on your site formatted in some fancy font, but chances are good that most of your  visitors won’t have it. The general solution is to use an image or Flash app to display it, but this causes usability and SEO problems, since the visually-impaired and bots can’t read the text, since it’s not text at all.

sIFR solves this by having your page be normally-formatted, but using JavaScript to overlay a Flash app with the desired font where the browser supports this. It seems like it was designed by people like me who hate Flash apps and images of text all over the page, because it’s incredibly slick and you wouldn’t know it was happening unless you happen to notice a fancy font being displayed inline on a page.

Good Enough is Good Enough

Often, it seems that quality and quantity are inversely proportional. You can spend all day doing lots of really quick things poorly, or you can spend all day doing one thing really well. Most people would tell you that quality is really important, so you should spend all day doing one thing really well.

Sometimes, I’m sure those people are right. If you’re assembling an airplane, please take as much time as you need. But increasingly, I find the focus on perfection to be an obstacle. Guy Kawasaki is famous for his, “Don’t worry, be crappy” quote. He doesn’t mean that you should show up to work late, give a half-hearted attempt at doing your job, take a 2-hour lunch, and then leave early. The point is just that you should focus on getting something done, and worry about perfecting things when it becomes necessary.

There are really a lot of reasons to focus on being “good enough”:

  • Why try to “finish” something before getting user feedback or full testing? From the PlentyOfFish Architecture article on comes this quote: “The development process is: come up with an idea. Throw it up within 24 hours. It kind of half works. See what user response is by looking at what they actually do on the site.” Maybe they like it, and then you can perfect it. Maybe they find bugs you would have missed anyway, and you can fix them. Or maybe they hate it, so you take the feature down, not having wasted too much time perfecting it in the first place.
  • Why waste time fine-tuning something that doesn’t need it? As a mundane example, I added an admin tool to something at work, and tried to figure out how to gracefully handle the fact that it would do an awful full table scan against one of our biggest tables because it depended on running a SELECT on a field with no index. The solution? Do nothing. The tool is used infrequently enough that we just wait a few seconds for the results. It’s not user-facing, and it doesn’t impact the site performance, just the particular page. Adding the proper indexes would have taken considerably more time and yet manifested itself by shaving half a second off the load time of a tool used a couple times a week. Why bother?
  • Don’t spend too much time on the small things. Just as a pastry chef wouldn’t spend all day keeping the front of his store immaculate, it’s not really my place to pour copious resources into perfecting an unimportant feature. Build something that works. If it’s an important task, do it very well. If not, it’s taking time away from you doing a better job on something more important. (Don’t mistake this with doing a bad job. The pastry chef with a small shop wouldn’t allow the front of the shop to become a disgusting mess that scared customers away, but he shouldn’t spent twenty hours a week polishing the floor and shampooing the carpets, either. Do a good enough job on the non-priorities, and focus on doing a really good job on what you do best.)
  • You might not even know what you’re building. I’m doing some rapid prototyping of some new features, and the specifications change considerably all the time. This is sort of an extension of the first point, really. As we flesh out the prototype a bit more, they firm up some features a little bit more. Just as you wouldn’t work on hanging the blinds while you were still putting up the frame of a house, it’s not a good use of your time to work on tweaking the performance of features that are still being developed. Again, don’t do a bad job and build something that can never scale without being reimplemented from scratch, because you’re shooting yourself in the foot.  But don’t do a perfect job building the most efficient interface ever on something that has an excellent change of being scrapped.

Fairly tangential to this, and yet the same general concept, is the Pareto principle (the 80/20 rule). What I find fascinating is the areas where it’s considerably more distorted. Spam is a good example, really, of something that’s more like the 99.9/0.1 rule. Both here and at work, spam has been a massive problem. But if you focus on solving the 99.9% of spammers, it turns out to be extremely simple. The ability to block registrations from an IP or range, the ability to quarantine posts containing certain keywords, and a throttle on what new users can do has practically eliminated spam as a concern. The people that would sign up and start spam-bombing every user on the site still try every now and again, but find that it doesn’t work.

We spent a while discussing some of these things. “If we block their IP, won’t they just use a proxy server? Should the limit be x or y messages, and over what time period?” At the end of the day, though, an unreasonably huge amount of spam can be stopped by a few really basic rules. In theory, spammers can just get a new IP, or can exploit a few things we identified as possible vulnerabilities. In reality, a handful of very basic features made spam volume drop orders of magnitude. Rather than spending all day working through a growing backlog of spammers, we click a few buttons every now and then to delete the few that bother. It’s somewhat like greylisting with SMTP: in theory, spammers have had years to work around it, and it should take 30 minutes of coding to make their spam software pass greylisting. In reality, something like 95% of people who get graylisted (at an inbox that gets 100% spam) either don’t try again at all, or they try again with totally different information and get rejected again.

I feel compelled to repeat that none of this is saying you should do anything but your best. You should always do your best, but often, doing your best means that you do a good enough (still acceptable) job on the things that you need to do that distract you from what actually creates value. If you slack off or cut too many corners, you’re not doing good enough. Thus doing good enough is necessarily good enough.

Web Templates

Way back when, was the place for free templates. Most were public domain or had GPL-type licenses, and it was a great way to get a site up and running with an attractive layout.

OSWD hasn’t been actively maintained for a long time, but and have replaced it. Quality varies; some are amazing, some are mediocre. But for the price, you can’t really complain. It’s worth noting that many are not free (as in speech); they often require attribution or similar. This may or may not matter. (For something like my site, I gladly left the linkback in the footer. If I were designing a commercial site, I wouldn’t be so comfortable with that.)

I bought a template from a while back. I was pleased. (Especially given the price!)

Today, I just discovered Theme Forest, where a lot of extraordinarily talented designers sell excellent templates for low prices. Columns is an amazing blog template, for example; Nova and Liberation are quite something, too. And Blue Business. Dezineplus is superb. Really, most everything there is pretty fantastic.

From the comments on one of the designs, I found another tip: the free Nevis font is an approximation of the commercial Gotham font. Ten by Twenty has several other great fonts, too.


Although I really don’t like the idea of stirring the hornet’s nest, even if I agree with the stirrer, I have to admit that this guy has a lot of guts. Why? He’s walking through a giant anti-Obama protest. According to the first photo in the series, the man was spit upon, called every name in the book, and encouraged to leave the country. He managed to bring out pure hatred and rage in other people. (Others have noted the irony of the cross around the neck of the woman linked as “pure hatred”.)

This sign, sponsored by these people, is pretty offensive, too. Oh, and this one, too. Other seem to cross the line into death threats. And photos of Obama as Hitler. And while Jimmy Carter wasn’t right about opposition being “mostly” seated in racism, it’s no secret that there’s some racism going on here.

In the end, though, the last photo of the set: “a normal discussion between two people with different points of view.” Can we have more of that and less of this?

Obama Wan Kenobi

How can you not love a President who is photographed with a plastic lightsaber on the White House lawn?

Some Olympians were at the White House, and the Olympics apparently include fencing. And for whatever reason, Obama somehow had a plastic lightsaber he jokingly used with the fencers. (For bonus points, can you find the man picking his nose?)

Or, as on Digger put it: “Barack, I’m really happy for you, and I’m a let you finish, but LUKE SKYWALKER HAD ONE OF THE BEST LIGHTSABER STANCES OF ALL TIME.”