Nov 13 2009

New Work in the Portfolio

I've updated the Work section with some recent projects. Amongst the added work, there's a trio of Richmond, VA based clients, with RVA Magazine, Redsalon Organics and Sticky Rice. As well, I'm trying out an interaction video for Dalek—seems to showcase movement better than a series of images, natch.

Nov 13 2009

Interaction Elasticity

Jakob Nielsen occasionally drifts into utopian usability fantasies in which he tries to convince us that we should all stop using Flash and Photoshop. On the other hand, he occasionally publishes ideas that are valid.

I recently browsed a year-old article on Interaction Elasticity that contained this:

A path with 5 easy clicks is vastly superior to one with 3 difficult clicks. And a menu with 10 easily understood items is better than a menu with 7 obscure ones.

To put this in context, I was debating the use of a dreaded drop-down menu when I came across said article. For me, Nielsen's quote argued against things like drop-down menus, since providing a clear logical navigation path to subpages (even with 2 to 3 clicks) would be usable, clean and better for information architecture.

Note: I'm downplaying the traditional drop-down. I think rollovers that are more akin to widgets or what Nielsen calls a Mega Drop-Down aren't so bad.

Oct 1 2009

How to Tween the Alpha Value of a Plane with MovieMaterial in Papervision 3D 2.0

I spent an inordinate amount of time figuring out how to tween the alpha value of a Plane with MovieMaterial in Papervision 3D today. In case it saves anyone out there some time, here's how to access it:

MovieMaterial(plane.material).movie.alpha

The DisplayObject3D class has an alpha property, but it doesn't seem to affect the material inside the object. I can't say I completely understand why it works, but it works. Note: The "animated" property of your MovieMaterial must be set to "true."

Oddly, this does not work:

plane.material.movie.alpha

Even though "plane.material" seems to be a MovieMaterial object, "movie" comes back as an undefined property when compiling. I'm sure it has something to do with data type information in AS3 that I don't quite comprehend yet.

In case this happens to be a weird version issue, I'm using OS X 10.5.8, Flash CS4 and Papervision3D 2.0.869. Lastly, here's the gotoAndLearn() forum thread that pointed me in the right direction.

Sep 10 2009

WordPress 2.8 Schema Change Bug

Normally, WordPress is a good platform to manage simple websites and blogs. Despite the recent worm outbreak, if you keep it up to date, I still recommend it. However, when digging into the innards of the system, you occasionally come across a bug here or there that boggle the mind. Case in point, I recently stumbled across an attachment bug in the core files caused by a database schema change by the WordPress team. As far as I know, attachments have been a tried-and-true part of WordPress since version 2.5.

I discovered the bug after a client started using the WordPress iPhone app to manage their blog. No matter what I tried, uploaded photos weren't being attached to posts. It became an issue, because the theme I built required images to be attached to posts in order to display properly. Moreover, I started noticing many regular posts' images were randomly not attaching, even when posting through the regular admin.

After an hour of scanning code and searching the web, I found out WordPress had changed their post ID fields to bigint(20) UNSIGNED as of version 2.8. Well, this change broke image attachments in the XML-RPC script and in the admin when uploading media prior to saving a draft. Coincidentally, it also broke attachments via the QuickPress feature on the on new WordPress Dashboard.

To fix the XML-RPC page, I applied this patch. Since the field is UNSIGNED, the temporary ID of -1 the XML-RPC function uses is invalid. However, that didn't address the admin bug. That's when I found the MySQL workaround by 3 Dog Media:

ALTER TABLE wp_posts MODIFY post_parent BIGINT(20) NOT NULL DEFAULT 0; 

That query essentially removes the UNSIGNED attribute from the post_parent field in the wp_posts table, thus allowing the temporary negative IDs WordPress is still using, depsite the schema change. Note: The MySQL change fixes those all negative ID issues, so feel free to just apply that schema fix to your database.

Normally, I don't recommend core changes, because future updates will wipe them out. However, according to the bug ticket, the issue is deemed an edge case and won't be addressed until version 2.9. It's up to you to handle it until then.

Aug 12 2009

Activity Streams

A couple months ago, I watched David Recordon's presentation at Webstock 09 on Vimeo. He covered a lot of ideas about how to build a better open social web.

A quick Google search on Recordon lead me to the Diso Project website, which aims to "facilitate the creation of open, non-proprietary and interoperable building blocks for the decentralized social web." The DiSo Project lead me to a blog post from Chris Messina about Activity Streams.

From the Activity Stream draft spec:

For the purpose of this specification, an Activity is a description of an action that was performed (the Verb) at some instant in time by some actor (the Subject see Section 6.1 (Feed Subject)), usually on some social object (the Object). An Activity Feed is a feed of such Activities.

Facebook and MySpace have already adopted Activity Streams as the standard way to disperse users' activity data out to the web.

What Facebook and MySpace are doing is a great first step, but the usefulness of this format would be completely realized if we could work towards something like what Chris Messina described in his blog post (i.e., "consume activities based on human-readable content types, rather than by the service name on which they were produced"). Meaning, it wouldn't matter where you uploaded your photo, posted your blog or updated your status, we could all follow each other independently of which network we were on. Sure, this is like what FriendFeed now offers, but as Messina said, we could offer this without "hardcoding support" for the myriad social networks' API or feed format. It would just be up to the individual services to build in support for Activity Streams (which is merely a beefed up Atom feed).

This may be another pie-in-the-sky movement for the social web, but this is the first one (since Microformats) I've seen that looks useful.

Jul 25 2009

Ongoing Web Fonts Coverage

Safari 4 and Firefox 3.5 are surely the impetus for all this web font discussion. Designers and developers can see the promised land, but it's just out of reach. Nevertheless, here are two more good articles on the current state of things:

Jul 7 2009

Paste Your Taste

Last.fm recently added a feature to their profile pages that I thought was great. "Paste Your Taste" assembles a block of text describing your overall top music picks for use on social networking profiles.

For example, my current selection is:

I'm into indie, rock, alternative, electronic and experimental, including: Thrice, Queens of the Stone Age, Squarepusher, Plaid, The Avett Brothers, Radiohead, dredg, The Dillinger Escape Plan, Poison the Well, Muse, Mastodon, The Books, The Walkmen, Shiner, Incubus, Against Me!, Spoon, mewithoutYou, Iron & Wine, The Beatles, The Decemberists, Arcade Fire, He Is Legend, Death Cab for Cutie, Paul McCartney, The Smashing Pumpkins, Annuals, Codeseven, Slow Runner, Nine Inch Nails, Foo Fighters, Aphex Twin, The Knife, Ebu Gogo, Prefuse 73, Head Automatica, Silverchair, Deftones, Far-Less, Kaki King, Clark, Cory Branan, Killswitch Engage, Maximo Park, The Life and Times, Elliott Smith, Department of Eagles, Bloc Party, M83, The Streets.

Check out my music taste: http://www.last.fm/user/heyrevolver

Compared to the other technology working on their site, the "Paste Your Taste" functionality is nothing special. However, it solves a common problem—albeit a minor one—and makes it very easy to share your own taste in music. A great example of a feature that compliments the service while requiring minimal development.

Jul 1 2009

A2 Hosting July Discount

I normally would not post this kind of thing here, but my hosting company, A2 Hosting, is offering a 40% discount on hosting purchases for the month of July. The coupon code is economystinks (expires 7/31/09). That will get you a technically unlimited, reputable shared hosting account for around $4.77/month. There have been a few hiccups along the way, but I've been very pleased with their support.

Jun 24 2009

Web Fonts Follow-Up

Since my last post on web fonts, a pair of new websites have launched related to the cause. One is proposing a big step forward, while the other is a nice resource.

Typekit from Small Batch Inc. aims "to develop a consistent web-only font linking license." According to their blog:

We've built a technology platform that lets us to host both free and commercial fonts in a way that is incredibly fast, smoothes out differences in how browsers handle type, and offers the level of protection that type designers need without resorting to annoying and ineffective DRM.

With a free version promised from the outset, it sounds like a great offering. However, the mentions of a "low-cost way to grow" and "scalable professional version" leaves me a little apprehensive. I'm not making any judgments until they launch the service, but facing recurring charges for the unforeseeable future doesn't sound like the best solution.

Next, The League of Moveable Type (no relation to the blogging platform) simply provides "well-made, free & open-source, @font-face ready fonts." The fonts are available under a Attribution Share Alike Creative Commons license for personal and commercial use. Most members just want to see what you do with their fonts, but a credit in your website's colophon couldn't hurt. The files themselves are either TTF or OTF—so, you'll just need to convert an EOT for Internet Explorer using WEFT.

Jun 15 2009

Progressive Enhancement

David Bliss at Odopod recently posted a rundown of how his company handles Flash and SEO. He used the term "progressive enhancement" to describe the technique. According to Wikipedia:

Progressive enhancement is a strategy for web design that emphasizes accessibility, semantic markup, and external stylesheet and scripting technologies. Progressive enhancement uses web technologies in a layered fashion that allows everyone to access the basic content and functionality of a web page, using any browser or Internet connection, while also providing those with better bandwidth or more advanced browser software an enhanced version of the page.

This strategy is something I've been employing for a while, but without the terminology to succinctly describe it. As Bliss mentioned, with SWFObject, SWFAddress and the Flash Search Player from Google, it's becoming easier and easier to confidently sell SEO and Flash together. Next time you pitch a client, wrap this process up as "progressive enhancement." It would be nice to make the term an industry standard.