MultiFirefox 2.0

With the release of Firefox 3 front-end developers have some new toys to play with. But the old toys must not be forgotten since much of the Firefox base will be still using FF2 for some time. The need is still there to test your latest and greatest web applications on both browsers. Along comes this nifty app called MultiFirefox. It allows you to manage you Firefox browser installs and profiles and choose which profile gets launched with which browser. Giving you the power to run both FF2 and FF3 at the same time. Good stuff.

Fred - My First Spore Creature


Fred - My First Spore Creature from Jim Barraud on Vimeo.

Larger Images in Flickr Feeds

Great tip on how to switch out those useless thumbnail images with medium size images in your flickr feeds.

Code Swarm: Python


code_swarm - Python from Michael Ogawa on Vimeo.

Visualizing the commit history of the Python scripting language project. (via Chris Glass)

Cocoa for Windows + Flash Killer = SproutCore

Apple’s strategy for cross platform applications? Open web standards. More specifically, Sproutcore. An open-source Cocoa-inspired Javascript framework.

2008 Design Trends

A showcase of site designs categorized by trends. Some great stuff here. Which of course makes me want to redesign my site… again.

New MFA in Interaction Design at SVA

These kids today don’t really know how good they have it.

So Young, and So Gadgeted

Brief article in the New York Times about how we 21st century parents are dealing with the new challenges of raising young children in a technological world.

DestroyFlickr (but not really)

I’m a big flickr fan. It’s a great service for sharing and discovering interesting photos. But I’ve always felt browsing around flickr to discover new photos could get a little tiring. You have your standard single page with a photo, previous & next buttons, or a page of paginated photos. Presented in a very basic way that’s similar to the majority of photo-sharing services out there. I usually prefer to view photos in flickr’s slideshow mode because of it’s darker background and larger photos, but this isn’t a great method for discovering new photos or browsing around.

I’ve just stumbled upon a nifty little app called DestroyFlickr (via). DestroyFlickr provides alternative methods to viewing, downloading and uploading photos on flickr. Photos are presented on a dark gray background in a casual format. The app divides itself into several workspaces. You can load various content into each workspace and easily switch between them. For example, you could have you’re photos displayed in one workspace and various contacts photos in the others. The app is built with on the Adobe Air platform, so it will run on either windows or mac provided you have Adobe Air installed.

Destroy Flickr Screenshot

DestroyFlickr succeeds in making it seem as though browsing flickr is like browsing photos on your own hard-drive. A desktop native feel is given to content that exists entirely online. At times it feels as though I’m using a kind of “Lightroom Light” app for browsing photos on my computer. It’s the first Air based app that I’ve used that doesn’t feel much like an Air app (and that’s a good thing).

DestroyFlickr is still in the beta stage of development and the developer has stated that there are plenty of other features he wants to add, but currently can’t until June 30th because of its submission to the Adobe Design Achievement Awards. It’ll be interesting to watch this app as it develops because there’s a tremendous amount of potential here.

David Byrne: Playing the Building

Playing the Building is a fascinating project by David Byrne where he hooks up an old pump organ to the The Battery Maritime Building in New York. Various motors are attached to the different pipes, radiators and other metal structural elements of the building, each giving off a unique sound when the corresponding key on the organ is played. (via Greg O’Keeffe)

Flying High with Brightkite

Location based social networking isn’t exactly a new thing. One of the earliest and more popular services in this area was Dodgeball. Dodgeball was eventually bought by Google, but nothing has been done with the service since it’s purchase in 2005. But location based services seem to be on the rise again and Brightkite is one of the newer players on the location based social networking scene.

I was blessed with a Brightkite invite by Mr. Jon Sykes. While Jon has been singing it’s praises, I’ve been more on the fence. Being a big fan of Twitter, I wasn’t sure I needed another Twitter-like service to keep tabs on and update. Plus there’s the selling point of the service, it’s all bout location, location, location. Whenever you’re at a new location, you can check-in via your phone, computer or other mobile device. With your location set, you can then post notes and photos about that location. Notes and photos are essentially twitter-like messages with the ability to post photos. While I can see the value in this for those who work/live in large cities or those who are big into the social scene, it was hard to see the value for someone who’s location may not change that often or who doesn’t have the flexibility to spontaneously meet-up with friends.

Over the past couple weeks I’ve used the service on and off. And honestly, it’s been fun seeing what friends are up to and the photos they’re posting. The challenge for me has been finding where Brightkite fits in my “digital lifestyle”. I already use Twitter for posting short messages and Flickr for posting photos. But lately I’ve been more selective about the photos I post on Flickr and the messages I post on Twitter. I’m not posting as many “going to the store” type of posts to Twitter and I’ve refrained from posting lower quality photos (such as cameraphone) to flickr. But now I’m finding this is the space where Brightkite fits in nicely.

With Brightkite you have various privacy settings available to you. At the high level, it’s public or private. Public is no holds barred. All info about your checkin location will be posted. Private on the other hand has a subset of privacy settings for how to handle your photos, notes and location while you’re in private mode. You could choose to display your exact location to only your friends while the non-friends will only see the city from which you posted. These settings are applied on a per-post basis. So while you’re home you can set your privacy level to private and all posts while in private mode will be marked as such. Then while your out and about getting lunch, set your privacy level to public while you’re at that location. All posts marked private previously will remain private. My only pet-peeve with this is that if you mistakenly post a photo or note as public, you can’t change it to private. You’ll need to delete that post if you’re concerned about the info being public. What I would like to see when it comes to the privacy settings is the ability to set privacy by location. For example, being able say “When I checkin at home, automatically set my privacy level to private”.

I’m now using Brightkite to post the short location based posts I would normally restrain myself from posting on Twitter. Because that post is now within the context of the location it was posted from. And I can set the privacy of that post so only my trusted friends will be able to see it, making Brightkite more personal than something like Twitter. While you can make your Twitter stream private, it’s an all or nothing option, you don’t get the level of privacy controls you get with Brightkite. I’m also using it to post location based photos that I normally wouldn’t be posting on Flickr. In addition to the personal aspects I’m using it for, I can see it being a great tool while traveling or attending conferences.

While I gave Brightkite a hard time at first, I’m beginning to see where it could fit in the current social networking ecosystem. Will I stick with it? Who knows. Ask anyone I know, I’m the most fickle person when it comes to… well, anything. Currently Brightkite is in private beta and is invitation only. I currently have 5 invitations left, so if you’re interested in checking out Brightkite and you want an invite, drop a comment on this post.

WWDC 2008 Thoughts

iPhone 3G
Very nice. I really dig the white variant. 3G speeds are obviously a good thing. The suits will love the Enterprise Exchange integration and will probably prove to be the killer app of this iPhone. The addition of GPS is huge. This will fuel a slew of awesome location based services. The price drop is very welcome, but still won’t get me to by one since it’s still chained to AT&T.

iPhone 2.0 Software
This is what I was really waiting for since I’m an iPod Touch owner. I was expecting more in the way of new features, but I’m sure the addition of the SDK and App Store will more than make up for it. I’ll be plunking down my $9.95 nominal payment come early July. Oh, and three words. SUPER MONKEY BALL.

MobileMe
.Mac rebranded. The angle this time is “Exchange for everyone”. Which is odd because if by “everyone” they mean people not in an office environment who don’t use exchange, that may be an issue. Because office workers are the only ones who would really know what “Exchange” is. Sure, there’s small business and non-microsoft shops. But they more than likely have their own solutions (Google Apps?). Essentially MobileMe is a glorified way to sync your Address Book, Email & Calendar with your PC, Mac, and iTouch device. I’d call this a minor improvement over the current .Mac and that it falls short of it’s potential.

Big Ideas (don’t get any)


Big Ideas (don’t get any) from James Houston on Vimeo

Now this is pretty awesome. It’s a remix of the song “Nude” by Radiohead using old malfunctioning electronic equipment.

Steve Jobs on Paul Rand

“I asked him if he’d come up with a few options. And he said “No, I will solve your problem for you. And you will pay me. And you don’t have to use the solution; if you want options, go talk to other people.””

Conversations with Paul Rand

“You never call it art. Art is if you’re lucky.”

The Magical CSS Table Cell

Back in the dark ages of web markup, the most reliable way to layout anything was by using a table. One of the best utilization’s of the table-based layout was laying out a form. We’ve come a long way in breaking away from laying out forms in tables. There are plenty of techniques for doing this that have already been discussed, so I’m not going to rehash that. Some would even argue that tables are still the most reliable to layout forms.

There’s one aspect of table based layouts that has eluded the non-table based layouts. The magic of the table cell. Or more specifically, the magic of multiple table cells working in unison. If the width of one table cell expands, all the others in the column follow along. This is especially useful when it comes to laying out forms. When laying out a form with tables, one cell is defined as the form label and the adjacent cell is the actual form element. This is repeated down the table columns for additional form elements. Instead of having to explicitly define a width for the label cell, the form label widths can be defined by width of the cell with the longest text label. This helps keep the form elements and form labels properly aligned without having to define an explicit width for each individual form label.

When it comes to non-table based layouts, each element is independent of the other. If the text size in one form label is longer than the others, the other labels don’t care. They stay right where they are with their own defined width. To get the form labels and elements properly aligned, you need to explicitly define the width of all your labels. Which can be a totally acceptable solution if you know what the content of every form will be and how long the average form label will be. But when it comes to dynamic systems that may have a single form layout framework used for all forms throughout the system, you may never know what text is thrown into the form labels or how large the form may be. Leaving you’re explicitly defined form structure in a highly dynamic system to become inconsistent at times.

Two forms with explicitly defined widths with varying length text labels

So why go with the non-table based solution? Flexibility. The flexibility you have with your form layouts far outweigh this one issue. Want you’re labels to the left of your form element instead of the top? Or maybe on the right instead of the left? It’s a matter of just changing the CSS declarations related to the label. To do that with a table based structure, you need to restructure the table. And within dynamic systems that may have that form distributed through several files, you could be in for a lot of hurt in updating that table.

Which brings us back to the special magic of the table cell. For a long time it’s been defined in the CSS 2.1 specification that the “display” property could not only define the layout of an element as block or inline, you could also define it as table, table-row, table-cell and various other table properties. These table based display properties allow you to define other elements, such as divs, to take on the structural properties of these table elements. But support for these property values has been spotty or non-existent in most of the major browsers. But this will be changing with the upcoming crop of new browsers.

In trying to come up with optimal form layout markup for one of our clients at the Hive, I wanted to find a solution for the form label issue described above. The following is some sample markup of a simple form.

 <div class="myForm">
    <div class="row">
      <label for="text1">Label</label>
      <input type="text" name="text1" />
    </div>
    <div class="row">
      <label for="text3">Here's a super long label</label>
      <input type="text" name="text3" />
    </div>
    <div class="row">
      <label for="text2">Another label</label>
      <input type="text" name="text2" />
    </div>
  </div>

The goal is for all the labels to be align flush right against the form elements, have both the form elements and labels aligned vertically, and have the overall form aligned to the left of the containing element. But I don’t want to assign a width to the label because due to the dynamic nature of the form, I won’t know what the length of the label text will be or how many elements may makeup the form on a given page. For example, if I define the label width as 200px and there’s only two form elements with the labels of First and Last, the form won’t be aligned flush left of the containing element due to the large label width and short text strings within it.

This is where the table based display properties come in handy. I’m able to layout my form using semantic markup, but I’m then able to define that semantic markup to use some of the layout qualities of a table. I’ve essentially defined a sudo table by declaring these table based values in the display properties of various CSS element declarations.

.myForm{
  display: table;
}
.row{
  display: table-row;
}
label{
  display: table-cell;
  text-align: right;
  padding: 0 5px 10px 0;
}

This works in Safari 3.1, Opera 9, Firefox 3 (RC 1) and the IE8 beta. The IE8 beta is a little flaky, but it’s an early beta and there’s still more work to do on the CSS front for IE. Firefox 2 support is partial and IE6/7 support is non-existent. So use of this technique will depend on which browsers you choose to support.

Is this a solution to be used every time you create a form? No, of course not. This may even be an edge case for most people as their forms may be pretty straight forward. But there often times I find myself with the need to have the actual text of the label define width of the form labels. As with all design decisions, it really depends on the context within which your using your form and the problem you’re trying to solve.

You can view example of this technique here

CSS (in)Efficiency

Shaun Inman has an interesting blog post proposing CSS parent selectors. Something a lot of people (including me) have been begging for. The proposal on the surface looks good and sound, but when you dig into the comments, apparently it’s a lot more complicated. Take particular note of the responses from Dave Hyatt, he’s the lead developer on Webkit. You find out why it’s not something that will be implemented, and surprisingly (at least to me), how CSS selectors in general can get expensive in terms of performance. Especially for large scale web apps.

I was always with the understanding that CSS selectors were the most optimal route for CSS definitions, since your getting very specific about the element you want to style and not adding a ton of IDs and classes to your HTML. Apparently when it comes to performance the opposite is true. While it seems this performance hit isn’t noticeable on smaller scale sites, it can become a performance bottleneck on larger scale web-apps. The problem is I don’t know what the degree of the performance hit is and how complicated your site needs to be for it to be noticeable. I’m also not clear on if this is a browser specific issue. Browsers that are referenced include Safari and Firefox, but does IE or Opera suffer from this as well?

If this issue gets any more prominence, I’m sure some performance tests strictly dealing with CSS will start to emerge. As of right now, it’s something take note and of and keep on eye on.

Update: One of my partners in crime at Media-Hive, Mr. Jon Sykes, has posted a 3 part series on testing the above issue. Testing CSS Performance, Testing CSS Performance pt.2, and More CSS Performance Testing.

I Voted.

Yes we can.

Submitted as my contribution to the Polling Place Photo Project

I Tumble For Ya

I’ve started up a tumblelog. It’s called “nothing but flowers”. It’s where I’ll be posting things like links, videos, photos and random thoughts. I’ll probably be posting there frequently. Stop on by.

Wahoo!

I’ve defeated Bowser. Now on to 120 stars.

Enjoying

Listening

No images to display