<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Chris Dzombak</title>
 <link href="http://chris.dzombak.name/atom.xml" rel="self"/>
 <link href="http://chris.dzombak.name"/>
 <updated>2012-01-23T21:19:53-05:00</updated>
 <id>http://chris.dzombak.name</id>
 <author>
   <name>Chris Dzombak</name>
   <email>chris@chrisdzombak.com</email>
 </author>

 
 <entry>
   <title>Fixing 'Corrupted MAC On Input' Error with Git/SSH/VirtualBox 4.1.6</title>
   <link href="http://chris.dzombak.name/blog/2011/12/fixing-corrupted-mac-on-input-error.html"/>
   <updated>2011-12-19T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2011/12/fixing-corrupted-mac-on-input-error</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; try configuring your VM to use a bridged network interface instead of NAT.&lt;/p&gt;

&lt;p&gt;I'm working on a software engineering project inside a Windows 7 (64-bit) VirtualBox 4.1.6 VM on my iMac (running OS X Lion). When trying to push to a Github repo (via SSH), I was presented with this puzzling error:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git push origin master
Counting objects: 441, done.
Compressing objects: 100% (189/189), done.
Writing objects: 100% (441/441), 1.60 MiB, done.
Total 441 (delta 245), reused 441 (delta 245)
Received disconnect from 207.97.227.239: 2: Corrupted MAC on input.
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This means there's some network hardware, somewhere, corrupting the encrypted connection. It could be any router or NIC anywhere between the VM and the Github server (including those machines themselves). For more info on this error, &lt;a href=&quot;http://blogs.oracle.com/janp/entry/ssh_messages_code_bad_packet&quot;&gt;check out this blog post from Oracle&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My VM was configured to connect to the network through VirtualBox's NAT engine. In my particular case, it looks like that engine was the problem. (Your mileage may vary; remember, &lt;em&gt;any&lt;/em&gt; hardware between you and your server could be causing this). I configured VirtualBox to use a bridged connection, and suddenly everything works:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git push origin master
Counting objects: 441, done.
Compressing objects: 100% (189/189), done.
Writing objects: 100% (441/441), 1.60 MiB, done.
Total 441 (delta 245), reused 441 (delta 245)
To git@github.com:cdzombak/gsctl
 * [new branch]      master -&amp;gt; master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Hopefully someone else finds this useful when troubleshooting this error with the same VirtualBox configuration (VirtualBox 4.1.6, network through NAT).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>UMich Google Calendar Updated for Winter 2012</title>
   <link href="http://chris.dzombak.name/blog/2011/12/umich-google-calendar-updated-for-winter-2012.html"/>
   <updated>2011-12-07T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2011/12/umich-google-calendar-updated-for-winter-2012</id>
   <content type="html">&lt;p&gt;I have updated my public &lt;a href=&quot;http://chris.dzombak.name/umich-calendar/&quot;&gt;Google Calendar for the University of Michigan&lt;/a&gt; for the winter 2012 semester.&lt;/p&gt;
&lt;p&gt;Find information about the calendar and how to use it &lt;a href=&quot;http://chris.dzombak.name/umich-calendar/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Biking Safely, Sanely, and Respectfully in Ann Arbor</title>
   <link href="http://chris.dzombak.name/blog/2011/09/biking-in-ann-arbor.html"/>
   <updated>2011-09-12T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/09/biking-in-ann-arbor</id>
   <content type="html">&lt;p&gt;This guide is intended primarily for students who may not be avid cyclists but want to ride their bikes around the UM campus. The few blocks surrounding campus are often flooded with these cyclists, many of whom are riding on sidewalks or on the wrong side of the street. I don't think most of them are intentionally being unlawful or disrespectful – they've simply never learned how to ride downtown. Let's fix that.&lt;/p&gt;

&lt;h2&gt;Where To Ride&lt;/h2&gt;

&lt;p&gt;Ninety percent of the time: ride on the street. Your bike does not belong on the sidewalk along State Street. Riding along a sidewalk, especially a busy one, is stupid, dangerous, and disrespectful.&lt;/p&gt;

&lt;p&gt;On a bike, you are subject to the same rights (and responsibilities) as the driver of a car. Ride on the right side of the road. Many students think they can/should ride in the opposite direction of traffic. This is an excellent way to get yourself killed. Drivers are not expecting a small, hard-to-see vehicle to be coming toward them, in their lane, at 20 mph. Do not be that small, hard-to-see-vehicle.&lt;/p&gt;

&lt;p&gt;On busier, faster, and larger roads, likes Fuller and Plymouth, riding on the sidewalk is generally allowed and encouraged for most cyclists. (Along Fuller, if I recall correctly, the sidewalk is designated as the bike path.) If you are confident that you can safely ride in traffic and more-or-less keep up with the traffic, by all means ride in the road. But if you're reading this post, you probably aren't sufficiently experienced to do that.&lt;/p&gt;

&lt;p&gt;See &quot;Coexisting With Pedestrians&quot;, below, for additional info on riding on sidewalks.&lt;/p&gt;

&lt;h2&gt;Riding Safely&lt;/h2&gt;

&lt;p&gt;I often see students biking the wrong way down one-way streets, at night, with no helmet and no lights. These students are suicidal.&lt;/p&gt;

&lt;h3&gt;Ride with the Cars&lt;/h3&gt;

&lt;p&gt;This means riding on the road, in the same direction as traffic. Do not ride down the wrong side of a road or the wrong way down a one-way street. Riding toward oncoming traffic is an excellent way to get yourself killed.&lt;/p&gt;

&lt;h3&gt;Wear a Helmet&lt;/h3&gt;

&lt;p&gt;I don't care how good you (think you) are; you will eventually crash. When you crash, you really want to keep your brains inside your skull. Helmets cost $20 and accomplish that goal pretty nicely.&lt;/p&gt;

&lt;p&gt;I guarantee that, eventually, you will crash, look up, and notice a brick wall or something similarly unforgiving two feet (or, if you're unlucky, less) from your head. If you weren't wearing a helmet, that should scare you into starting. Why not cut out the near-death learning experience and start now?&lt;/p&gt;

&lt;h3&gt;Use Lights&lt;/h3&gt;

&lt;p&gt;Put a blinking white light on front of your bike and a blinking red one on back. These are cheap (or free!), and they let drivers see you at night.&lt;/p&gt;

&lt;p&gt;Bikes without lights are &lt;strong&gt;absolutely invisible&lt;/strong&gt; at night. Those tiny reflectors on your pedals don't make any difference whatsoever. No drivers can see them. A blinking light is the &lt;strong&gt;only&lt;/strong&gt; way to draw attention to yourself. You really want to do that.&lt;/p&gt;

&lt;h3&gt;Watch for cars turning&lt;/h3&gt;

&lt;p&gt;As you approach an intersection, if you're in the bike lane or just to the right of the traffic, watch for cars turning right. Drivers do not usually look right before turning right; they check that nothing's coming from the left, then go. You need to be alert for that and avoid right-turning cars.&lt;/p&gt;

&lt;p&gt;In some cases, it is easier just to leave the bike lane and merge into automobile traffic as you approach an intersection. This is safe – it means you're exactly in the right place for cars to see you, because you're right where a car would be. (As always, look over your shoulder for traffic behind you before changing lanes.)&lt;/p&gt;

&lt;p&gt;Watch for cars going the opposite direction and turning left in front of you. You're smaller than a car, so they might not see you.&lt;/p&gt;

&lt;p&gt;Do not ever trust turn signals.&lt;/p&gt;

&lt;h2&gt;Coexisting With Cars&lt;/h2&gt;

&lt;p&gt;Follow the safety rules outlined above, and follow traffic laws. You are subject to red lights, stop signs, etc. Disobeying traffic laws is an excellent way to get everybody mad at you and, eventually, be hit by a car whose driver assumed you were going to stop for that stop sign.&lt;/p&gt;

&lt;p&gt;Assume that the cars around you can see you and are trying to kill you. This means you need to be alert and constantly watching your surroundings for drivers doing really stupid things. &lt;em&gt;(This bit of wisdom comes from &lt;a href=&quot;http://www.jwz.org/blog/2008/05/the-collected-jwz-bicycle-wisdom/&quot;&gt;here&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When a car hits a bike, &lt;a href=&quot;http://en.wikipedia.org/wiki/Kinetic_energy&quot;&gt;the car wins&lt;/a&gt;. There are no exceptions. Don't let one hit you.&lt;/p&gt;

&lt;h2&gt;Coexisting With Pedestrians&lt;/h2&gt;

&lt;p&gt;At crosswalks, pedestrians have the right of way – you're treated like a car's driver, remember? You'll notice, however, that you're much smaller than a car and can therefore get through busy crosswalks much faster than any car could. (Just don't hit anyone.)&lt;/p&gt;

&lt;p&gt;If you must ride on a sidewalk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ride slowly:&lt;/strong&gt; ride at the speed a runner would be jogging. People are not expecting a cyclist to blow past them on the sidewalk, and doing that is really unsafe.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slow down even more:&lt;/strong&gt; when you're approaching a corner, a doorway, or anywhere that pedestrians could pop out and surprise you, you must slow down to walking speed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Look around:&lt;/strong&gt; constantly be looking around for doorways, interseting sidewalks, and pedestrians. Being alert and aware of your surroundings is more important on the sidewalk than it is on the road.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don't be a jerk.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;A Quick Note&lt;/h2&gt;

&lt;p&gt;Following all these rules is annoying. Indeed, you can get places faster if you ignore one-way streets, stop signs, traffic lights, and blast down the sidewalk along South U. Unfortunately, if you ride like that, you &lt;em&gt;will&lt;/em&gt; eventually injure some innocent pedestrian or end up in the emergency room.&lt;/p&gt;

&lt;p&gt;Consider this: even following all these rules, you still get where you're going many, many times faster than if you were walking.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Craigslist Scammers</title>
   <link href="http://chris.dzombak.name/blog/2011/08/craigslist-scammers.html"/>
   <updated>2011-08-20T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/08/craigslist-scammers</id>
   <content type="html">&lt;p&gt;The following are names (likely fake) and email addresses of people who've tried to scam me and others on Craigslist. If any of these people send you an email, ignore it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frank smith: frankmith001@gmail.com&lt;/li&gt;
&lt;li&gt;Jason Smith: spankeydon@yahoo.com, capt.abramovich3@gmail.com, capt.rocha3@gmail.com, metropolitant6@gmail.com, bbbcrz68@gmail.com&lt;/li&gt;
&lt;li&gt;Julie Corbin: juliecorbin01@gmail.com&lt;/li&gt;
&lt;li&gt;stacey justins: stajus068@gmail.com&lt;/li&gt;
&lt;li&gt;Jane Lewis: jannylewis01@gmail.com&lt;/li&gt;
&lt;li&gt;Joyce Mae Hillier Wood: sex20joy@gmail.com&lt;/li&gt;
&lt;li&gt;Smith Ray: smithcray2@gmail.com&lt;/li&gt;
&lt;li&gt;joe harick: jojo4holy07@gmail.com, jojo4holy01@gmail.com&lt;/li&gt;
&lt;li&gt;Mark Wilson: libertyismine@o2.pl&lt;/li&gt;
&lt;li&gt;Karen Scott: arebdajgd@googlemail.com, karensc14@gmail.com&lt;/li&gt;
&lt;li&gt;Betty Clerk: bettyclerk@ymail.com&lt;/li&gt;
&lt;li&gt;Janet Diana janet.diana17@hotmail.com&lt;/li&gt;
&lt;li&gt;mark alonso: markalonso10a@gmail.com&lt;/li&gt;
&lt;li&gt;goerge leslie: goergeleslie12@gmail.com&lt;/li&gt;
&lt;li&gt;mark richards: markrichards2011@live.com&lt;/li&gt;
&lt;li&gt;richards mark: richardsmark35@gmail.com&lt;/li&gt;
&lt;li&gt;Patrick Reed: patreed9090@gmail.com&lt;/li&gt;
&lt;li&gt;Patrick Reed: patreed7070@gmail.com&lt;/li&gt;
&lt;li&gt;janet.diana31@hotmail.com&lt;/li&gt;
&lt;li&gt;James: jwestend74s@gmail.com&lt;/li&gt;
&lt;li&gt;Miguel Renfrow: miguelrenfrow55@live.com&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Remember, anyone who asks you to ship something you're selling on Craigslist is probably a scammer. Don't fall for it.&lt;/p&gt;

&lt;p&gt;(The most popular scam right now is to offer to pay you slightly more than your asking price, via Paypal, for you to ship the item (usually to Africa). The scammer is using a stolen credit card number, and weeks or months down the road when the cardholder finds and reports the fraud, you'll be on the hook to return the money.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>UMich Google Calendar Updated for Fall 2011</title>
   <link href="http://chris.dzombak.name/blog/2011/08/umich-google-calendar-updated-for-fall-2011.html"/>
   <updated>2011-08-12T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/08/umich-google-calendar-updated-for-fall-2011</id>
   <content type="html">&lt;p&gt;I have updated my public &lt;a href=&quot;http://chris.dzombak.name/umich-calendar/&quot;&gt;Google Calendar for the University of Michigan&lt;/a&gt; for the fall 2011 semester.&lt;/p&gt;
&lt;p&gt;Find information about the calendar and how to use it &lt;a href=&quot;http://chris.dzombak.name/umich-calendar/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>How Rdio Can Kill Spotify (and vice-versa)</title>
   <link href="http://chris.dzombak.name/blog/2011/08/rdio-spotify.html"/>
   <updated>2011-08-03T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/08/rdio-spotify</id>
   <content type="html">&lt;p&gt;A couple cool new subscription music services have recently appeared: &lt;a href=&quot;http://rdio.com&quot;&gt;Rdio&lt;/a&gt; and &lt;a href=&quot;http://spotify.com&quot;&gt;Spotify&lt;/a&gt;. There are a ton of similarities between the two – they offer instant access to a world of music, they have capable mobile apps, and they share a nearly-identical pricing structure.&lt;/p&gt;

&lt;p&gt;There are several notable differences between them, though. I've been trying for weeks to figure out which one I want to use primarily (in fact, I'm currently paying for subscriptions to both). This is maddening because each has little shortcomings when compared to the other. If I could just combine the best of both, I'd have an absolutely killer subscription music service. But I can't.&lt;/p&gt;

&lt;p&gt;A few days ago, I was really thinking hard and posted &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/97834108067135488&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/97838709734514688&quot;&gt;series&lt;/a&gt; &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/97845460621983744&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/97848215562502145&quot;&gt;Tweets&lt;/a&gt; &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/97877655210307585&quot;&gt;about&lt;/a&gt; &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/97879062994882560&quot;&gt;this&lt;/a&gt;. Here's a more in-depth comparison between the two. There's no conclusion about which is better – because neither is. I maintain that if either service did what I outline here, it would kill the other. It would certainly get my exclusive business.&lt;/p&gt;

&lt;h2&gt;How Rdio could kill Spotify&lt;/h2&gt;

&lt;p&gt;Rdio is newer than Spotify; it was launched in mid-2010. It's a US company (while Spotify is based in Europe and has been there for a number of years, Spotify only launched in the US in July 2011). It has subscription plans for $4.99 or $9.99 a month, and it offers a 7-day trial.&lt;/p&gt;

&lt;p&gt;I started using Rdio in spring 2011 when Spotify wasn't yet available in the US. I really, really want to like Rdio – it's a newer, smaller, more accessible company; I've had good interactions with them on &lt;a href=&quot;https://twitter.com/#!/rdio&quot;&gt;Twitter&lt;/a&gt; and via more traditional support channels. And I think (or hope) that Rdio's newness and smallness means they're more agile, more open to changes in their product, and more able to make those changes quickly. They've already incorporated one of my suggestions into their native apps.&lt;/p&gt;

&lt;p&gt;But some rough edges and missing features have found me using Spotify more and more lately, and I'm considering downgrading my Rdio subscription next month. I'm really hoping Rdio listens to at least some of my suggestions.&lt;/p&gt;

&lt;h3&gt;Better Native App&lt;/h3&gt;

&lt;p&gt;Spotify's native desktop app experience kills Rdio's. It's an all-around better user experience.&lt;/p&gt;

&lt;p&gt;Rdio's is a webapp in a separate browser window with a few specialized buttons. Spotify's is an actual native application. That means Rdio's native app feels clunky, slow, and unresponsive &lt;em&gt;in comparison to Spotify's&lt;/em&gt; – I was pretty happy with Rdio's native app on OS X and Windows, until I started using Spotify. If Rdio's going to compete, it needs a better native app experience – one that feels faster than a webapp.&lt;/p&gt;

&lt;p&gt;Spotify does a lot of clever, aggressive caching to ensure that when you hit &quot;play&quot;, the music stream starts instantly. Seeking through an album on Spotify doesn't mean listening to seconds of silence between each song. On Rdio, in comparison, I have to wait a while until music actually starts playing.&lt;/p&gt;

&lt;p&gt;Finally, Spotify's native apps integrate the user's own music seamlessly into the library. This isn't necessarily a must-have killer feature, but it's certainly nice to be able to include in my playlists local artists who aren't on Spotify. And the mobile Spotify app includes MP3s I've already put on my phone. This feature just adds to the list of reasons Spotify's native app experience is better.&lt;/p&gt;

&lt;p&gt;I should note that Rdio has a very nice webapp – in fact, it launched as one. This is cool because I can visit it from any computer, anywhere, and have my music ready to go. Spotify doesn't have a webapp.&lt;/p&gt;

&lt;h3&gt;Improve Playlist Management&lt;/h3&gt;

&lt;p&gt;Rdio's playlist management sucks. I've barely used it because it's just painful.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why can't I create a playlist then add stuff to it?&lt;/li&gt;
&lt;li&gt;Why can't I drag and drop anything, anywhere? I kind of see why this is missing in the Web UI, but in the native app?&lt;/li&gt;
&lt;li&gt;Why can't I add a whole album to a playlist? I recently built an 8-hour playlist of albums for a road trip – using Spotify, because on Rdio I would have had to add each track indivudually.&lt;/li&gt;
&lt;li&gt;Why can't I build a playlist from any conext other than looking at an album's page?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Go build a cool playlist on Rdio. Then build the same playlist on Spotify. Spotify wins, hands down.&lt;/p&gt;

&lt;h3&gt;Don't Duplicate my Social Graph&lt;/h3&gt;

&lt;p&gt;Rdio should improve its integration with my already-extant social graphs on Facebook, Twitter, or Google+. Rdio already has great social features, but there's little point in duplicating my social graph when it's already well-documented elsewhere on the Web.&lt;/p&gt;

&lt;p&gt;At least, Rdio's already-capable friend finder should be more prominent so that more people will set it up with their online accounts, and then every month it should tell you, &quot;Hey! We found 16 of your Facebook friends who also use Rdio!&quot;&lt;/p&gt;

&lt;h3&gt;Remove the Pricing/Trial Barrier&lt;/h3&gt;

&lt;p&gt;This last suggestion doesn't really affect existing users, but it will be crucial to let Rdio remain competitive with Spotify. Spotify offers a free, ad-supported, feature-limited plan. Rdio offers a 7-day free trial, after which your only options are $5 or $10 a month.&lt;/p&gt;

&lt;p&gt;I believe Rdio should either offer a longer free trial or a free plan (ad-supported, feature-limited, and/or playback-time-limited). A 7-day trial just is not long enough for someone to really get to know your product, utilize its features, and explore how it best fits into his daily routines and workflow. To convince someone that your service is a good fit for his life, you need more than a single week.&lt;/p&gt;

&lt;p&gt;A lot of people are happily using Spotify's free, ad-supported plan. These people will never even try Rdio. And even more importantly, these people tend to be younger users in the 13-21 year old range. Capturing these users is crucial for your service. Their opinions on how music should work are shaped by illegal file sharing, but they are also young and flexible and open to change. If you get them on the subscription-service bandwagon now, with a free account, they won't just look at this as an alternative to buying CDs like older demographics will (many of them have never bought a CD in their lives and have only ever swapped MP3s). They will see this as &lt;strong&gt;the&lt;/strong&gt; legal way to get music, and they will be your customers for years to come. Spotify is capturing them; Rdio isn't.&lt;/p&gt;

&lt;h2&gt;How Spotify could kill Rdio&lt;/h2&gt;

&lt;p&gt;Spotify has been popular in Europe for a couple years and only recently launched in the US. It's become pretty popular in the US. Its pricing model is basically identical to Rdio's ($4.99 or $9.99 per month), with the addition of an ad-supported free plan. Spotify is available exclusively as a native app; there is no webapp like Rdio's.&lt;/p&gt;

&lt;p&gt;I've been using Spotify a lot since it launched, and I generally like it. But there are a few things that Rdio does much better.&lt;/p&gt;

&lt;h3&gt;Better Library/Collection System&lt;/h3&gt;

&lt;p&gt;I hate the way I have to collect music in Spotify. The only way to add music to my library is by adding it to a playlist or &quot;starring&quot; it. You can't just put music in your library like you can in Rdio. I can sort of see why Spotify is designed like this, but it's painful to use unless you're used to collecting and organizing music using exclusively playlists. And nobody does that.&lt;/p&gt;

&lt;p&gt;I want to be able to add music to my library without adding it to a playlist. I should be able to find and collect music without thinking about whether to add certain tracks to playlists &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;, and/or &lt;em&gt;z&lt;/em&gt;. Then I want to browse through that music.&lt;/p&gt;

&lt;p&gt;(As a side note, it's not clear exactly what starring a track is supposed to do. I assume I'm supposed to star my favorite tracks, but I don't actually know.)&lt;/p&gt;

&lt;h3&gt;Add Usable Social Features&lt;/h3&gt;

&lt;p&gt;I &lt;strong&gt;love&lt;/strong&gt; how Rdio lets me see what music is popular overall in my social network and what my friends are listening to. I've discovered a lot of music that way. Spotify doesn't let me do that. If I'm curious, in Spotify, I can see what one user's top tracks and artists are, and I have to go out of my way to see even that. Rdio is a much, much more social experience – so much so that you can be social without even thinking about it. This is how people discover music. Spotify fails at helping me discover music.&lt;/p&gt;

&lt;p&gt;If Spotify wants to compete with Rdio, it will basically need to copy Rdio's social features, because Rdio's social features are perfect.&lt;/p&gt;

&lt;p&gt;(Before arguing that Spotify's social features are good, you should go find some people on Rdio for a week and use it. You'll hate Spotify.)&lt;/p&gt;

&lt;h3&gt;Better Music Discovery with Radio Stations&lt;/h3&gt;

&lt;p&gt;Rdio lets me listen to a &quot;radio station&quot; built upon virtually any list of music: music that's popular in my social network, an artist's page, etc. It's amazing. This makes discovering music a pleasure. Spotify has no such thing. Discovering music on Spotify is next to impossible.&lt;/p&gt;

&lt;p&gt;Spotify has to improve its artist radio feature, and add a radio station based on what's popular in my social network. It should go even further and let me listen to a radio station built upon any list of music (or user's page) that's displayed, anywhere. Or at the very least, it should let me create a new playlist filled with recommendations.&lt;/p&gt;

&lt;h3&gt;Improve Music Finding on Mobile App&lt;/h3&gt;

&lt;p&gt;Spotify's mobile app will not let you listen to an album by selecting an artist/album from an alphabetical list. Instead, you must open a playlist that you already know contains the album, then type in the album's name to filter the list. WTF, right?&lt;/p&gt;

&lt;p&gt;At some level, this design makes sense. This is how you select music in the Spotify desktop app (and in iTunes, from which Spotify's interface copies). But on a mobile device, &lt;strong&gt;typing is hard&lt;/strong&gt;, and this design sucks.&lt;/p&gt;

&lt;p&gt;This makes sense when considering Spotify's overall playlist-centric design. If you collect and organize music using exclusively playlists, this won't matter. But &lt;em&gt;nobody does that&lt;/em&gt; – everyone sometimes wants to find and listen to a whole album.&lt;/p&gt;

&lt;p&gt;Spotify's mobile app should have more traditional artist/album lists for finding music in addition to the type-to-filter functionality. Rdio's mobile app gets this right.&lt;/p&gt;

&lt;h2&gt;With a Cherry on Top&lt;/h2&gt;

&lt;p&gt;There are a few things that neither of these services do, but which could be huge competitive advantages.&lt;/p&gt;

&lt;h3&gt;Free Accounts for College Students&lt;/h3&gt;

&lt;p&gt;This sounds crazy. Hear me out:&lt;/p&gt;

&lt;p&gt;Amazon gives away free one-year Prime memberships to college students. Why? It works really, really well.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As I said above (in the Rdio section), young peoples' minds are flexible and open to change, especially when it comes to Internet services. Amazon Prime is a new way of looking at buying stuff online – shipping costs are (or at least seem to be) zero, and buying small items online is commonplace.&lt;/li&gt;
&lt;li&gt;College students are new to having disposable income, or at least they will soon graduate and suddenly have more disposable income than they're used to.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Giving away one-year music subscriptions to college students will work &lt;em&gt;better&lt;/em&gt; than giving away Amazon Prime memberships.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;College kids will quickly get really addicted to having access to a huge music library.&lt;/li&gt;
&lt;li&gt;quoting myself: College students' &quot;opinions on how music should work are shaped by illegal file sharing, but they are also young and flexible and open to change. If you get them on the subscription-service bandwagon now, with a free account, they won't just look at this as an alternative to buying CDs&lt;em&gt;...&lt;/em&gt;They will see this as &lt;strong&gt;the&lt;/strong&gt; legal way to get music, and they will be your customers for years to come.&quot;&lt;/li&gt;
&lt;li&gt;Subscriptions are cheap. At the end of the user's free year of subscription the barrier to becoming a paying customer is low – just one or two coffees per month.&lt;/li&gt;
&lt;li&gt;They will tell their friends. You'll gain thousands of users overnight.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Integrate with Google Music&lt;/h3&gt;

&lt;p&gt;Integrating the music that's already on my computer into your app is nice, but in the future the music I own won't be stored on my computer. It certainly won't be stored in duplicate on my computers, tablet, phone, and car.&lt;/p&gt;

&lt;p&gt;If your native apps (for desktops/laptops and phones) integrate local music the user already owns, they should also integrate cloud-stored music the user already owns.&lt;/p&gt;

&lt;h3&gt;Last.fm Love Button&lt;/h3&gt;

&lt;p&gt;This is a small one, but I always like my music players to have a Last.fm &quot;love this track&quot; button :)&lt;/p&gt;

&lt;h2&gt;Footnote: Pandora&lt;/h2&gt;

&lt;p&gt;Pandora is dead.&lt;/p&gt;

&lt;p&gt;Rdio's &quot;radio&quot; feature, which lets you discover music based on an artist or on what your social network is listening to, kills Pandora.  Once Rdio has a free, ad-supported plan, there will be no reason for anybody to use Pandora. As a bonus, Rdio lets you listen to a specific track if you want, which Pandora has never been able to do.&lt;/p&gt;

&lt;p&gt;Rdio's UI is far superior to Pandora's Y2K-esque Flash-based monstrosity. Pandora's recent announcement that they're developing a nice HTML5-based player is too late; they sat for years while literally doing nothing, and they're going to pay a steep price for that.&lt;/p&gt;

&lt;p&gt;Pandora has no usable social fatures; Rdio has some really, really nice ones.&lt;/p&gt;

&lt;p&gt;And as soon as Spotify gets a clue and adds usable radio features, it will have all the same advantages as Rdio (vs Pandora).&lt;/p&gt;

&lt;h2&gt;Footnote: Last.fm Radio&lt;/h2&gt;

&lt;p&gt;Nobody really uses Last.fm's radio; it's been dead for a long time. Pandora has better recommendations and plays a better cross-section of music, and the Last.fm radio UI is clunky.&lt;/p&gt;

&lt;p&gt;I've been bitterly disappointed with Last.fm in general; it will be the subject of another post in the near future. There's so much potential there and the Last.fm team is literally doing nothing with it.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;There's no winner in the Spotify vs. Rdio battle. At least, not yet. I want to like Rdio, but I've found myself using Spotify more and more lately – I'm really hoping Rdio reads this post.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://mortenjust.com/2011/02/20/side-by-side-spotify-and-rdio-for-iphone/&quot;&gt;Here's a comparison of Rdio's and Spotify's iPhone apps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Finally, no matter what happens, it will be fun to look back at this post in a couple years.&lt;/p&gt;

&lt;p&gt;Comments are welcome.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Removing AT&T Mobile Web Bookmark from Android Phones</title>
   <link href="http://chris.dzombak.name/blog/2011/08/remove-att-mobile-bookmark-android.html"/>
   <updated>2011-08-02T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/08/remove-att-mobile-bookmark-android</id>
   <content type="html">&lt;p&gt;AT&amp;amp;T adds a bunch of software and bookmarks to all the phones it sells. Once you've rooted your Android phone, it's pretty simple to remove most of the provider's crapware.&lt;/p&gt;

&lt;p&gt;AT&amp;amp;T also adds a &quot;Mobile Web&quot; bookmark to the Android phones it sells. I finally figured out how to remove it. Note that you'll need a rooted phone and the Android development tools (or at least &lt;code&gt;adb&lt;/code&gt;) to follow these instructions.&lt;/p&gt;

&lt;p&gt;Get to your phone's shell with &lt;code&gt;adb shell&lt;/code&gt;. Then execute these commands:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ su
# sqlite3 /data/data/com.android.browser/databases/browser.db
sqlite&amp;gt; DELETE FROM bookmarks WHERE _id=1;
sqlite&amp;gt; .quit
# exit
$ exit
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That's all!&lt;/p&gt;

&lt;p&gt;I've tested this on an LG Thrive. If sqlite3 isn't found, you'll need to figure out where it is on your phone. Most rooting procedures install it somewhere for you.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Chris Reviews Pirates of the Caribbean: On Stranger Tides</title>
   <link href="http://chris.dzombak.name/blog/2011/05/pirates-4-review.html"/>
   <updated>2011-05-24T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/05/pirates-4-review</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Executive summary:&lt;/em&gt; this movie was not nearly as terrible as Pirates 3. (Really, that's not saying much; Pirates 3 was basically the absolute worst movie I have ever seen.)&lt;/p&gt;

&lt;p&gt;These were my thoughts after seeing Pirates 4 (On Stranger Tides) last night. &lt;strong&gt;Spoilers ahead.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There were some enjoyable moments, and I even laughed at several points, but &lt;em&gt;come on&lt;/em&gt;. Disney apparently has no good writers these days. At all. The plot was just...bad.&lt;/p&gt;

&lt;p&gt;You can only pile so many unbelievable, supernatural plot devices atop one another before the movie starts to suck. At some point, you have to stop using supernatural crap as a crutch and actually do some character development and come up with a halfway interesting plot. (Pirates 3 was terrible in this regard; not only did it have a ton of ridicuous supernatural crap, it had about 30 uninteresting, intertwined, hideously complicated subplots. Pirates 4 did a better job, but the writers still need to quit using every ridiculous supernatural element they can think of just to avoid actual creativity.)&lt;/p&gt;

&lt;p&gt;I did enjoy a line near the beginning of the movie where Keith Richards made a comment about looking dead, or being dead, or something. (It's funny because I'm pretty sure that, in real life, he's actually a zombie.) And the music was appropriately epic throughout the film.&lt;/p&gt;

&lt;p&gt;There was one point where I swear they were going to a flashback - they had appropriate sound playing and everything - but the movie never actually cut to the flashback. The character just narrated it for a few minutes, and the camera just watches him talk. I can only assume they ran out of money before they actually managed to film the flashback.&lt;/p&gt;

&lt;p&gt;Re: the whole mermaid/missionary subplot - WTF was that? It came out of nowhere, three-quarters of the way through the film; and not only was the subplot totally undeveloped, but the characters involved were barely even one-dimensional. It was kind of a &quot;oh yeah, and this happened too&quot; deal. This is still better than Pirates 3 - which was, as I recall, just 20 or 30 unrelated, poorly written subplots duck-taped together - but it was still terrible and distracting from the rest of the film.&lt;/p&gt;

&lt;p&gt;(As long as I'm taking about the characters, I think there was only one character who even began to escape from one-dimensionality. /sigh)&lt;/p&gt;

&lt;p&gt;The movie was clearly left open for a sequel (ugh). In fact, there were about 5 different moments that I swore were the end of the movie, only to be sadly disappointed when we had to go conclude another subplot. Except that nothing actually concluded; the writers left just about every possible opening they could for a fifth movie.&lt;/p&gt;

&lt;p&gt;The plot was, generally, obvious and easily predicatable. While watching, I could usually predict in great detail what was about to happen. There was absolutely no suspense, nor were there any surprises...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&quot;Oh, I'll bet he switched the chalices&quot;&lt;/li&gt;
&lt;li&gt;&quot;And now we cut to Barbossa to reinforce that point&quot;&lt;/li&gt;
&lt;li&gt;&quot;And it turns out it's actually Jack Sparrow&quot;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I had more, but I'm too tired to finish writing now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; there are a few good moments, but go see Thor instead. Don't let your friends tell you Pirates 4 is way better than Pirates 3. It is (marginally) better, but let's face it - &lt;em&gt;anything&lt;/em&gt; is better than Pirates 3.&lt;/p&gt;

&lt;p&gt;Finally: &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/72880908583182336&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ready-to-Go Photo Bag</title>
   <link href="http://chris.dzombak.name/blog/2011/05/ready-to-go-photo-bag.html"/>
   <updated>2011-05-14T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/05/ready-to-go-photo-bag</id>
   <content type="html">&lt;p&gt;I often have to leave on a moment's notice to shoot photos: local breaking news, last-minute calls to shoot plays or concerts, and that sort of stuff. It's extremely helpful for me to keep my camera bag packed with my most commonly used equipment so I can grab it as I'm heading out the door. This equipment covers 90% of my needs for most shooting, and it lives in my camera bag:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nikon D700 + MB-D10 + charged EN-EL4a&lt;/li&gt;
&lt;li&gt;Nikon 80-200mm f/2.8 AF-S&lt;/li&gt;
&lt;li&gt;Nikon 17-35mm f/2.8 AF-S&lt;/li&gt;
&lt;li&gt;Nikon 50mm f/1.8 AF-D &lt;em&gt;(soon to be replaced with the new AF-S version or the Nikon 28-70 f/2.8 AF-S)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Nikon SB-800 + batteries&lt;/li&gt;
&lt;li&gt;Blank 8 GB CompactFlash card&lt;/li&gt;
&lt;li&gt;Roll of gaff tape&lt;/li&gt;
&lt;li&gt;Microfiber lens cleaning cloth&lt;/li&gt;
&lt;li&gt;USB card reader&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I can grab my camera bag and head out the door even while I'm still on the phone getting the photoshoot's details. I'd recommend that any photographers who shoot frequently (particularly photojournalists) put together a similar &quot;photo go bag&quot;.&lt;/p&gt;

&lt;p&gt;Note the gaff tape on that list - I never, ever go on a photoshoot without my roll of black gaff tape. It's immensely useful.&lt;/p&gt;

&lt;p&gt;Depending on what subject I'm shooting, I might need some additional equipment. The most common things I grab on my way out the door are a second body (the Nikon D7000; I keep the battery charged all the time), any of my fast prime lenses, a second flash (Nikon SB-600), a macro lens, or a fisheye lens.&lt;/p&gt;

&lt;p&gt;Incidentally, all this fits nicely in a Domke F-2 canvas bag. I highly recommend that bag - it's durable, pretty waterproof, large, and comfortable.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Making a Private Gist Public</title>
   <link href="http://chris.dzombak.name/blog/2011/05/making-private-gist-public.html"/>
   <updated>2011-05-11T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/05/making-private-gist-public</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;https://gist.github.com&quot;&gt;Gist&lt;/a&gt; is a really nice tool for sharing and storing snippets of code, notes, and any other text you want. It lets you create private or public Gists - basically, sets of text files.&lt;/p&gt;

&lt;p&gt;Sadly, it's not easy to switch a Gist from private to public (or vice versa). You can do this with a little Git-fu, since each Gist is its own Git repo. Here's how to do it.&lt;/p&gt;

&lt;p&gt;Copy the Private Clone URL from the Gist's page and clone the Gist to a temporary directory:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;~ &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git clone git@gist.github.com:PRIVATEGIST.git gist-private-temp
~ &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;git-private-temp
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;From the Gist Web interface, create a new public Gist. You will need to add some dummy text to a file in the Gist since you can't create a totally empty Gist. This file will be deleted in the next step, though.&lt;/p&gt;

&lt;p&gt;Copy the Private Clone URL from this &lt;em&gt;new&lt;/em&gt; repo. Add the public Gist as a remote in your cloned copy of the private Gist, and push to it. (You'll need to do a forced push since the public Gist has the dummy file in it.)&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;~/gist-private-temp/ &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git remote add public git@gist.github.com:PUBLICGIST.git
~/gist-private-temp/ &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git push -f public
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Finally, to get the new Gist content to appear on your Gist home page, go to the Gist's page, edit it, and resave it (without making any changes).&lt;/p&gt;

&lt;p&gt;I was thinking about making a script to do this, but my understanding is that the necessary Gist API methods are only available in the Github API v3, which is not yet stable; and I couldn't find any Github API libraries that support it yet.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Twitter Busyness Average</title>
   <link href="http://chris.dzombak.name/blog/2011/04/twitter-busyness-average.html"/>
   <updated>2011-04-06T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/04/twitter-busyness-average</id>
   <content type="html">&lt;p&gt;At some point last week, I &lt;a href=&quot;https://twitter.com/#!/cdzombak/status/55128208626032640&quot;&gt;realized&lt;/a&gt; that I could measure roughly how busy I was based on the inverse of the frequency of my posts to &lt;a href=&quot;https://twitter.com/cdzombak&quot;&gt;Twitter&lt;/a&gt;. Based on that, I've created the Twitter Busyness Average (similar to the familiar &lt;a href=&quot;http://en.wikipedia.org/wiki/Load_%28computing%29&quot;&gt;UNIX load average&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;This measurement shows how busy somebody was in the last 2 days. The average = (k) / (hourly frequency of Tweets during the last 2 days).&lt;/p&gt;

&lt;p&gt;The constant k is unique to each person; this should be adjusted to match the user's Twitter usage pattern. A target value for &quot;standard&quot;, not particularly stressful, busyness is around 2. (For me, k ~= 0.75.)&lt;/p&gt;

&lt;p&gt;To avoid division by zero, if you haven't Tweeted in the last 2 days, calculate the frequency as if you had Tweeted once.&lt;/p&gt;

&lt;p&gt;This should require sufficiently few requests to the Twitter API that calculating it client-side is appropriate. I've created &lt;a href=&quot;https://github.com/cdzombak/tba/blob/master/js/jquery.tba.js&quot;&gt;a quick jQuery plugin&lt;/a&gt; for this, and when I have some time, I'll also whip up a PHP script.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Shooting Concerts with Strobe Lights</title>
   <link href="http://chris.dzombak.name/blog/2011/04/shooting-concerts-with-strobes.html"/>
   <updated>2011-04-06T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2011/04/shooting-concerts-with-strobes</id>
   <content type="html">&lt;p&gt;Many concerts these days - mainly rock/pop shows - rely heavily on strobe lights as part of the experience. Photographing these shows is challenging, even though there's (at times) plenty of light.&lt;/p&gt;

&lt;p&gt;I ran into this problem at an &lt;a href=&quot;http://dancethink.com/&quot;&gt;Ella Riot&lt;/a&gt; show at Ann Arbor's &lt;a href=&quot;http://www.blindpigmusic.com&quot;&gt;Blind Pig&lt;/a&gt; a while ago, and I figured out how to fix it. Hopefully you find this useful.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post assumes knowledge of the basics of electronic flash and flash sync. See &lt;a href=&quot;http://www.youtube.com/watch?v=hvZ6VujbhjM&quot;&gt;this great video&lt;/a&gt; for an excellent explanation of these concepts.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;The Problem&lt;/h2&gt;

&lt;p&gt;During a show, I'm typically shooting at ISO 1600-3200, f/2.8, and anywhere from 1/80 to 1/1000 second, depending on the light. I shoot in manual exposure mode; concerts tend to have extreme highlights and shadows which require careful exposure, and the lighting is usually rapidly changing. (Aside: the &lt;a href=&quot;http://www.nikonusa.com/Nikon-Products/Product/Digital-SLR-Cameras/25444/D700.html&quot;&gt;Nikon D700&lt;/a&gt; is &lt;em&gt;amazing&lt;/em&gt; at low-light photography.)&lt;/p&gt;

&lt;p&gt;Strobe lights wreak havoc on that method, especially if they're the primary lighting at the show. I'll focus on that situation here (the same principles apply even if the strobes aren't the primary light source). With that shooting style, most of your photos will be dark because the exposure simply didn't catch a strobe. If a photo did catch a strobe flash, it's overexposed, and chances are there's a dark band at the top or bottom of the photo (as if you tried to use a flash with a shutter speed faster than your camera's sync speed).&lt;/p&gt;

&lt;p&gt;The key to fixing this: you can think of the strobe light just like an electronic flash you'd attach to your camera - because they're basically &lt;em&gt;exactly&lt;/em&gt; the same kind of light source. When you mix strobe lights with the concert shooting style I described above, there are two issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're not exposing properly for a flash/strobe&lt;/li&gt;
&lt;li&gt;You're not syncing your camera with the flash/strobe properly&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;The Solution&lt;/h2&gt;

&lt;p&gt;You can fix the first problem by exposing as if you were shooting a flash photo. Flash exposure is determined by exactly two factors: aperture and ISO. (You can think of the flash as being infinitely fast, so the shutter speed has no impact.) Instead of ISO 1600 and f/2.8, you might use ISO 200 and f/11 (strobes are &lt;em&gt;bright&lt;/em&gt;). Strobe lights vary concert-to-concert, so obviously this is just an example. Some trial-and-error will be required.&lt;/p&gt;

&lt;p&gt;The second problem - flash sync - is a little harder to solve, since you're not triggering the strobes yourself as you would in a studio. &lt;em&gt;(Review &lt;a href=&quot;http://www.youtube.com/watch?v=hvZ6VujbhjM&quot;&gt;the flash sync video I linked above&lt;/a&gt; if you don't remember exactly why SLRs have maximum sync speeds.)&lt;/em&gt; You have to use a long exposure, for two reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To increase your chance of catching a strobe flash. At 1/500 second, your shutter is open for 2 milliseconds. Each strobe flash lasts about 1 ms. Even if you're shooting at 8 fps, your chances of catching a strobe at 1/500 s are virtually zero. At 1/50 s, your shutter is open for 20 ms, giving you a much better chance of catching a flash.&lt;/li&gt;
&lt;li&gt;To increase the chance that, when you do catch a strobe, it occurs when neither shutter curtain is traveling in front of the sensor. If you're shooting at 1/200 s, the shutter curtains are traveling across the sensor for most of the exposure, so if you catch a flash you'll probably end up with a dark band on the top or bottom of the photo. At 1/50 second, the curtains are only traveling for a small fraction of the exposure, so you're more likely to get good results.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;That explanation may be difficult to understand, so I put together some pictures to help. Suppose there's a strobe flashing 5 times per second:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://chris.dzombak.name/img/blog/2011/04/strobe.png&quot; alt=&quot;Strobe flashing 5 times per second&quot;&gt;&lt;/p&gt;

&lt;p&gt;Now suppose you're using short exposures. Your chance of catching a flash is very small, and even if you do, you'll probably have a dark band somewhere because there's almost no time during which the sensor is entirely exposed:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://chris.dzombak.name/img/blog/2011/04/strobe-short.png&quot; alt=&quot;Strobe flashing 5 times per second; short exposures&quot;&gt;&lt;/p&gt;

&lt;p&gt;Finally, suppose you're using long exposures. You have a better chance of catching a flash, and when you do catch one, the shutter curtains probably aren't traveling in front of the sensor:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://chris.dzombak.name/img/blog/2011/04/strobe-long.png&quot; alt=&quot;Strobe flashing 5 times per second; long exposures&quot;&gt;&lt;/p&gt;

&lt;p&gt;Keep in mind that your shutter speed is also affected by the ambient light - if there are light sources other than the strobes, you want them to contribute to the exposure. Luckily, with the aperture and ISO settings you're using for the strobe, you'll need a long exposure to catch much ambient light. That works nicely in this case, since catching strobes also requires long-ish exposures.&lt;/p&gt;

&lt;p&gt;Note that even with the long-exposure method, you should shoot as many frames/second as your camera lets you, because your chances of catching a flash in any individual photo are still suboptimal.&lt;/p&gt;

&lt;p&gt;I put together a video with every frame I shot during an Ella Riot show (back when they were called My Dear Disco). &lt;a href=&quot;http://vimeo.com/17494380&quot;&gt;Watch it on Vimeo&lt;/a&gt;. You can see that even though I was shooting 8 fps for basically the entire show and using the long-exposure technique, I still got plenty of dark frames and photos with dark bands.&lt;/p&gt;

&lt;h2&gt;That's all!&lt;/h2&gt;

&lt;p&gt;Good luck with this. I'd love to see any photos you shoot using this technique; let me know about them on Twitter (@cdzombak).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Find open CAEN computers using your phone</title>
   <link href="http://chris.dzombak.name/blog/2011/02/find-open-caen-computers-using-your-phone.html"/>
   <updated>2011-02-23T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2011/02/find-open-caen-computers-using-your-phone</id>
   <content type="html">&lt;p&gt;Any University of Michigan engineering student is familiar with the process of finding an open CAEN (UM's engineering computer network) computer in the library or other engineering buildings - you walk around for 5 or 10 minutes until you find one.&lt;/p&gt;

&lt;p&gt;After using that process a few hundred times, I finally got annoyed enough to do something about it. I skipped a Theory of Computation recitation one afternoon to implement an email/SMS interface which one can use to check the utilization of all CAEN labs in a building.&lt;/p&gt;

&lt;p&gt;CAEN &lt;a href=&quot;http://www.engin.umich.edu/htbin/wwwhostinfo&quot;&gt;provides realtime computer status here&lt;/a&gt;. The HTML is kind of ugly and scraping it was messy; my scraper uses a combination of HTML Tidy and PHP's DOM/XPath functionality. My service pulls an updated status from CAEN every two minutes.&lt;/p&gt;

&lt;p&gt;I've posted directions on using the service &lt;a href=&quot;http://magictxt.net/caen&quot;&gt;on this page&lt;/a&gt;. Any issues can be reported to me at &lt;a href=&quot;mailto:chris@chrisdzombak.net&quot;&gt;chris@chrisdzombak.net&lt;/a&gt;. The service should work with most US cell phone providers.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Moving from Wordpress to Jekyll (and a new design)</title>
   <link href="http://chris.dzombak.name/blog/2011/02/moving-from-wordpress-to-jekyll.html"/>
   <updated>2011-02-09T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2011/02/moving-from-wordpress-to-jekyll</id>
   <content type="html">&lt;p&gt;Over the last few months, I got really tired of the old design and terrible performance of this site. A redesign was clearly in order. We use Jekyll at Nutshell, and I've started to like it, so I figured I'd try using it for this site.&lt;/p&gt;

&lt;p&gt;I had decided a long time ago that the next iteration of this site would focus on my activity across various social networks, since that's where most of my online activity is. (I rarely blog.) I created a clean, new design with a social-network-focused home page and lightweight content pages. To all the designers reading this: any critique is welcomed!&lt;/p&gt;

&lt;p&gt;The site is now nearly done. I have some content updates to complete, and eventually I might clean up some of the CSS (it's a mess right now), but I'm content with this site as it is now.&lt;/p&gt;

&lt;p&gt;I figured I would share some useful things in the hope that I help someone else deploy a Jekyll-based site on Dreamhost. I assume basic familiarity with Jekyll and Liquid templating; I just cover some of the trickier points here. I'll also refer you to &lt;a href=&quot;http://www.delicious.com/cdzombak/jekyll&quot;&gt;my delicious boookmarks about Jekyll&lt;/a&gt; for &lt;strong&gt;a lot&lt;/strong&gt; of useful info.&lt;/p&gt;

&lt;p&gt;I'll update this post over the next week or so as I remember important stuff (I really should have started writing this two weeks ago when I started redoing the site).&lt;/p&gt;

&lt;h2&gt;Importing from Wordpress&lt;/h2&gt;

&lt;p&gt;To get my posts from Wordpress to Jekyll, I had to export from Wordpress to an XML file. I initially tried importing from MySQL using the importer included with Jekyll, but I couldn't get the importer to run on my (Windows) machine. (I blame that mainly on my unfamiliarity with Ruby, etc.)&lt;/p&gt;

&lt;p&gt;I then used the Ruby script from &lt;a href=&quot;https://gist.github.com/500506&quot;&gt;this Gist&lt;/a&gt; to convert from the XML into post files (with Textile markup). They required some manual cleanup, but it wasn't too bad.&lt;/p&gt;

&lt;p&gt;For comments, I simply installed the Disqus Wordpress plugin and let it import all my comments. I knew I'd be keeping the post URLs the same, and this is how Disqus identifies posts on your Jekyll-based site. You will run into horrible issues if you try to change your post URLs. To keep the URLs the same, you'll need to add a line to your &lt;code&gt;_config.yml&lt;/code&gt; with something that matches your current permalink structure:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;permalink: /blog/:year/:month/:title.html
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Generating a Sitemap&lt;/h2&gt;

&lt;p&gt;Generating a sitemap was easy thanks to &lt;a href=&quot;http://recursive-design.com/projects/jekyll-plugins/&quot;&gt;the generate_sitemap plugin from recursive design&lt;/a&gt;. Remember to edit the plugin to use your own domain!&lt;/p&gt;

&lt;p&gt;I did, however, find that Jekyll wouldn't run the plugin unless you run Jekyll from the site source directory.&lt;/p&gt;

&lt;h2&gt;Deploying on DreamHost&lt;/h2&gt;

&lt;p&gt;I wanted something like Github Pages, where I could checkout my site's source from anywhere and the site would be regenerated whenever I push to the source repo. This works really well for me since I do a lot of work from my desktop, netbook, and the computers in UMich's libraries.&lt;/p&gt;

&lt;p&gt;First, you'll need to get Jekyll installed on your Dreamhost account. This requires a newer version of gem than is installed by default (as of Feb 8, 2011). This isn't too difficult; &lt;a href=&quot;http://wiki.dreamhost.com/RubyGems&quot;&gt;these instructions on the Dreamhost wiki&lt;/a&gt; should get you started.&lt;/p&gt;

&lt;p&gt;I needed to add my gems bin directory to my path in order to run Jekyll. After installing everything, the relevant part of my &lt;code&gt;.bashrc&lt;/code&gt; looks like this:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;$HOME/local/bin:$HOME/local/gems/bin:$PATH&amp;quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;$HOME/local/lib&amp;quot;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GEM_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;$HOME/local/gems&amp;quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GEM_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;$GEM_HOME:/usr/lib/ruby/gems/1.8&amp;quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;RUBYLIB&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;$HOME/local/lib:$RUBYLIB&amp;quot;&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PYTHONPATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;$HOME/local/lib/python:/usr/lib/python2.5&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;(I install everything to &lt;code&gt;~/local&lt;/code&gt; instead of just &lt;code&gt;~&lt;/code&gt; to keep my home directory cleaner; I don't need to see &lt;code&gt;bin&lt;/code&gt;, &lt;code&gt;lib&lt;/code&gt;, etc. all the time.&lt;/p&gt;

&lt;p&gt;You should make sure that you modify the path in &lt;code&gt;.bashrc&lt;/code&gt; and &lt;code&gt;.bash_profile&lt;/code&gt; so that these changes take effect for both interactive and non-interactive shells. I usually do this by making all my changes in &lt;code&gt;.bashrc&lt;/code&gt; and including something like this in &lt;code&gt;.bash_profile&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; -f ~/.bashrc &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;; &lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
    . ~/.bashrc
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;You can follow &lt;a href=&quot;http://tatey.com/2009/04/29/jekyll-meets-dreamhost-automated-deployment-for-jekyll-with-git/&quot;&gt;these instructions from Tate Johnson&lt;/a&gt; to set up the git hook for deployment. Note that you'll want to use Python 2.5 for Pygments (not 2.3 as indicated) and the latest version of Pygments.&lt;/p&gt;

&lt;p&gt;I made two important changes to the generation script from Tate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change to the temporary clone directory before generating. I found that jekyll won't execute plugins unless you're running it from the site source directory.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;$RANDOM&lt;/code&gt; to the temporary clone directory name to reduce the chances of a naming conflict.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Here's the updated generation script:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;GIT_REPO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/site.src/chris.dzombak.name.git
&lt;span class=&quot;nv&quot;&gt;TMP_GIT_CLONE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/temp/chris.dzombak.name.&lt;span class=&quot;nv&quot;&gt;$RANDOM&lt;/span&gt;/
&lt;span class=&quot;nv&quot;&gt;PUBLIC_WWW&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/web/chris.dzombak.name/

git clone &lt;span class=&quot;nv&quot;&gt;$GIT_REPO&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$TMP_GIT_CLONE&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;pushd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$TMP_GIT_CLONE&lt;/span&gt;
jekyll &lt;span class=&quot;nv&quot;&gt;$PUBLIC_WWW&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;popd&lt;/span&gt;

rm -Rf &lt;span class=&quot;nv&quot;&gt;$TMP_GIT_CLONE&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h2&gt;High Performance with Jekyll&lt;/h2&gt;

&lt;p&gt;Thanks to Jekyll, I have achieved my goal of a high-performance site. This graph shows the time (in milliseconds) it took Google to download pages from the site for indexing:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/blog/2011/02/name-timedownloading-ms.png&quot; title=&quot;Time spent downloading a page (in milliseconds)&quot; alt=&quot;Time spent downloading a page (in milliseconds)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The precipitous drop at the end of January is when I made the switch from Wordpress to Jekyll.&lt;/p&gt;

&lt;h2&gt;Comments Welcomed&lt;/h2&gt;

&lt;p&gt;Any comments/questions are welcomed.&lt;/p&gt;

&lt;p&gt;I know I wanted to write about more than is included in this post, but at the moment I can't remember what else I wanted to include. I'll update this post over the next week or so as I think of additional topics to cover.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>UMich Google Calendar Updated for Winter 2011</title>
   <link href="http://chris.dzombak.name/blog/2010/12/umich-google-calendar-updated-for-winter-2011.html"/>
   <updated>2010-12-09T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2010/12/umich-google-calendar-updated-for-winter-2011</id>
   <content type="html">&lt;p&gt;I have updated my public &lt;a href=&quot;http://chris.dzombak.name/umich-calendar/&quot;&gt;Google Calendar for the University of Michigan&lt;/a&gt; for the winter 2011 semester.&lt;br /&gt;
Find information about the calendar and how to use it &lt;a href=&quot;http://chris.dzombak.name/umich-calendar/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Chili Recipe</title>
   <link href="http://chris.dzombak.name/blog/2010/10/chili-recipe.html"/>
   <updated>2010-10-12T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2010/10/chili-recipe</id>
   <content type="html">&lt;p&gt;I made up a recipe for chili last weekend, and it actually turned out really well, so I thought I&amp;#8217;d post it here.  It&amp;#8217;s pretty fast and really simple.&lt;br /&gt;
This recipe makes about 4 good-sized meals.&lt;br /&gt;
h2. Ingredients&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;1-ish lb ground beef (I used 90% lean beef; you can use whatever you like.)&lt;/li&gt;
	&lt;li&gt;Packet of chili seasoning&lt;/li&gt;
	&lt;li&gt;32 oz (2 cans) Bush&amp;#8217;s Best Chili Beans, medium sauce&lt;/li&gt;
	&lt;li&gt;14.5 oz (1 can) Hunt&amp;#8217;s stewed tomatoes (I&amp;#8217;ll probably use two cans of these next time.)&lt;/li&gt;
	&lt;li&gt;15 oz (1 can) corn&lt;/li&gt;
	&lt;li&gt;Any other random vegetables you want (bell peppers, etc.)&lt;/li&gt;
	&lt;li&gt;Spices: chili powder, ground red cayenne pepper, cumin&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Directions&lt;/h2&gt;
&lt;p&gt;Defrost the beef and start cooking it in a pan.  Add the packet of chili seasoning when the beef is almost done.&lt;br /&gt;
While the beef is cooking, dump all the cans of beans, vegetables, etc. into a large pot and start heating it.&lt;br /&gt;
If you timed it right, the beef will be done cooking just as the pot of vegetables starts boiling.&lt;br /&gt;
Mix the beef into the pot of canned stuff.  Add plenty of chili powder, a lot of cumin, and a little red cayenne powder to taste. (Note: ground red cayenne pepper is &lt;strong&gt;really&lt;/strong&gt; spicy, even if you really like spicy foods. Go easy on it at first, anyway. Trust me.)&lt;br /&gt;
Then wait for the chili to cool to a reasonable temperature, add more chili powder, and eat it.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Michigan Asst. AG Shirvell appeared at protest in May to defame Armstrong</title>
   <link href="http://chris.dzombak.name/blog/2010/09/shirvell-armstrong-protest.html"/>
   <updated>2010-09-29T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2010/09/shirvell-armstrong-protest</id>
   <content type="html">&lt;p&gt;You may have heard (since &lt;a href=&quot;http://www.cnn.com/2010/US/09/28/michigan.justice.blog/index.html?iref=allsearch&quot;&gt;Anderson Cooper recently reported on this story&lt;/a&gt;) that an assistant attorney general for the state of Michigan, Andrew Shirvell, has undertaken a personal campaign to defame and harass the Michigan Student Assembly&amp;#8217;s current president, openly gay student Chris Armstrong.&lt;/p&gt;
&lt;p&gt;If you haven&amp;#8217;t heard about this yet, a simple &lt;a href=&quot;http://news.google.com/news/search?aq=f&amp;pz=1&amp;cf=all&amp;ned=us&amp;hl=en&amp;q=shirvell&quot;&gt;Google News search&lt;/a&gt; &lt;a href=&quot;http://www.annarbor.com/news/cox-rebukes-worker-whose-blog-slams-gay-student-read-more-cox-rebukes-worker-whose-blog-slams-michig/&quot;&gt;turns up&lt;/a&gt; &lt;a href=&quot;http://www.huffingtonpost.com/2010/09/29/andrew-shirvell-assistant_n_743953.html&quot;&gt;plenty&lt;/a&gt; &lt;a href=&quot;http://www.salon.com/news/politics/war_room/2010/09/29/anderson_cooper_anti_gay_shirvell/&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;http://www.advocate.com/News/Daily_News/2010/09/16/State_Official_Bullies_College_Student/&quot;&gt;articles&lt;/a&gt;.  Many of these were written &lt;a href=&quot;http://www.cnn.com/2010/US/09/28/michigan.justice.blog/index.html?iref=allsearch&quot;&gt;after Anderson Cooper talked with Shirvell on Cooper&amp;#8217;s show AC360°&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As I read about this, I recalled something from a news story I photographed several months ago.&lt;/p&gt;
&lt;p&gt;In May 2010, local theatre company Ann Arbor Civic Theatre staged a production of &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Laramie_Project&quot;&gt;The Laramie Project&lt;/a&gt;.  A group from the (in)famous Westboro Baptist Church, well-known for its anti-homosexual agenda, travels the country to picket outside productions of this play, and they planned to picket the A2CT show in May.  Ultimately, they didn&amp;#8217;t show up, but a crowd of about 100 people did show up to counter-protest and spread their message of love.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you&amp;#8217;d like, you can &lt;strong&gt;&lt;a href=&quot;#downloadphotos&quot;&gt;skip ahead to download these photos&lt;/a&gt;&lt;/strong&gt;. Please share them wherever you&amp;#8217;d like.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then-newly-elected &lt;span class=&quot;caps&quot;&gt;MSA&lt;/span&gt; President Chris Armstrong was to appear at the counter-protest, and unlike the &lt;span class=&quot;caps&quot;&gt;WBC&lt;/span&gt; he did show up to speak to the crowd.&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Chris Armstrong&quot; src=&quot;/img/blog/2010/09/CDZ_8930.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;338&quot; /&gt;&lt;/p&gt;
&lt;p&gt;While I was there, I noticed some guy who didn&amp;#8217;t seem to fit with the rest of the crowd.  He seemed to have a personal agenda of hating Chris Armstrong for no particular reason.&lt;/p&gt;
&lt;p&gt;So when I watched the story on &lt;span class=&quot;caps&quot;&gt;CNN&lt;/span&gt;, I thought to myself, &amp;#8220;Hmm&amp;#8230;could that be the same guy?&amp;#8221;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Andrew Shirvell&quot; src=&quot;/img/blog/2010/09/CDZ_8959-2.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;386&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As it turns out, it is the same guy.  Assistant Attorney General for the state of Michigan, Andrew Shirvell, made the trip from Lansing to Ann Arbor on a Saturday afternoon to hold this sign stating that the University of Michigan Student Assembly president, Chris Armstrong, is a racist and a liar.  Yes, Michigan citizens, your tax dollars pay this guy&amp;#8217;s salary (thanks to Attorney General Mike Cox, who as of this writing has spoken against Shirvell&amp;#8217;s actions but refused to fire him).&lt;/p&gt;
&lt;p&gt;Here are a few more photos I had originally published from the counter-protest showing Chris Armstrong and Andrew Shirvell in the same photo:&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Armstrong @ WBC Counterprotest&quot; src=&quot;/img/blog/2010/09/CDZ_8959.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;344&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Armstrong @ WBC Counterprotest&quot; src=&quot;/img/blog/2010/09/CDZ_8972.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;335&quot; /&gt;&lt;/p&gt;
&lt;p&gt;And one last photo of Shirvell, standing against the crowd of love-supporters:&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;Shirvell @ WBC Counterprotest&quot; src=&quot;/img/blog/2010/09/CDZ_8937.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;335&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The folks at PrideSource &lt;a href=&quot;http://www.pridesource.com/article.html?article=41510&quot;&gt;noticed and reported on Shirvell at this protest back in May&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;downloadphotos&quot;&gt;View and Download These (and more) Photos&lt;/h2&gt;
&lt;p&gt;All my published photos from this counterprotest are &lt;a href=&quot;http://www.flickr.com/photos/chrisdzombak/sets/72157624024214410/&quot;&gt;viewable on Flickr&lt;/a&gt; and &lt;a href=&quot;http://www.demotix.com/news/326463/pro-gay-rally-production-laramie-project&quot;&gt;available on Demotix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Additionally, I&amp;#8217;m making the (high-res) photos published in this post free for anyone to download and use. You can download them here: &lt;a href=&quot;/files/shirvell_wbc_counterprotest_may2010.zip&quot;&gt;shirvell_wbc_counterprotest_may2010.zip&lt;/a&gt;. Post them wherever; pass them along.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>You can't read everything.</title>
   <link href="http://chris.dzombak.name/blog/2010/08/you-cant-read-everything.html"/>
   <updated>2010-08-25T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2010/08/you-cant-read-everything</id>
   <content type="html">&lt;p&gt;Information is flying everywhere these days.  The mainstream adoption of &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt;/Atom feeds and (more recently) &lt;code&gt;Twitter has led to the production - and consumption - of more content than at any time in the past.
That's a bit of a problem.  I like to read, and over the last several years my reading has increasingly taken place online.
My Google Reader subscriptions, for example, include many (probably over a hundred; I'm not sure) blogs which all constantly produce high-quality content.  Most of them are photography blogs, but I also read many blogs about computers, graphic design, the Web, chemistry, medicine, and politics/news.  I try to keep myself a well-rounded person, and indeed I find all these blogs interesting. (I'll admit that many of &amp;lt;a href=&quot;http://pipeline.corante.com/&quot;&amp;gt;Derek Lowe&amp;lt;/a&amp;gt;'s musings on organic chemistry in the pharmaceutical world are above my head, but I quite enjoy the blog nonetheless.)
At least, that was my Google Reader situation until very recently, when I realized there was so much information coming in on a weekly basis I couldn't possibly read it all.  I also realized that (partly because of this) I hadn't even bothered reading many of my favorite blogs in months.
Therein lies the problem.  Clearly, I needed to unsubscribe from many of those feeds, and I also had to give up on reading all the posts which had queued up while I ignored Reader.  Doing this was hard, since as I noted before, each of these blogs interested me and had a pretty high signal-to-noise ratio.  But I had to realize that there was no way I could possibly read all of them.  It was kind of difficult to accept this at first, but really there's nothing else one could do.
Since the majority of the blogs I subscribed to were photography-related, I started cutting there and then moved on to the rest of my feeds.  I'm still working on cutting out all but the very best blogs - with high signal-to-noise ratios and consistently informative, high-quality content - but still I've made very good progress.
I'm also doing something similar (though on a lesser scale) with my Twitter account (&lt;/code&gt;cdzombak).  That one isn&amp;#8217;t as crowded because I don&amp;#8217;t subscribe to many &amp;#8220;noisy&amp;#8221; people/sites on Twitter.  It helps that I also have a private Twitter account I use solely for communicating with close personal friends, so achieving a really good signal-to-noise ratio with my public account doesn&amp;#8217;t seem as important.&lt;br /&gt;
And in a similar vein, I&amp;#8217;ve been unsubscribing from nearly every mass mailing that finds its way to my email inbox.  I&amp;#8217;ve been thinking recently that email ought to be more like the telephone or snail mail (minus telemarketers and junk mail) &amp;#8211; reserved for communication between actual people. Weeding out everything else lets me focus better on communicating quickly and effectively with people who actually need my attention.&lt;br /&gt;
(Exception: I still subscribe to daily news emails from the New York Times and &lt;span class=&quot;caps&quot;&gt;NPR&lt;/span&gt;.)&lt;br /&gt;
I hope that accepting the idea that I can&amp;#8217;t read everything, and drastically narrowing the number of content-producers I follow online, will allow (and motivate) me to spend more time consuming offline media &amp;#8211; that is, reading books and magazines. I subscribe to two magazines (National Geographic and American Photo) and I almost find time to read them in detail; one of my goals for the next few months is to put more time into reading National Geographic in particular.  Another of my near-future goals is to read more books; I have a few in mind (Richard Florida&amp;#8217;s &lt;em&gt;The Rise of the Creative Class&lt;/em&gt; and Max Gergel&amp;#8217;s autobiographies are some of the items on my reading list).&lt;br /&gt;
&lt;em&gt;Further, probably better-written, reading: &lt;a href=&quot;http://www.diovo.com/2010/08/books-vs-blogs/&quot;&gt;Books and Blogs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Datasheet for RadioShack Phototransistor</title>
   <link href="http://chris.dzombak.name/blog/2010/08/datasheet-for-radioshack-phototransistor.html"/>
   <updated>2010-08-19T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2010/08/datasheet-for-radioshack-phototransistor</id>
   <content type="html">&lt;p&gt;As far as I can tell, RadioShack sells exactly &lt;a href=&quot;http://www.radioshack.com/product/index.jsp?productId=2049724&quot;&gt;one infrared phototransistor&lt;/a&gt;. (They've really moved away from selling electronic parts in recent years, which in my opinion is too bad.) I recently bought one for a project; I didn't have the time to order it from one of my usual suppliers (plus, shipping would cost many times the cost of the part). The RadioShack part number is 276-145 or 276-0145, depending on which part of the website you're looking at.&lt;/p&gt;

&lt;p&gt;Of course, this phototransistor comes with no documentation, and there's no manufacturer specified so you have essentially no hope of finding a complete datasheet. I did some digging on the Web, though, and I was able to find a little more information about this part.&lt;/p&gt;

&lt;p&gt;On the RadioShack site, I found &lt;a href=&quot;http://support.radioshack.com/support_supplies/doc32/32130.htm&quot;&gt;some specifications for the phototransistor&lt;/a&gt; as well as &lt;a href=&quot;http://support.radioshack.com/support_supplies/doc32/32129.htm&quot;&gt;a short summary of features&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I am also going to reproduce the data here, in case that site is reorganized or the data becomes unavailable for some other reason.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Phototransistor
(276-0145)                   Specifications           Faxback Doc. # 32130

ABSOLUTE MAXIMUM RATINGS (25 Degrees C)

Collector to Emitter Sustaining Voltage (Vce):........................30 V
Emitter to Collector Breakdown Voltage:................................5 V
Collector Current:...................................................25 mA
Operating Temperature Range:..........................-40 to +85 Degrees C
Storage Temperature Range:............................-40 to +85 Degrees C
Lead Soldering Temperature (1/16 inch from case for 5 sec):..240 Degrees C
Relative Humidity at 85 Degrees C:.....................................85%
Power Dissipation at or below 25 Degrees C Free Air Temperature:....100 mW

ELECTRICAL CHARACTERISTICS

Dark Current (Vce = 15 V):..........................................100 nA
Light Current (Vce = 5 V, H = 20 mW/cm):.............................20 nA
Collector to Emitter Saturation Voltage:.............................0.4 V
Rise Time (10 to 90%):............................................5 microS
Fall Time (90 to 10%):............................................5 microS

Specifications are typical; individual units might vary.  Specifications
are subject to change without notice.

(IR-04/22/96)



Phototransistor
(276-0145)                   Features                 Faxback Doc. # 32129

This is a Silicon Nitride Passivated NPN planar phototransistor with
exceptional stable characteristics and high illumination sensitivity;
spectrally and mechanically matched with IR emitter.
(IR-04/22/96)
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>New PNC Bank Overdraft Solutions</title>
   <link href="http://chris.dzombak.name/blog/2010/07/new-pnc-bank-overdraft-solutions.html"/>
   <updated>2010-07-22T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2010/07/new-pnc-bank-overdraft-solutions</id>
   <content type="html">&lt;p&gt;With the new consumer financial protections that are going into effect very soon, PNC Bank will no longer offer overdraft coverage by default on checking accounts.  You'll need to opt-in if you want any sort of overdraft coverage.&lt;/p&gt;

&lt;p&gt;In researching the options, I found that PNC offers two forms of overdraft &quot;solutions&quot; that you can opt into.  (The information on these is found &lt;a href=&quot;https://www.pnc.com/webapp/unsec/Blank.do?siteArea=/pnccorp/PNC/pncbk/Overdraft+Solutions&amp;amp;WT.ac=ODP_0510_P_LN&quot;&gt;here on the PNC site&lt;/a&gt;.)  One of the options seems much more consumer-friendly than the other, and it seems like PNC is making it as difficult as possible to find information about it and opt into it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: you should double-check everything with the PNC site and talk with one of their customer service people before taking any action based on this info. I'm presenting information here based on my own experience with PNC and the questions I've asked their customer service people.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Option 1: Overdraft Coverage&lt;/h2&gt;

&lt;p&gt;The first option PNC offers, and the one they seem to really want you to use, is called &quot;Overdraft Coverage&quot;.  This is the coverage that we're used to from before the consumer protections: if you overdraft, the bank charges you an exorbitant fee (around $35) and gives you a short-term loan that covers the amount of the overdraft.&lt;/p&gt;

&lt;p&gt;There's a lot of information on their site (linked above) about this option, and it's easy to opt into it from the online banking interface.&lt;/p&gt;

&lt;h2&gt;Option 2: Overdraft Protection&lt;/h2&gt;

&lt;p&gt;The second, more consumer-friendly solution is called &quot;Overdraft Protection&quot;.  With this option, when you overdraft your checking account, PNC will deduct the overdraft from your savings account.  The fee for this is $10 per overdraft - less than 1/3 the fee for &quot;overdraft coverage&quot;.  (This is presumably because the bank isn't technically loaning you money. They just charge you $10 for the benefit of using your own money - how nice! &lt;em&gt;&lt;/sarcasm&gt;&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;There's not much information on the PNC site about this option.  PNC mentions that it exists and provides a basic summary, but there is &lt;em&gt;no&lt;/em&gt; in-depth information online.  You're told to contact customer service for information or to opt-in.  You can't opt into this protection from the online banking interface, either.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;It's pretty clear to me that PNC would like you to enroll in &quot;overdraft coverage&quot; - they have much more information about this option on their site, and you can get information and opt in using the online banking interface.  It's obvious why this might be - the bank makes more than 3 times the profit if you overdraft using this coverage rather than &quot;overdraft protection&quot;.&lt;/p&gt;

&lt;p&gt;If you're looking for some form of overdraft solution, I'd recommend that you ask customer service for information about &quot;overdraft protection&quot; and strongly consider that option - it's much, much more consumer-friendly.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Once Upon a Time in Afghanistan</title>
   <link href="http://chris.dzombak.name/blog/2010/06/once-upon-a-time-in-afghanistan.html"/>
   <updated>2010-06-17T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2010/06/once-upon-a-time-in-afghanistan</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;A half-century ago, Afghan women pursued careers in medicine; men and women mingled casually at movie theaters and university campuses in Kabul; factories in the suburbs churned out textiles and other goods. There was a tradition of law and order, and a government capable of undertaking large national infrastructure projects, like building hydropower stations and roads, albeit with outside help. Ordinary people  had a sense of hope, a belief that education could open opportunities for all, a conviction that a bright future lay ahead. All that has been destroyed by three decades of war, but it was real.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;from &lt;a href=&quot;http://www.foreignpolicy.com/articles/2010/05/27/once_upon_a_time_in_afghanistan&quot;&gt;Once Upon a Time in Afghanistan&lt;/a&gt; by Mohammad Qayoumi&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An interesting and thought-provoking article and photos.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Building OpenSSL with Symbol Versioning</title>
   <link href="http://chris.dzombak.name/blog/2010/03/building-openssl-with-symbol-versioning.html"/>
   <updated>2010-03-14T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2010/03/building-openssl-with-symbol-versioning</id>
   <content type="html">&lt;p&gt;I compiled OpenSSL on my Dreamhost account to support my local installation of Git, PHP, Rails, and Redmine, among other things.&lt;/p&gt;

&lt;p&gt;However, whenever I ran git (or a few other programs which depended on OpenSSL), I got several messages like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git: /home/chris/local/lib/libcrypto.so.0.9.8: no version information available (required by git)
git: /home/chris/local/lib/libssl.so.0.9.8: no version information available (required by git)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The software worked properly, but the these messages were quite annoying, and it was clear that something wasn't quite right.  I won't go into the details of symbol versioning here.&lt;/p&gt;

&lt;p&gt;Some research revealed that some people have had similar issues, but many solutions simply involved copying &quot;working&quot; versions of these libraries over the nonworking ones, which isn't possible in this situation (and is a hackish solution at best).  The closest to a solution I found was &lt;a href=&quot;http://lists.alioth.debian.org/pipermail/pkg-openssl-devel/2006-December/001021.html&quot;&gt;this December 2006 post&lt;/a&gt; on the Debian mailing list in which one of Debian's OpenSSL maintainers mentions that you should add a line to Configure and that you need the file openssl.ld.&lt;/p&gt;

&lt;p&gt;I've now figured out how to build OpenSSL 0.9.8l on Debian (specifically, in my home directory at Dreamhost) with symbol versioning.&lt;/p&gt;

&lt;p&gt;The patch file mentioned below is very simple and changes a few lines in the Makefile and the Configure script; &lt;a href=&quot;http://chris.dzombak.name/files/openssl/openssl-0.9.8l-symbolVersioning.diff&quot;&gt;click here&lt;/a&gt; to download the file and look at it yourself to see exactly what changes.  This patch file is not specific to Dreamhost's environment; it should work wherever you want to build OpenSSL.&lt;/p&gt;

&lt;p&gt;This procedure will install OpenSSL in your &lt;code&gt;~/local/lib&lt;/code&gt;.  You should create the directory tree &lt;code&gt;~/local/src&lt;/code&gt; if it doesn't exist already.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/local/src
wget http://www.openssl.org/source/openssl-0.9.8l.tar.gz
tar xzvf openssl-0.9.81.tar.gz
wget http://chris.dzombak.name/files/openssl/openssl-0.9.8l-symbolVersioning.diff
patch -p0 &amp;lt; openssl-0.9.8l-symbolVersioning.diff
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;openssl-0.9.81
./config shared zlib --prefix&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;/local
make
make &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt;
make install
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This solution seems to be working for me, and I've documented it here in the hopes that it'll save someone the time it took me to figure it out.  The patch file should be pretty easily adapted to future versions of OpenSSL as well.&lt;/p&gt;

&lt;h2&gt;Additional Links&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://rt.openssl.org/Ticket/Display.html?id=1222&amp;amp;user=guest&amp;amp;pass=guest&quot;&gt;OpenSSL bug #1222&lt;/a&gt; (adding versioned symbols)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://packages.debian.org/lenny/openssl&quot;&gt;Debian OpenSSL package&lt;/a&gt; (Looking at the patch from here is how I eventually got this working.)&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Music Library Management</title>
   <link href="http://chris.dzombak.name/blog/2010/03/music-library-management.html"/>
   <updated>2010-03-07T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2010/03/music-library-management</id>
   <content type="html">&lt;p&gt;Keeping your digital music library organized is important for several reasons, but it's often overlooked because it takes time and most people don't think it's worth it.  I'm hoping this quick post on the organizational methods and tools I use can be helpful and can save you a lot of time in organizing your library.&lt;/p&gt;

&lt;h2&gt;Organization&lt;/h2&gt;

&lt;p&gt;My music library is organized by folders in the format &lt;code&gt;Music/Artist/Album&lt;/code&gt;. Pretty simple.  Filenames are in the format &lt;code&gt;&amp;lt;track&amp;gt; - &amp;lt;title&amp;gt;.mp3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For multiple-disc albums, I still only have one folder for the whole album, and then the files are named &lt;code&gt;&amp;lt;disc&amp;gt;.&amp;lt;track&amp;gt; - &amp;lt;title&amp;gt;.mp3&lt;/code&gt;.  This makes more sense (to me, anyway) than having separate folders for each disc - it's all the same album, anyway.&lt;/p&gt;

&lt;p&gt;I still don't have any good way to take care of Various Artists albums, though.&lt;/p&gt;

&lt;p&gt;There's also a &lt;code&gt;Music/Soundtracks&lt;/code&gt; folder, which contains a folder for each soundtrack I own.  This seems like a more logical way to organize these than by artist.&lt;/p&gt;

&lt;h2&gt;Tools&lt;/h2&gt;

&lt;p&gt;For collection of music, I use either &lt;a href=&quot;http://www.exactaudiocopy.de/&quot;&gt;Exact Audio Copy&lt;/a&gt; or &lt;a href=&quot;http://www.amazon.com/MP3-Music-Download/b/ref=sa_menu_dmusic2?ie=UTF8&amp;amp;node=163856011&quot;&gt;Amazon MP3&lt;/a&gt;. Exact Audio Copy rips CDs with the highest accuracy possible.  I usually rip to 256 or 320kbps MP3s.  Amazon MP3 is great because it provides 256kbps MP3s with no DRM (both advantages over iTunes).  Even better, it's not too expensive and you're still supporting the artists.&lt;/p&gt;

&lt;p&gt;Once I've obtained MP3s via any avenue (except Amazon MP3), I run the album through &lt;a href=&quot;http://musicbrainz.org/doc/PicardDownload&quot;&gt;MusicBrainz Picard&lt;/a&gt; to ensure that all the ID3 tags are accurate.  Sometimes, though, I need to resort to fixing parts of tags manually.  (I don't do this with Amazon MP3s because files from that service are already accurately tagged.)&lt;/p&gt;

&lt;p&gt;I use &lt;a href=&quot;http://www.id3-tagit.de/&quot;&gt;ID3-TagIT&lt;/a&gt; to fix tags (especially adding the disc numbers to multi-disc albums) and rename files.  This program can rename files based on the ID3 tags, making renaming a bunch of music files super-easy. It can also organize files into a folder structure (like the one I described above) automatically based on the ID3 tags - great for taming an out-of-control music library.  This is a really great, powerful program, and I'm sad to see that it's no longer being maintained...I'll have to find a replacement eventually, I guess.  For now, though, it looks like it's still available.&lt;/p&gt;

&lt;p&gt;Before adding the files to my music player, one more step: I run them through &lt;a href=&quot;http://mp3val.sourceforge.net/&quot;&gt;mp3val&lt;/a&gt; to make sure there are no issues with the files which could cause skipping, etc. This isn't usually necessary with files from Exact Audio Copy or Amazon MP3, but it can't hurt, and it's invaluable for files from any other source. (mp3val is a command-line program, but there's a graphical interface available for Windows at the Web site.)&lt;/p&gt;

&lt;p&gt;Finally, you can add the files to your media player of choice. For iTunes, I use the free version of &lt;a href=&quot;http://albumbrowser.klarita.net/itfw.html&quot;&gt;iTunes Folder Watch&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;A Note&lt;/h2&gt;

&lt;p&gt;I know this looks like it would take a long time, but once you get the hang of it, it really only adds a minute or two to the process of importing each album - a small price to pay for a well-organized and maintained music library.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Schneier on Airport Security</title>
   <link href="http://chris.dzombak.name/blog/2010/01/schneier-on-airport-security.html"/>
   <updated>2010-01-09T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2010/01/schneier-on-airport-security</id>
   <content type="html">&lt;p&gt;Security expert Bruce Schneier has made several interesting and insightful posts on his blog over the last few weeks about airport security and security theater.  These are a few you should check out:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.schneier.com/blog/archives/2010/01/christmas_bombe.html&quot;&gt;Christmas Bomber: Where Airport Security Worked&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.schneier.com/blog/archives/2010/01/airport_securit_12.html&quot;&gt;Post-Underwear-Bomber Airport Security&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.schneier.com/blog/archives/2010/01/matt_blaze_on_t.html&quot;&gt;Matt Blaze on the New &amp;#8220;Unpredictable&amp;#8221; &lt;span class=&quot;caps&quot;&gt;TSA&lt;/span&gt; Screening Measures&lt;/a&gt;&lt;/li&gt;&lt;/p&gt;
&lt;/ul&gt;
&lt;p&gt;I also highly recommend that you follow his blog.  He&amp;#8217;s a respected security guru, he knows what he&amp;#8217;s talking about, and it&amp;#8217;s usually very interesting to read his stuff.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Things I Don't Like About iPod/iTunes</title>
   <link href="http://chris.dzombak.name/blog/2009/11/things-i-dont-like-about-ipoditunes.html"/>
   <updated>2009-11-29T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2009/11/things-i-dont-like-about-ipoditunes</id>
   <content type="html">&lt;p&gt;My old faithful MP3 player's built-in, nonreplaceable li-ion battery finally died after 5 or 6 years.  I was surprised to find that there's basically no competition out there against the iPod Classic (at least, no competition for people who just need a basic MP3 player which holds a ton of music).  So I bought an iPod Classic 160GB which arrived the Wednesday before Thanksgiving.&lt;/p&gt;

&lt;p&gt;Overall, it works pretty well.  There are several issues, though, which are quite annoying and which make me question the entire &quot;Apple stuff just works&quot; paradigm.&lt;/p&gt;

&lt;h2&gt;iTunes - no useful log of sync issues&lt;/h2&gt;

&lt;p&gt;iTunes will helpfully tell me that 66 of my tracks can't be synced to my iPod because they can't be found.  It will even list these tracks in a dialog box for me.  The problem is that it doesn't let me save this list or even copy it for future reference.  For anything more than 2 or 3 songs (which you can feasibly write down or remember), this dialog box is completely useless.&lt;/p&gt;

&lt;h2&gt;iTunes - no folder monitoring&lt;/h2&gt;

&lt;p&gt;iTunes can't monitor my Music folder for changes.  Seriously, Apple, this is 2009, and every other music player on the planet can do this.  Is it so hard for you to believe that I might obtain music via methods other than the iTunes store or ripping CDs with iTunes?  (I am a devotee of the Amazon MP3 store, for example.)&lt;/p&gt;

&lt;h2&gt;Crashes while syncing&lt;/h2&gt;

&lt;p&gt;I have synced my iPod probably eight or ten times now in total.  Two of those have resulted in my computer completely crashing; once to a gray screen which required me to press Reset and once to a black screen from which Windows automatically restarted.  Obviously, this is a huge issue; I lose everything I have open (usually, many applications) and risk corrupting both my hard disc drives and my iPod.&lt;/p&gt;

&lt;p&gt;I'm using 64-bit Windows 7 and the latest version of iTunes 9.  I'm sure I'm not the only one using this combination.&lt;/p&gt;

&lt;h2&gt;iPod skips songs&lt;/h2&gt;

&lt;p&gt;I only noticed this with one of my albums, but I'd bet it happens with a few others I haven't yet listened to as well.  My iPod will consistently skip several songs when I try to play them.  It happens with specific songs from one album.  I tried restoring the iPod, which didn't work; the only solution was to re-rip the CD (using iTunes, of course).  iTunes could play these files, as could my old MP3 player and any other music player software I've ever used.  Really, Apple?&lt;/p&gt;

&lt;h2&gt;iPod has no FM radio&lt;/h2&gt;

&lt;p&gt;I knew this going in, but it would really be nice to have, and it's not rocket science. Still, since I knew this going in I can't really hold it against Apple.&lt;/p&gt;

&lt;h2&gt;iPod has no custom EQ&lt;/h2&gt;

&lt;p&gt;I did expect the iPod to let me create custom equalizer profiles.  I was disappointed to find that the only EQ the iPod provides are some preset profiles.  Apple really does adhere to their &quot;you get what we think you should have and NOTHING more&quot; philosophy, don't they?&lt;/p&gt;

&lt;h2&gt;And that's basically it.&lt;/h2&gt;

&lt;p&gt;There are some other, smaller things, but those are my main points.  All in all, I have to say that as a new Apple customer I have &lt;em&gt;not&lt;/em&gt; been very impressed at all.&lt;/p&gt;

&lt;p&gt;(This said, the iPod's interface does work pretty nicely.  That's one thing Apple seems to do well.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Quote of the Day</title>
   <link href="http://chris.dzombak.name/blog/2009/08/quote-of-the-day.html"/>
   <updated>2009-08-20T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2009/08/quote-of-the-day</id>
   <content type="html">&lt;blockquote&gt;
&lt;p&gt;Experimenting with a cool out-of-production &lt;em&gt;[film]&lt;/em&gt; emulsion is like cruising for chicks in a hospice&amp;#8212;you&amp;#8217;re just gonna to get your heart broken.&lt;br /&gt;
Found this quote while idly cruising one of my favorite photo forums: &lt;a href=&quot;http://photo.net/black-and-white-photo-film-processing-forum/004oaY&quot;&gt;thread here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 <entry>
   <title>Perfect ViewVC On Dreamhost</title>
   <link href="http://chris.dzombak.name/blog/2009/07/perfect-viewvc-on-dreamhost.html"/>
   <updated>2009-07-07T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2009/07/perfect-viewvc-on-dreamhost</id>
   <content type="html">&lt;p&gt;I recently set up an installation of ViewVC on my Dreamhost account.  I also found out how to implement a few useful features, and I'm going to share this process here in the hope that you find it useful and in the hope that I can find it when I want to do it again.&lt;/p&gt;

&lt;p&gt;This guide will require that you are comfortable doing basic things in the Linux shell (like creating directories, moving files, and basic text editing).  They assume that you are logged into the shell; that's required for the installation.&lt;/p&gt;

&lt;h2&gt;Part 1: Install ViewVC&lt;/h2&gt;

&lt;p&gt;I recommend creating three folders; &lt;code&gt;src&lt;/code&gt;, &lt;code&gt;bin&lt;/code&gt;, and &lt;code&gt;opt&lt;/code&gt;; in your home directory.  Keep program sources and installation files in &lt;code&gt;src&lt;/code&gt;, installed programs in &lt;code&gt;opt&lt;/code&gt;, and program binaries in &lt;code&gt;bin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Download ViewVC to your server (in your &lt;code&gt;~/src&lt;/code&gt; folder):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;wget http://viewvc.tigris.org/files/documents/3330/46029/viewvc-1.1.1.tar.gz@
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Extract the archive, change to the new directory, and then run:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;./viewvc-install@
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For the installation path, enter &lt;code&gt;/home/username/opt/viewvc-1.1.1&lt;/code&gt; or something like that.  Don't enter anything for &lt;code&gt;DESTDIR&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To make ViewVC Web-accessible, first create the subdomain and parent folder where you want ViewVC to reside.&lt;/p&gt;

&lt;p&gt;Note, though, that if you want &lt;code&gt;example.com/browse&lt;/code&gt; (for example) to be ViewVC, you don't need to actually create a folder called &lt;code&gt;browse&lt;/code&gt; - that folder is sort of a virtual directory we'll &quot;create&quot; in a few moments.  Also note that if you want ViewVC to be private, you need to create a (real) directory that will be password-protected (in Part 2).&lt;/p&gt;

&lt;p&gt;Then, copy &lt;code&gt;/home/username/opt/viewvc-1.1.1/bin/cgi/viewvc.cgi&lt;/code&gt; to that Web-accessible directory.&lt;/p&gt;

&lt;h2&gt;Part 2: Configuring ViewVC&lt;/h2&gt;

&lt;p&gt;You can follow &lt;a href=&quot;http://wiki.dreamhost.com/Password-protecting_directories&quot;&gt;Dreamhost's instructions on password-protecting directories&lt;/a&gt; to password-protect the directory in which you just installed &lt;code&gt;viewvc.cgi&lt;/code&gt;.  Easy as pie.&lt;/p&gt;

&lt;p&gt;Next, edit &lt;code&gt;/home/username/opt/viewvc-1.1.1/viewvc.conf&lt;/code&gt;.  The file is very well-documented; configure and customize as you see fit.&lt;/p&gt;

&lt;h2&gt;Part 3: Pretty URLs&lt;/h2&gt;

&lt;p&gt;There are two parts to pretty-URL setup.  First, go to the folder that contains viewvc.cgi and put this code into &lt;code&gt;.htaccess&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;apache&quot;&gt;&lt;span class=&quot;nb&quot;&gt;RewriteEngine&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;on&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;RewriteRule&lt;/span&gt; ^browse$ viewvc.cgi
&lt;span class=&quot;nb&quot;&gt;RewriteRule&lt;/span&gt; ^browse/(.*)$ viewvc.cgi/$1@
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Second, you have to tell ViewVC what its new name is.  In the same directory, edit &lt;code&gt;viewvc.cgi&lt;/code&gt;.  Go down, almost to the bottom of the file, and just before the comment &lt;code&gt;go do the work&lt;/code&gt; add:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;perl&quot;&gt;&lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;environ&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;#39;SCRIPT_NAME&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;/browse&amp;quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;@&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;h2&gt;Part 4: Template Modifications&lt;/h2&gt;

&lt;p&gt;This is entirely personal preference, but I wanted my name in ViewVC's footer with my email address.  To do this, edit &lt;code&gt;/home/username/opt/viewvc-1.1.1/templates/include/footer.ext&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I also wanted to get rid of the huge ViewVC logo on each page.  To do this, I just edited it out of &lt;code&gt;header.ext&lt;/code&gt; in the same folder.&lt;/p&gt;

&lt;h2&gt;Part 5: Pretty Code Colors&lt;/h2&gt;

&lt;p&gt;ViewVC uses the Pygments module for code coloring.  Of course, Dreamhost doesn't have this installed, but Python makes it easy to create a virtual environment and install &quot;eggs&quot; into it.&lt;/p&gt;

&lt;p&gt;First, tell bash to look for binaries in your custom &lt;code&gt;bin&lt;/code&gt; directory:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;${HOME}/bin:${PATH}&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;And add this line to &lt;code&gt;~/.bash_profile&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;${HOME}/bin:${PATH}&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Change to your &lt;code&gt;~/src&lt;/code&gt; directory and download virtualenv:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;wget http://pypi.python.org/packages/2.4/v/virtualenv/virtualenv-1.3.3-py2.4.egg
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Create a new directory called virtualenv-1.3.3-py2.4 and move &lt;code&gt;virtualenv-1.3.3-py2.4.egg&lt;/code&gt; into it.  Change into the directory.  These commands will then set up virtual environments for Python 2.5 and Python 2.4.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;unzip virtualenv-1.3.3-py2.4.egg
/usr/bin/python2.5 virtualenv.py &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;
/usr/bin/python2.4 virtualenv.py &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Python 2.5 at Dreamhost doesn't have Subversion bindings; 2.4 does.  We'll set up Pygments for 2.4:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;easy_install-2.4 Pygments
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Finally, change to the Web directory containing &lt;code&gt;viewvc.cgi&lt;/code&gt;.  Edit that file; change the top line to read:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;perl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;#!/home/username/bin/python2.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;And your pretty code colors magically happen.&lt;/p&gt;

&lt;h2&gt;Part 6: Make It Faster&lt;/h2&gt;

&lt;p&gt;You can make Apache serve static content like images and stylesheets; this is faster than letting &lt;code&gt;viewvc.cgi&lt;/code&gt; handle it.  Edit &lt;code&gt;/home/username/opt/viewvc-1.1.1/viewvc.conf&lt;/code&gt; and set the option &lt;code&gt;docroot = /viewvc_static&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the Dreamhost control panel, go to Domains =&gt; Remap Sub-Dir and create a mapping from &lt;code&gt;(your ViewVC domain/folder)/viewvc_static&lt;/code&gt; to &lt;code&gt;/home/username/opt/viewvc-1.1.1/templates/docroot&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Transformers 2: Critics Are Wrong</title>
   <link href="http://chris.dzombak.name/blog/2009/06/transformers-2-critics-are-wrong.html"/>
   <updated>2009-06-27T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2009/06/transformers-2-critics-are-wrong</id>
   <content type="html">&lt;p&gt;&lt;em&gt;To Whom It May Concern:&lt;/em&gt;&lt;br /&gt;
I did &lt;strong&gt;not *go to see Transformers 2 (Revenge of the Fallen) to see a nicely developed plot line with lots of attention to detail. I did *not *go to see some small, subtle special effects.&lt;br /&gt;
I went to see *robots and explosions&lt;/strong&gt;, and I got my &lt;strong&gt;robots and explosions&lt;/strong&gt;.  And giant battle scenes.  I&amp;#8217;m happy.&lt;br /&gt;
&lt;strong&gt;5/5&lt;/strong&gt; in my book.  If I wanted to be really harsh, I&amp;#8217;d give it 4.5/5 because there were a few scenes which were sort of a halfhearted attempt to be meaningful and touching.  Removing those would have left more time for &lt;strong&gt;robots and explosions&lt;/strong&gt;!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>University of Michigan Google Calendar</title>
   <link href="http://chris.dzombak.name/blog/2009/06/university-of-michigan-google-calendar.html"/>
   <updated>2009-06-26T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2009/06/university-of-michigan-google-calendar</id>
   <content type="html">&lt;p&gt;I have created a public Google Calendar which mirrors the University of Michigan&amp;#8217;s academic calendar.&lt;br /&gt;
The page for the project, including details on using the calendar, is here: &lt;a href=&quot;/umich-calendar&quot;&gt;UM Academic Calendar&lt;/a&gt;.&lt;br /&gt;
This makes schedule management much easier for those of us who use Google Calendar (or any iCal-compatible application) to track our calendars.  Go check it out today, and let me know if it&amp;#8217;ll be useful next year!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Advantages of a Typewriter as Compared to a Computer (for Word Processing)</title>
   <link href="http://chris.dzombak.name/blog/2009/05/advantages_of_a_typewriter.html"/>
   <updated>2009-05-15T00:00:00-04:00</updated>
   <id>http://chris.dzombak.name/blog/2009/05/advantages_of_a_typewriter</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Note: I am not actually recommending that you replace your computer with a typewriter.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm just sayin'...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On a typewriter, you can type wherever you want on the page without much hassle.&lt;/li&gt;
&lt;li&gt;Typewriters work during power outages and can't be damaged by nearby lightning. (Though if a typewriter were struck directly by lightning, it would not survive. A computer wouldn't either, of course; I'm just stating this for  completeness.)&lt;/li&gt;
&lt;li&gt;Typewriters won't run out of battery power.&lt;/li&gt;
&lt;li&gt;Typewriters do not get viruses or spyware.&lt;/li&gt;
&lt;li&gt;Typewriters don't need or security updates.&lt;/li&gt;
&lt;li&gt;You don't have to boot a typewriter before using it.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I recently got a typewriter, an old Underwood No. 5 which was manufactured in 1930. Photos can be found &lt;a href=&quot;http://www.flickr.com/photos/chrisdzombak/sets/72157619398502124/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Very Simple Dynamic DNS Client</title>
   <link href="http://chris.dzombak.name/blog/2009/01/very-simple-dynamic-dns-client.html"/>
   <updated>2009-01-25T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2009/01/very-simple-dynamic-dns-client</id>
   <content type="html">&lt;p&gt;I have recently found a need for a Dynamic DNS client for my desktop.  This, based on &lt;a href=&quot;http://jeremy.zawodny.com/blog/archives/010835.html&quot;&gt;a script from Jeremy Zawodny&lt;/a&gt;, is what I've come up with:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;T_USER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;TWITTER_USER
&lt;span class=&quot;nv&quot;&gt;T_PASS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;TWITTER_PASSWORD
&lt;span class=&quot;nv&quot;&gt;T_URL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;http://twitter.com/statuses/update.xml

&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$HOME&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;LAST_IP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;cat .last_ip&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;IP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;curl -s -o - http://ip.cdzombak.net/index.php&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$LAST_IP&lt;/span&gt; !&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$IP&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;; &lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Twitter @$T_USER...&amp;quot;&lt;/span&gt;
    curl -s -o /dev/null -u &lt;span class=&quot;nv&quot;&gt;$T_USER&lt;/span&gt;:&lt;span class=&quot;nv&quot;&gt;$T_PASS&lt;/span&gt; -d &lt;span class=&quot;nv&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;$IP&amp;quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$T_URL&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;FreeDNS...&amp;quot;&lt;/span&gt;
    curl -s http://freedns.afraid.org/dynamic/update.php?FREEDNS_UPDATE_KEY
    &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;$IP&amp;quot;&lt;/span&gt; &amp;gt; .last_ip
    &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Updated FreeDNS and @$T_USER to $IP&amp;quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This is, of course, a bash script - meaning it is for Linux systems.  It's supposed to be run via a cron job (mine is set to run every 5 minutes).  The script is very self-explanatory.&lt;/p&gt;

&lt;p&gt;Right now, it updates FreeDNS and a Twitter account with my latest IP.&lt;/p&gt;

&lt;p&gt;One note: if you use this, make sure that &lt;code&gt;~/.last_ip&lt;/code&gt; is not empty, even the first time you run the script.  This will cause the script to fail on line 12 - bash ends up trying to run something like &lt;code&gt;if [ != 67.186.45.67 ]&lt;/code&gt;, which is obviously not correct.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The New Whitehouse.gov</title>
   <link href="http://chris.dzombak.name/blog/2009/01/the-new-whitehousegov.html"/>
   <updated>2009-01-20T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2009/01/the-new-whitehousegov</id>
   <content type="html">&lt;p&gt;Right around noon, the Twitterverse was buzzing with links to the new &lt;a href=&quot;http://whitehouse.gov&quot;&gt;whitehouse.gov&lt;/a&gt;.  Kottke has a few geeky notes about it: &lt;a href=&quot;http://www.kottke.org/09/01/the-countrys-new-robotstxt-file&quot;&gt;The Country&amp;#8217;s New Robots.txt&lt;/a&gt;&lt;br /&gt;
He also &lt;a href=&quot;http://www.kottke.org/09/01/new-white-house-site&quot;&gt;notes &lt;/a&gt;that Wikipedia is &lt;a href=&quot;http://en.wikipedia.org/wiki/President_of_the_United_States&quot;&gt;updated&lt;/a&gt;, that third-party content on whitehouse.gov &lt;a href=&quot;http://www.whitehouse.gov/copyright/&quot;&gt;is CC-licensed&lt;/a&gt;, and that there&amp;#8217;s a &lt;a href=&quot;http://twitter.com/whitehouse_gov&quot;&gt;Twitter account&lt;/a&gt;.&lt;br /&gt;
I have homework to do now.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>FW: The Pale Blue Dot</title>
   <link href="http://chris.dzombak.name/blog/2009/01/the-pale-blue-dot.html"/>
   <updated>2009-01-15T00:00:00-05:00</updated>
   <id>http://chris.dzombak.name/blog/2009/01/the-pale-blue-dot</id>
   <content type="html">&lt;p&gt;&lt;em&gt;(one of the few email forwards I&amp;#8217;ve ever found interesting)&lt;/em&gt;&lt;br /&gt;
&lt;img title=&quot;Pale Blue Dot&quot; src=&quot;/img/blog/2009/01/image001.gif&quot; alt=&quot;Pale Blue Dot&quot; width=&quot;457&quot; height=&quot;614&quot; /&gt;&lt;br /&gt;
This narrow-angle color image of the Earth,  dubbed &amp;#8220;Pale Blue Dot&amp;#8221;, is a part of the first ever &amp;#8220;portrait&amp;#8221; of the solar system taken by  Voyager 1. The spacecraft acquired a total of 60 frames for a mosaic of the solar system from a distance of more than 4 billion miles from Earth and about 32 degrees above the ecliptic. From Voyager&amp;#8217;s great distance Earth is a mere point of light, less than the size of a picture element even in the narrow-angle camera. Earth was a crescent  only 0.12 pixel in size. Coincidentally, Earth lies right in the center of one of the scattered light rays resulting from taking the image so close to  the sun. This blown-up image of the Earth was taken through three color filters – violet, blue and green – and recombined to produce the color image.&lt;br /&gt;
Carl Segan on the &amp;#8220;pale blue dot&amp;#8221; photo:&lt;br /&gt;
bq. &amp;quot;Look again at that dot. That&amp;#8217;s here. That&amp;#8217;s home. That&amp;#8217;s us. On it everyone you love, everyone you know, everyone you ever heard of, every human being who ever was, lived out their lives. The aggregate of our joy and suffering, thousands of confident religions, ideologies, and economic doctrines, every hunter and forager, every hero and coward, every creator and destroyer of civilization, every king and peasant, every young couple in love, every mother and father, hopeful child, inventor and explorer, every teacher of morals, every corrupt politician, every &amp;#8220;superstar,&amp;#8221; every &amp;#8220;supreme leader,&amp;#8221; every saint and sinner in the history of our species lived there – on a mote of dust suspended in a sunbeam.&lt;br /&gt;
bq. &amp;quot;The Earth is a very small stage in a vast cosmic arena. Think of the rivers of blood spilled by all those generals and emperors so that, in glory and triumph, they could become the momentary masters of a fraction of a dot. Think of the endless cruelties visited by the inhabitants of one corner of this pixel on the scarcely distinguishable inhabitants of some other corner, how frequent their misunderstandings, how eager they are to kill one another, how fervent their hatreds.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Our posturings, our imagined self-importance, the delusion that we have some privileged position in the Universe, are challenged by this point of pale light. Our planet is a lonely speck in the great enveloping cosmic dark. In our obscurity, in all this vastness, there is no hint that help will come from elsewhere to save us from ourselves.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;The Earth is the only world known so far to harbor life. There is nowhere else, at least in the near future, to which our species could migrate. Visit, yes. Settle, not yet. Like it or not, for the moment the Earth is where we make our stand.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;It has been said that astronomy is a humbling and character-building experience. There is perhaps no better demonstration of the folly of human conceits than this distant image of our tiny world. To me, it underscores our responsibility to deal more kindly with one another, and to preserve and cherish the pale blue dot, the only home we&amp;#8217;ve ever known.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;</content>
 </entry>
 
 
</feed>
