Month: June 2016

sIFR 2.0 RC 3 is Here… Come Get Some

UPDATE: Version 2.0 is now available. See article here.

Alright, I know I said Release Candidate 2 might be the final release of sIFR 2.0, but hey, Mark and I found some more things to improve on… so we did. Today’s release of sIFR 2.0 RC3 introduces the following new features/fixes/improvements:

  • The javascript file has been reduced down to 8.8k.
  • Replacement calls now use named arguments so you don’t need to specify parameters in any particular order. The function is backwards-compatible, however, so existing installs will remain functional.
  • Newline support (<br> and <br />) now works perfectly.
  • Now compatible with Opera 7 and above.
  • New support for a “fallback” transparency color for browsers which don’t support transparency. This eliminates the green background displayed in some older browsers when specifying transparency.
  • A shiny new sIFR logo!

Since all changes from RC2 to RC3 are contained within the “sifr.js” file, you need only replace your existing “sifr.js” file to complete the upgrade. No .html or .swf work is necessary. You may, however, decide to change your replacement calls to the new named argument syntax if you wish. This is not necessary, but you may find it preferable.

Note: if you are using a version earlier than RC2, please re-export your swfs as well.

Here are links to the new files and updated example page:

Incidentally, it looks like Metafilter has picked up on sIFR today and is sending over a ton of traffic to the original sIFR article. Thanks guys!

Reading the Metafilter comment thread is a bit humorous, however. It never ceases to amaze me how some people will see the word “Flash” and cry about imaginary accessibility issues, imaginary proprietary file format issues, and other imaginary “sky is falling” issues. Look at the code people. Study it. Analyze it. Understand it before you jump to conclusions. And above all else, understand that the entire web as we know it is a hack. I’d respond on the Metafilter thread myself but I don’t feel like paying $5 to join.

This article contains information on sIFR Release Candidate 3 — the latest version of sIFR. For an explanation of exactly what sIFR is, please see the original article: sIFR: The Healthy Alternative to Browser Text.

Ten Votes

So you thought the 2004 elections were over? Not in my state. More than a month after the polls closed, the Washington State governor’s race is still undecided, and you’re not going to believe how close the latest count is: TEN VOTES. The latest returns from the third recount (all by hand this time) have Democrat Christine Gregoire ahead of Republican Dino Rossi 1,373,051 to 1,373,041 with more than 99% of precincts reporting.


If this isn’t the closest election in the history of the United States, I’d like to hear what is. I mean, it’s the equivalent of winning a smaller state like Wyoming by ONE VOTE. We’re talking about a difference of .00073 percent. That’s 73 100,000ths of a percent, and much closer than when Bush allegedly won Florida by 400 some votes in 2000. That was a southern asswhoopin’ compared to this.

A lot of people in my state criticized Gregoire for asking for multiple recounts given that she came out behind by a hundred or so votes in both of the counts, but can you really blame her? You could count those votes a million times and you’d get a slightly different tally each time. When the numbers are that close, you’re really within the natural margin of error no matter what you do.

Given that, I wonder why every election in this country doesn’t have runoff provisions for such close calls. Several states do, but not all of them, and no federal elections have it either. It seems only fair to me that if two candidates are within, say, 1 percent of each other, there is a new election with only those two candidates on the ballot. Another alternative to that would be to vote for a “2nd place candidate” on each ballot so that people who vote independent can still affect the balance between the Republican and Democratic voting.

How can you even take office not knowing if you really won? Oh wait…

Hey, Where Did Seattle Go?

Last weekend, I noticed that the Seattle weather turning to crap has also turned a good deal of the livecam images in the Mike Industries live header to crap. As it turns out, the moisture we get this time of year in the Northwest can turn a scenic Puget Sound view into an indistinguishable blob of grey in about 15 minutes. To make matters worse, the livecam is actually a Sony DV cam and not a proper high-resolution digital still camera, so a poorly defined subject area really makes for a blurry and unimpressive shot.

Here is a sampling of what the header looks like under different circumstances (Note: If you can’t see the live header, make sure you have Flash installed and click the “Live” theme in the sidebar) —

Header on a good day

Header when it’s extremely foggy

Header at night

Header with no image

Now, all of this wouldn’t be so bad if I wasn’t using the livecam as a masthead for my site, but I quite intentionally am, so I needed another solution. If I could only show something else when the view outside was crappy, then that would be great.

But how can you programmatically detect crappiness in photos? Luckily in my case, it wasn’t so hard.


If the contrast of any given photo from the livecam is not sufficiently high, I can deduce one of two things: it’s really foggy or rainy out, or it’s nighttime. Both of these cases produce ugly livecam images in the header, so if I can detect when low contrast occurs, I can change the header accordingly.

I’d heard about ImageMagick in the past but never actually used it. ImageMagick is basically a server module which lets you do all sorts of programmatic things with images like stretching, rotating, sizing, etc. However, it turns out you can also fetch the standard-deviation of each RGB channel of any given image. The standard deviation of an RGB channel is the range of values which encompasses two-thirds of the total number of pixels in an image. It’s a crude measure of contrast, but it works for my purposes.

The next step was writing a PHP script which would suck in the standard deviation value of each channel, come up with an average, and then output a tiny text file containing only a “0” or “1” depending on if the contrast value was above or below my threshold. Running this script via cron every 15 minutes would give me an accurate indicator of whether current conditions were defined enough to produce a good image. And finally, in order to actually act upon that information, I could simply feed “contrast=0” or “contrast=1” into my Flash header via PHP and the FlashVars property.

So now that I can detect when I don’t want to show the standard livecam image, I need to figure out what to show instead. Right now, I’m simply not loading the image and leaving the header as a block of mostly negative space. The header was originally designed to look presentable without an image, so this doesn’t bother me too much.

But I want to do more. I feel like there’s something more useful I could do in the header when it’s either foggy or night time and I’d love to hear any suggestions. So far, I’ve come up with these:

  1. Keep it blank.
  2. Bring back the crappy footage for the sake of it being a “live theme” and that’s what live themes do.
  3. Show nicer, higher resolution photos of a foggy scene and a night time scene when it’s appropriate (taken from a real digital camera).
  4. Come up with some sort of other element to load into the header (like an explanatory line of text) when conditions call for it.

Anyway, I have no idea what to do. Someone even suggested doing a panning lighthouse beacon when it’s foggy but that may be over the top. Any ideas?

iPhone Update

Alright, it looks like there’s a good bit of both optimism and pessimism surrounding the upcoming Apple/Motorola phone since the Forbes article was published last week. We’ll never know for sure what this product is all about until we see it, but we can be sure it’s an substantial step closer to what a lot of people (myself included) are craving in a cell phone: the industrial design and user experience of an Apple and the convergence of voice, data, and music in one device.

Some of the reader comments in my previous post rightly point out that we should be conservative with what we expect at MacWorld, and I think this is a good idea. In other words, don’t expect an iPod Mini that can dial… at least not yet. Instead, expect something cool that has Apple’s fingerprints on it.

At the low end, it will be a mere shadow of what I’ve been predicting: A purely Motorola phone with nothing more than a self-contained iTunes application to interface with PCs and Macs. Even the Forbes article expects more than this, however, as it mentions Apple having a say in both the price and overall user experience of the product.

At the high end, the industrial design will be Apple’s, the branding will be at least partially Apple’s, and the entire user interface will be skinned in legendary Mac fashion.

If we hit the high end, I’ll be happy. If we hit the low-end, I’ll definitely be a bit disappointed, but if you told me a year ago that Steve Jobs would have finally gotten Apple into the cell phone game, albeit with one foot, I’d have thrown a party. Does that mean much more significant products aren’t in the works? Absolutely not.

In fact, I’ve learned a few other things this week through readers that make me think things are on the right track. Firstly, the new iPod Photo uses a QVGA display (220 x 176, 65,536 colors) which is the exact same display that appears on many next-gen cell phones. Might some of the interface work being done on the iPod Photo fit nicely on a QVGA phone display? I think so.

Secondly, we learned that Apple, on December 13th, filed suit against unknown individuals for leaking information about unspecified products very recently. This could be one of several things in my opinion: a flash-based iPod, a firewire-based enhancement to GarageBand, the infamous “train conversation” with a Motorola engineer about the Apple/Motorola phone, or something else entirely. Who knows.

And finally, this isn’t really news but some of the comments from the last post got me thinking about the situation that Apple and Motorola will put themselves in even if they merely put iTunes inside a phone. Specifically, there is this notion out there that cell carriers are dead set on forcing users to download music over their networks and that Apple and Motorola would be circumventing that goal with their device. While it is true that carriers would like to impose such a system, that doesn’t mean it will ever be practical enough to actually happen. It takes me two minutes to download an album to my laptop and then another two minutes to transfer it to my phone via SD card. Know how long that would take over a GSM network? Hours. And besides, even if one does download an album directly to their phone, would they not then want it on their laptop as well? The music-via-cell-network plan is a non-starter and the first network that realizes that will probably be the first network to do a deal with Apple. How about it T-Mobile?

“Get the Apple phone for $99 with purchase of a two-year voice/data/.Mac plan, and we’ll throw in a free 1 GB SD card to store all your music.”

T-Mobile could then use their data bandwidth for more important functions like .Mac synching, web browsing, e-mail, news aggregation, and instant messaging. Users could still download music over the network, but maybe there’s an extra fee for that.

I see something like this coming soon, and January will either be a small step or a giant leap towards towards this sort of offering.

iPhone Prediction Confirmed

UPDATE: Uhhh, thanks for the semi-false alarm Engadget and Forbes! Now that we’ve had a few days to absorb things, updated thoughts are available here — iPhone Update

Way back on July 25th, I told you Apple was coming out with a cell phone. This was before any preliminary Motorola announcements, before any recent rumor mill gossip, and a full four months before Russell Beattie’s and Ross Mayfield’s great articles on the subject. I even told you the exact month: January of 2005.

Lo and behold, via today’s announcement in Forbes magazine (which was via this article at Engadget), Apple has confirmed that not only will they be releasing a full-fledged Apple-inspired phone with Motorola circuitry, but it will likely be shown off in January to an eagerly-awaiting public at MacWorld Expo.

I, personally, can’t wait.

While I am very excited about the official announcement, the revelation that it will be a “mid-range” device probably means that I won’t dump my Treo for it. Once you’ve tasted the sweetness that is the high-range, full-featured phone, it’s tough to imagine going back. However, we all know that Apple is not in the business of producing anything “mid-range”, so I’d bet a large sum of money that this initial iPhone release is just the tip of the iceberg. Might we see a “PowerPhone” shortly thereafter? We most certainly will. The only question is when. Want another prediction? Same time next year.

So what is the moral of today’s iPhone announcement?

  • I am all-knowing, all-powerful, and ever-sure… at least when it comes to technology predictions. :)
  • Where there’s a cool product to be made, rest assured Apple will make it.

Now if only Steve Jobs could get over his hatred for television, maybe we’d see a damned Media Center Mac already. I know I’d pay a healthy sum of money for one.

Note: The photo illustration above is obviously not representative of what the Apple phone will look like. It’s the product of two-minutes worth of Photoshop work.

Referrer Spam is the New Amway

Ever since I found out about Amway and other network marketing schemes many years ago, I’ve always considered them the lowest form of commerce in the world. I mean, you’re not creating a damned thing and you’re using your friends and personal contacts to move generally unneeded goods around the economy. All to make a profit for yourself.

I think we have a new winner now in the “lowest form of commerce” category though: referrer spam. I simply don’t understand the point of this silly practice. If you don’t know what referrer spam is, here is the “technology” in a nutshell:

Websites maintain automatic lists of other web sites which link to them. This is useful, for instance, if I write an article and I want to see who is linking to my article and what people might be saying about it. So every day or so, I check my “referrer log” for new links. Well, what referrer spammers are now doing is polluting my log file with obviously fake referrers like “” and “”. So as a result, I have to wade through hundreds of these links in order to get to real referring links.

What I don’t understand is what the point of it is. The referrer log is only accessible by me and surely nobody technical enough to be checking their own referrer logs would actually click on one of those links. I’ve heard another reason spammers do this is because some people display their “most recent referrers” live on their sites. If you’re doing this, STOP. It provides no value and only perpetuates the myth that referrer spam has a chance achieving its intended effect.

As an aside, the best way I’ve found to get around the referrer spam problem is to use Refer 2.0 to check your referrers. Refer 2.0 can sort referrers by frequency and most referrer spam has a frequency of one, so you can easily ignore any referrers who haven’t provided you at least two referrals.

Also, for a more complete statistical tracking package, make sure and check out Shaun Inman’s ShortStat. Shaun’s working on a spicy new beta right now which is quite nice, but in the meantime, feel free to use the current version. You can have a look at what the output looks like here.

sIFR 2.0: Release Candidate 2 is Finally Here

UPDATE: Version 2.0 is now available. See article here.

Alright, sIFR Release Candidate 2 is finally here. It’s been exactly two months since Release Candidate 1 and we’re happy to say that things have held up very well so far. Release Candidate 2 fixes a handful of minor issues, and barring any regression behavior which may turn up in RC2 (but probably won’t), we think we have a solid 2.0 release on our hands. Thankfully, we’ve taken care of this before the end of 2004, because according to the 2005 Web Design Forecast, sIFR will be a huge part of the emerging typographical landscape in the coming year.

We couldn’t agree more.

Before I get into the details of RC2, I just want to thank Mark Wubben for a) all the great javascript work he’s done on sIFR, and b) all the helpful support he’s provided to people asking for assistance in the comments. There have been over 700 comments on all sIFR threads so far, and Mark has managed to successfully attend to almost all of them which pertain to javascript or implementation. So once again, thanks Mark for being so helpful, and also for being a genius.

I also want to thank Danilo Celic and Stephanie Sullivan of Community MX for their help in bringing sIFR to the masses. Check out Danilo’s Breeze Presentation for a great overview of sIFR and also a peek at the power of Macromedia Breeze. I love Breeze more every time I see it.

And finally, two more thank yous. One to Zen Master Dave Shea for his helpful, even-handed, positive review of sIFR, and one to Sean Schroeder for his beautiful sIFR work on Prosper Magazine.

Oh yeah, and I almost forgot, Wes Carr and the folks at 2Entwine have taken sIFR and expanded it into, a photo annotation engine. Instead of replacing text with sIFR, Fotobuzz replaces images for the purpose of annotating them inside Flash. It is really really slick. Make sure and check it out.

Now… on to the details.

First of all, to upgrade to sIFR 2.0 RC2, you need only re-export your .swf files and pop in the new sifr.js file. No implementation details have changed. So in other words, upgrading should only take a minute.

Here’s what we’ve improved/changed/fixed:

  • sIFR now works in all reasonable versions of Opera. This should include all flavors of 7.x on both platforms.
  • URLs of unlimited length are now supported. Flash unfortunately has a 128-character URL limit on textfields, but we’ve gotten around that with some crafty coding.
  • Newline support is now added. If you place <br />'s in your replaced elements, they will now be honored.
  • HTTPS is now supported for domain-protected files.
  • sIFR now uses exact domain matching for domain-protected files. As a result, two-part domains like are now eligible for protection.
  • Various speed improvements.
  • Minor selector bugs have been squashed.
  • Browser detection is now exposed in the javascript so you can easily disable sIFR for any browser you’d like.

At this point, we believe all outstanding issues are now resolved. Please feel free to download the new release and let us know what you think! The instructions are now contained in a readme.txt file within the zip archive below.

Headline Writing 101

Lesson #1: Don’t scare the hell out of your audience with a poor choice of words.

Click to read story

Subscribe by Email

... or use RSS