Camera, Photography, Programming, Technology

Putting 1940s Kodachrome Slides on the Web

When my wife Christina and I were cleaning out her late father’s garage, we came across two cases of Kodachrome slides that included nighttime shots of downtown Minneapolis in the 1940s and 1950s, pictures of daily life in nearby Hutchinson, Minnesota, and some World War II photographs, like this one of a group of soldiers celebrating on Attu Island in Alaska on V-J Day.

We determined that the photographs were taken by David Tewes of Hutchinson, Minnesota, Christina’s first cousin twice removed. He died in 1991, and her dad had likely come into possession of the slides then. They sat untouched in his garage attic for twenty-five years.

I wanted to scan the slides so they could be preserved and shared, but we had to get them back home to Oregon first. Fun fact: if you pack cases of slides in your carry-on luggage, your bag will get special attention from a TSA agent since the X-ray machine can’t see through the slide case.

Internet research showed me that there are generally two ways to digitize old slides: either use a slide scanner, or get a macro lens and take a photo of each slide at 1:1 magnification. I couldn’t find a slide scanner in my price range, so I paid $40 to rent a macro lens from and set up a rig for “scanning” all of the slides.

The slide holder is three pieces of hardboard sandwiched together with a cut-out in the middle for the slide to fit into.

I back-lit each slide with a very bright lamp, and I added a paper shade around the slide to prevent my eyes from getting burn-in from the lamp bulb.

Here’s an example of what one of the slide photos looks like, overexposed so you can see the labeling that David added on each slide.

I took four photos of each slide at decreasing shutter speeds (in raw format) and then chose the best one. I cropped and captioned all of the photos in iPhoto and organized them into events matching how David had organized them in his slide cases.

In order to get the slides from iPhoto to the Web, I wrote a script that uploads an entire iPhoto library to a WordPress website. It creates a post for each event and then adds all of the event’s photos to a gallery in the post. I will publish a standalone post soon with details about that script.

The result of all this work is It contains 650 photos organized into 51 posts, with dates ranging between 1944 and 1955. All of the photos are licensed under the Creative Commons – Attribution license, meaning that they may be used for any purpose (commercial or non-commercial) and derivative works may be produced, as long as David is credited as the photographer. If I understand U.S. copyright law, the photos will enter public domain on January 1, 2062.

Some of my favorite albums are Attu, Alaska, This is Minneapolis, and Santa Monica. In each of those albums (and in most of the others), David created a title card, sort of like a scrapbook page that he photographed to introduce the photos.  For example, here’s the title card for the photos from his trip to China Town.

There were 81 title slides; you can view them all here.

Although some of the slides were labeled with a date, many were not. For those, I’ve estimated a date but marked them as such. If you’d like to help narrow down the dates for any of those photos, you can see them all here.  Leave a comment on the photo or on the photo gallery post with any information you have, like this comment on a photo of cars from the Minneapolis Municipal Gardens.

My favorite photo out of all of them is this shot of feats of strength at Muscle Beach when it was still in Santa Monica. What’s yours?


Mozilla, Mozilla Firefox, Mozilla Firefox for Mobile, Programming, Technology, URL Fixer

What do people type in the address bar?

Update: URL Fixer was acquired and is now hosted at

Earlier this year, I added a feature to URL Fixer (a browser add-on that fixes errors in URLs that you type in the address bar) that collects anonymous usage stats from users who opt in in order to help improve the ways that URL Fixer corrects typos; the collected data includes domains that are typed in the URL bar as well as the locale (language/country) of the user who typed them.

I now have six months of data, and I’ve run some statistical analysis on it in order to share some interesting stats with you. (If I were more creative, I would make an infographic out of this information.) Note that this data does not include bookmarked links or links that users click on in websites. It is strictly domains that have been typed directly into the address bar.

Care to guess the most commonly typed domain? That’s right: It was typed almost three times as often as the second most popular domain,

The top 10 domains account for 20% of all typed domains. 9% 1.1% 0.5% 3.3% 0.6% 0.5% 3.3% 0.6% 1.1% 0.6%

The most popular TLD for typed domains is .com, followed by .org, .net, and .de.

.com 63%
.org 4%
.net 4%
.de 4%
.ru 2%
.hu 1%
.fr 1% 1%
.br 1%


The top 17 TLD typos are all variations of .com. In order of frequency, they are .com\, .ocm, .con, .cmo, .copm, .xom, “.com,”, .vom, .comn, .com’, “.co,”, .comj, .coim, .cpm, .colm, .conm, and .coom.

The website that appears to benefit the most from users mistyping a legitimate URL is (count the o’s). It’s a scammy website set up to make you think that you have been chosen as a “Facebook Winner.” However, it is only typed once for every 7,930 times that someone correctly types ( and are runners-up in this category, albeit with much less scammy sites in place than

49.5% of domains are typed with a leading “www.”.

The most popular domains:, (a Russian social network), and

The only locales where neither Google nor Facebook control the most popular domain are ru-RU (Russia –, fi-FI (Finland –, a gaming website), ko-KR (Korea –, an e-sports website), and zh-CN (China –

How does domain length correlate with typing frequency?

Domain Length vs Frequency Graph

(Facebook is to thank for the spike at 12 characters.)

How about alphabetical order? Has the old trick of choosing a site name early in the alphabet in order to show up above the fold on DMOZ had any lasting effect?

Facebook and Google certainly make their letters stand out, but there doesn’t appear to be a correlation between the first letter of the domain and its popularity.

None of the domains with more than a 0.0005% share are unregistered, indicating that this kind of usage data would not be very useful to a scammer or phisher looking for new domain names.

Browser Add-ons, Comment Snob, Google Chrome, JavaScript, Mozilla, Mozilla Firefox, Programming, Software, Technology, YouTube Comment Snob

Announcing Typo.js: Client-side JavaScript Spellchecking

When I first ported YouTube Comment Snob to Chrome, Chrome’s lack of a spellchecking API for extensions meant that I would be unable to implement Comment Snob’s most popular and distinguishing feature: the ability to filter out comments based on spelling mistakes. That, my friend, is about to change.

I’ve finished work on the first version of a client-side spellchecker written entirely in JavaScript, and I’m calling it Typo.js. Its express purpose is to allow Chrome extensions to perform spellchecking, although there’s no reason it wouldn’t work in other JavaScript environments. (Don’t use it for Firefox extensions though; use Firefox’s native spellchecking API.)

How does it work?

Typo.js uses Hunspell-style dictionaries – the same ones used in the spellcheckers of and Firefox. (Typo.js ships with the latest American English dictionary, but you could add any number of other dictionary files to it yourself.) You initialize a Typo.js instance in one of two ways:

Method #1

var dictionary = new Typo("en_US");

This tells Typo.js to load the dictionary represented by two files in the dictionaries/en_US/ directory: en_US.aff and en_US.dic. The .aff file is an affix file: a list of rules for creating multiple forms of a word by adding prefixes and suffixes. The .dic file is the dictionary file: a list of root words and the affix rules that apply to them. Typo parses these files and generates a complete dictionary by applying the applicable affix rules to the list of root words.

Method #2

var dictionary = new Typo("en_US", affData, dicData);

With this initialization method, you supply the data from the affix and dictionary files. This method is preferable if you wish to change the location of the affix and dictionary files or if you are using Typo.js in an environment other than a Chrome extension, such as in a webpage or in a server-side JavaScript environment.

Once you’ve initialized a Typo instance, you can use it to check whether a word is misspelled:

var is_correct_spelling = dictionary.check("mispelled");


Depending on your needs, you can configure Typo.js to perform word lookups in one of two ways:

  1. hash: Stores the dictionary words as the keys of a hash and does a key existence check to determine whether a word is spelled correctly. Lookups are very fast, but this method uses more memory.
  2. binary search: Concatenates dictionary words of identical length into sets of long strings and uses binary search in these strings to check whether a word exists in the dictionary. It uses less memory than the hash implementation, but lookups are slower. This method was abandoned as it became impractical to implement for some features.

See this blog post by John Resig for a more detailed exploration of possible dictionary representations in JavaScript.

Practice vs. Theory

Typo.js is already in use in my Comment Snob extension. You can install it today to experience Typo.js in action, filtering comments on YouTube based on the number of spelling mistakes in each one.

What’s next for Typo.js?

The next step is adding support for returning spelling suggestions; right now, all Typo.js can do is tell you whether a word is spelled correctly or not. It also needs to support Hunspell’s compound word rules. These are the rules that a spellchecker uses to determine whether words like “100th”, “101st”, “102th” are correct spellings (yes, yes, and no, for those of you keeping track) since it would be impossible to precompute a list of all possible words of these forms.

The Typo.js code is available on GitHub. I welcome any and all suggestions or code contributions.

Funny, Life, Technology

Ok, now store it in the mouse…

The other day, I overheard an older relative refer to the act of copying and pasting something as “storing it in the mouse.” I had never thought of it that way before, but that is probably how it appears to new computer users.

I know that when I press Ctrl+C, I automatically hold my hands differently until I hit Ctrl+V, so I might as well be storing that data in my left hand. Occasionally, while I’m typing, I’ll realize that I’m feeling a little tense and I don’t know why. Usually, it turns out that I copied something and never needed to paste it.

Does anyone else alter their posture based on the contents of their clipboard?