I tried to ignore the iPhone, since I’m sick of hearing about it myself (a Google search for “June 29, 2007” had the iPhone as the 2nd and 3rd results), but I can’t help but acknowledge its design. I have no desire to have one for any real reason, as I don’t like phones or mobile technology. However, I am fascinated by good design. If you read 37signals, you’ve probably already seen the iPhone keyboard movie. Despite all of the hype, it really does look brilliant. I’m not willing to pay $500 for a phone (that’s a new lens), but I’d pay $5 to use it for a day. That’s a fair trade, I think. I’m also curious to see AT&T customer base/revenue before and after 6:00 pm this evening.
posts by date
06/2007In their defense, consistencies among different applications may not be a valid complaint (like why the new top bar doesn’t show up in reader… and where’s reader search?) But one thing that I don’t get is their usage of “tags.” Is it a tag? Is it a label? Is there a difference? Reader has two options for organizing: add tags and add to a folder. However, they both end up with the same result… folders in the sidebar. It’s somewhat misleading, I think. Docs & spreadsheets represent tags as folders as well, where gmail chooses “labels.”
When I think of tags, I think of a N:N relationship, which means I typically tag something with multiple tags at a time. That’s exactly what they let you do, but I don’t necessarily want my feeds and files to be strung out across multiple folders. To me, folders are more of a 1:N relationship. From all aspects of a folder, there’s not one thing that says N:N relationships exist. In a file system, do you keep your files in multiple folders? Probably not. But if you could tag your files, would you give them more than one tag? Most probably would. It’s all fine, I’m just making a point (and probably being too critical). It was obviously intentional, so I’m sure they have very logical reasoning behind it.
And on a side not, after seeing the new interface for docs & spreadsheets, I would much rather have folders than labels in gmail.
Media RSS is a RSS module for media. Currently, RSS2 has the enclosure tag to handle media, but it’s limited to only one slice of media per item. And not only that, there are only two pieces of metadata: MIME type and file size. Without getting into the details, MRSS simply puts more focus on the media and the metadata around media. It also allows more than one media item, per item, and can handle any/all types of media at once. For instance, if I traveled a lot, I could have a vacation feed that would show a photo gallery and several videos per vacation, rather than one image or one video. If you really care, read Yahoo!’s Media RSS FAQ (they pretty much invented it). Post preparation is now over. Sorry for that.
PicLens is a browser plugin that will provide a full-screen slide show for images on sites that support Media RSS. Anymore, slide shows are being designed in a way that actually makes them pleasant to use. Obviously, Flickr supports Media RSS, but I still choose their slide show over PicLens when browsing sets1. However, I find PicLens especially useful for browsing image searches outside of Flickr.
1 For testing purposes (if you do install the plugin), here’s a portfolio set by my favorite photographer.
Some of my favorite photographs come from long exposure shots. Typically, there are two general situations in which long exposures deem appropriate: night shots and moving water. Of course, there are plenty of other reasons to use a long exposure, but as an beginner, these are the two situations that are blatantly apparent to me. Having no easy access to rushing water, I usually try my luck with night shots.
Traffic at night is fun to shoot. But I hate doing it around Morgantown because of the obnoxious (students?) kids roaming around all night. Yesterday, I was in the mood to go take some pictures and play around with what I had (hopefully) learned about long exposures. Without considering the interstates, I thought three main places to be appropriate: Beechurst1, Pateson, and High Street. In the summer, Beechurst at 10:00 pm is somewhat bland, and I had been to Pateson a few nights before. That left High Street. Even without too much traffic, the street/traffic lights would be enough to get a reasonable shot (they tend to glow like stars at 15 seconds and up).
I was on High Street for about 15 minutes before deciding to leave. I took about 10 pictures or so. With nearly every picture, I had to listen to ridiculous comments being shouted out of passing cars and “townies” out roaming the streets. Of course, none of it made any sense. Examples include: “Are you shooting a porno?”, “YEAHHHHH, TAKE MY PICTURE!”, “Whooooooooooooooooooooooo”, and so on. Probably the most uncomfortable, though, was when these three guys were walking by. One of them said “Dude, he’s taking a picture—[to me:] Are you taking a picture of the East Coast?” Then his strung out friend, standing about a foot from me, starts going nuts “[looking at me:] F*** yeah this is the East Coast. F*** you, F*** you, and F*** you [pointing at his two friends and myself]. This is the F***ing East Coast B****!” Since Amie was with me, we left. The last thing I want is to get into an altercation with a strung out heroin addict because I was taking a picture of High Street, especially with Amie with me. I guess deep down stuff like this weighs on my mind. It makes me choose to leave rather than deal with it. I’m just tired of the fact that I have to make the choice.
1 I say Beechurst mainly because of the walking bridge above the road by the PRT station. There’s also potential going up the hill toward Evansdale, but I’ve yet to try it.
Last week I read that Flickr has 525 million photos now (which is nuts) and 55% of Flickr users reside in non-US countries. That means ~289 million photos come from outside of the US. And that’s before they added any multi-lingual support just last week, which amazes me (I could never use an application that’s in another language, even if it’s image-based).
I’ve already mentioned what I think is the worst part of web development, but I’ve since thought of another candidate: internationalization and/or localization (I think they’re the same thing). The reason I can’t explicitly say this is ahead of or just under deployment is because I’ve never actually done it. I know there are plugins (for Rails, anyway) that assist in this issue, but even so. Easy or hard, I’m glad I don’t have to worry about it. I just think it’s a boring problem.
“Just because you can, doesn’t mean you should.” In general, that’s a pretty good rule of thumb. That’s a lot of why software often gets bloated with unnecessary features. Here’s an example of when applied to a light switch: complex lightswitch. I wonder if the engineer is still proud of that, or if he/she now realizes it may be just a little too complex for a light switch.
There are a lot of good movies coming out this summer. I’ve missed several that I wanted to see in theaters, so I guess DVD will have to do. Here are a few of the more well-known movies I want to see (new and old) in no particular order:
- Transformers—I cannot wait (here are a few trailers).
- American Gangster—based on a true story, and has Denzel Washington in it… his movies are usually good.
- I am Legend—this movie has potential to be good, but it’s borderline dumb.
- I Now Pronounce You Chuck and Larry—looks pretty funny to me.
- The Bourne Ultimatum—I’m really looking forward to this one.
- Fantastic Four: The Rise of the Silver Surfer—as a kid, I used to draw silver surfer like nobody’s business, which naturally means I have to see the movie.
- Evan Almighty—looks decent.
- Live Free or Die Hard—might be too predictable, with too many cliche’ lines, but I’ll watch it.
- Blood Diamond—based on real events related to conflict diamonds and looks really good.
- Apocalypto—it’s so far away from the idea of being good, it might be good.
- Hannibal Rising—I’ve seen all of the others.
- The Texas Chainsaw Massacre: The Beginning—I have a feeling this won’t be good at all, but I’d like to find out for sure.
- Knocked Up—mostly for Amie, but I think it might be funny, too.
- Ratatoulie—I think Amie is pretty excited about this one as well, and the animation always impresses me.
If I don’t catch a movie at the theater (or somehow end up owning the DVD), I usually don’t watch it. For whatever reason, we rarely rent movies. Here’s what I thought (briefly) about some of the major hits I’ve seen so far this summer:
- Pirates of the Caribbean: At World’s End: Really good, but you have to enjoy the plot. This one really played on the story more than anything else, and was somewhat confusing to follow. The others involved more “entertainment,” but it’s good in its own right. And it’s almost 3 hours long.
- Shrek 3: Exactly what I expected. It was good, but it’s a movie that I don’t really care about (I don’t think I’ve even seen the second one).
- Spiderman 3: I thought it was awesome. A lot of critics say there was too much going on, with too many villains, but I enjoyed it. I thought the sandman was great, and I loved the fact that venom was in it, too. It was arguably a little corny at times (Harry acting ridiculously happy and Peter Parker dancing to jazz music to, ya know, act “venomous”). I’ll buy it when it comes out on DVD for sure.
- Oceans Thirteen: I thought it was about as good as the second one (which was/is really good), but I liked the first one the most. Still, it goes by fast and it’s fun to watch. A fourth one would take it too far in my opinion.
I really don’t sit around and play games all day, but an occasional ten minutes away from programming is nice every now and then. As if Superman Returns wasn’t bad enough, here’s the paper airplane flight simulator. I’ve played it a long time ago, and it just recently showed its face again. My best is 68.7 meters. (Tip: get as close to the fan as possible, and the chimney is a good thing).
And if you haven’t seen this before, it’s worth looking at: Lego art. OK, I’m done for the day.
The $250+ savings sucked me in. I needed a new battery for my existing phone, which was about six years old. Since I was a long-time Sprint customer, I had $175 off a new phone, plus any rebate offered by the phone itself. When compared to the cost of a new battery, a new phone was potentially cheaper. So I chose the new phone and got the Motorola Razr V3M. My reasoning for this phone was mainly because of how thin it was. I don’t care about camera/video, I don’t care about music on my phone, and I don’t care about text-messaging (although, anymore, I think I’d like that more than talking). The reviews came back positive, so that’s what I got.
In this day and age, we all want things to happen now. It’s more of an expectation than a convenience, and it goes down to the milliseconds. Which leads me to the main issue I have with my phone: it’s too slow. I open it up, it hesitates to show me a screen. I hit “contacts”, I have to wait a second before my contacts show up. Speed dial takes about 2 seconds longer than my last phone, which is what I use the most. It’s hard to make an argument that waiting an extra second (or less) for something is irritating, but it is. A few other annoyances include:
- The camera button is placed precisely where the thumb needs to be when flipping the phone open. What’s that mean? I usually turn on the camera (which takes about 4 seconds) just so I can turn it back off (another 2 seconds) before making a call.
- If I miss a call, it will display “dismiss” or “dial” until I answer one or the other. I can just hit “end” to clear it, but it shows back up the next time I open the phone. This issue compares to the cancel or allow Mac commercial—it’s just annoying.
- The ring tones suck, and I’m not the type to download new ones. I just keep it on vibrate all the time.
- There are only two options for including vibration: “high and vibrate” or “vibrate only”. This may be too picky, but ideally, “low and vibrate” would be my choice when I’m not at work.
So there you have it. And just so you know, I’m probably the last person to review a cell phone, because I’m biased toward not having one at all. I just know I’d probably get something else if I could do it over.
I played basketball daily for years and years. Before making a pass, I would instinctively blur the entire scene. I’ve always thought it was a little odd, but ironically, it helped me to see the court better. I’ve since come to find out that this tactic is a desired approach when a simpler view is sought, and applies to much more than basketball.
At the end of the second law in The Laws of Simplicity, there was mention of something that stood out to me: a “blurred approach” to design.
Groups are good; too many groups are bad because they counteract the goal of grouping in the first place. Blurred groupings are powerful because they can appear even more simple, but at the cost of becoming more abstract, less concrete.
Working within the details can isolate decisions. Sometimes a decision is best made from a different perspective—a broad or abstract (even blurred) perspective. It’s often good to take a step back and determine if what you see as a whole feels right.
The best designers in the world all squint when they look at something. They squint to see the forest from the trees—to find the right balance. Squint at the world. You will see more, by seeing less.
I was seeing the forest from the trees; that’s why I would blur the basketball court. And that’s why I often get a better view of a design from standing at the doorway of my room. Sometimes, it’s the simple view that helps the most. “It [simplicity] feeds the mind’s natural hunger to solve puzzles and to find the right gestalt.”—John Maeda
A friend of mine is working on a Rails CMS (called slate) at WVU. I’ve been following the development via slate info, as well as the screen shots on Flickr. I thought I’d take a minute to give praise to the work they’re doing.
First of all, I’m very impressed with the latest release. I personally think the interface is outstanding. slate does a lot of stuff, and from what I’ve seen, every section is intuitive and focused on the task at hand. The design itself is composed of mostly black, white, and shades of gray. This works well, because it’s easy to draw attention when you need to draw attention. For instance, by changing the sub-heading from black to bright blue, a user is subconsciously forced to pay attention—especially if that’s the only thing that’s bright blue.
I’ve never used slate, but I can tell there is an extreme attention to detail. The development schedule seems to be very realistic (even though I’m sure it doesn’t feel that way at times), which is why I think it’s turning into such a great application. There’s no “throwing it together,” so to speak. Every section seems carefully planned and designed down to the very last pixel, as it should be.
All throughout slate (again, from the screen shots) there is a brilliant use of space. Nothing is too cluttered (line-height really makes a difference). The typeface is very standard and somewhat over-sized, which is a good thing. The menus and options are clear, and they’ve gone the extra mile to make the entire interface very user-friendly.
It’s been fun following their development, and I look forward to reading about what’s to come in the future. Congratulations to Chris and Dave (those guys are the only two I’m aware of) on their hard work—it looks like it’s really paying off.
I started a post on this a couple of days ago, but haven’t had a chance to finish it. After reading Chris’ Deployment woes on the slate blog, I figured I’d go ahead and post a few of my thoughts on deployment.
I’ve spent the last couple of years working in web development and I’ve loved (nearly) every bit of it. But there is a part of this field that I don’t like very much: moving an application into production. Typically, I end up in one of these three scenarios:
- successful deployment on the first attempt—in fantasy land, maybe
- unsuccessful deployment and knowing what the problem is—this is usually where I end up, where I’ve forgotten to do something, or incompatible versions exist, or whatever
- unsuccessful deployment and not knowing what the problem is—this is what I fear and despise, and is the very reason for my pessimistic outlook on deployment
In the first case, life isn’t too bad. Still, whether it’s 10 seconds or 10 minutes, it’s always stressful waiting to see if the application is still alive after deployment. What a relief when everything goes smoothly.
In the second case, it’s somewhat comforting to have an immediate idea as to what the problem might be; but at that point I’m working in light speed trying to fix whatever is wrong. Annoyingly, I always make quick decisions which usually have consequences. But nonetheless, this case is just a matter of time until you crank through the things you’ve realized were wrong.
The third case is flat out sickening. I love problem solving, but that’s different. I get chills just thinking about number three. I’ve been in that situation more than I’d like, even with my own site. That type of troubleshooting is terrible. As soon as I resort to Google, I’m in a state of desperation. And of course, a lot of what works for other people never seems to work for me.
The other day I had about 2 hours worth of troubleshooting a live application after deploying (it could have been worse, I guess). Looking back, I don’t know why it took me that long to fix. Maybe it relates to how disoriented and frantic I get when trying to fix something in production. Unfortunately for me, I’ve yet to come up with a consistently smooth method of deployment. Capistrano looks ideal, but when I tried it the second time a few months ago, I couldn’t get everything working properly, so quit on it. The bottom line: deployment is by far the worst part of web development.
I basically use block helpers to avoid writing out conditions in my views. Sometimes I’d also like to avoid looping statements, but I don’t know how. For instance, in the case of displaying a table and its multiple rows. Currently, I might do something like this:
# helper def table_rows_for(contents, &block) unless contents.blank? yield else text = "Currently no contents for this view." tr = content_tag(:tr, content_tag(:td, text, :colspan => '3')) concat(tr, block.binding) end end # view <table> <tr> <th>Title</th><th>Changed By</th><th>Changed When</th> </tr> <% table_rows_for somethings do %> <% somethings.each do |something| %> <!-- more ERB stuff --> <% end -%> <% end -%> </table>
I would like to include the loop inside of the helper as well, since the contents are being passed, anyway. However, everything I’ve tried results in nil object errors. In a standard loop, the methods are qualified with an object variable (“something” in the example above), and that’s a lot of what I don’t know how to handle. I’d like to just pass the contents to a table_for helper, instead of a table_rows_for helper. I could do that by avoiding the block helper altogether, and construct the html manually in a regular helper, but I still want the html block visible in my view.
def table_for(contents, &block) unless contents.blank? start = "<table><tr><th>Title</th><th>Changed by</th><th>Changed when</th></tr>" concat(start, block.binding) contents.each do # don't know what to do here concat(capture(&block), block.binding) end concat('</table>', block.binding) else text = "Currently no contents for this view." tr = content_tag(:tr, content_tag(:td, text, :colspan => '3')) concat(tr, block.binding) end end
That’s probably not even close, but inside of the contents loop is what I’m having trouble with. Concatenating the captured block seems logical to me. But even if it was right, I don’t know what to do in the ERB (the block I’d be passing). I can no longer do something.title because something now belongs to the helper. If anyone can decipher my issue, please feel free to enlighten me.
I used to be obsessive about borders in a design. Obsessive in the sense that I had a hard time leaving them out. I felt as though they were necessary to crisply distinguish sections of a site. I believe I’m growing out of that, now. I’ve intentionally left the borders off of my site this time1, since I was confident contrasting colors would be just as effective. While borders are nice in a lot of instances, I’m digging sites without borders more and more.
- Example 1—slight use of borders, but overall it’s the colors that separate the content
- Example 2—borderless for the most part
- Example 3—very clean design (I like this version more than the redo)
1 I realize there are a few borders here and there (code snippets, the comment form, etc), but I’m mainly referring to the content containing area, and major focal points: the site header, post headings, comments, and so on.
Everyone likes a five minute distraction every now and then, right? Here’s something that got my attention:
I scored a 95 the first time (from turning my head and running out of time on a couple). I’ve yet to try and do better than that. I only had one picture that was 9/10.
I have to version something I’m working on, so I thought acts_as_versioned would be the quickest and easiest way to go. And it was… locally. I’m using the gem instead of the plugin, and the gem is frozen. Here’s the deal:
# environment.rb config.load_paths += Dir["#{RAILS_ROOT}/vendor/gems/**"].map do |dir| File.directory?(lib = "#{dir}/lib") ? lib : dir end # some_class.rb class SomeClass < ActiveRecord::Base acts_as_versioned non_versioned_fields.push "field_one", "field_two" ... end
I don’t think it has anything to do with the gem not being loaded, as I’ve never had a problem adding lib directories to the load path before. However, I get an error (in production) similar to:
LoadError (Expected ../config/../app/models/some_class.rb to define SomeClass): ...
I can find bits and pieces of this error floating around in Google results, but nothing (suggested) is working for me. After troubleshooting this as long as I have been, part of me thinks writing my own versioning code would have been easier.
FYI: the class loads fine without the acts_as_versioned declaration.
UPDATE: I changed from the gem to the plugin, and it’s working fine now. I already had the gem, so I just unpacked it to save 2 seconds of typing, which ended up costing me nearly 2 hours of troubleshooting.
I’ve come to learn that IE6 is the devil when it comes to CSS and web standards, but I had no idea it would execute JavaScript inside of a CSS file. I really enjoy min-width and max-width, and have always found it a pain that IE6 does not support it. I’m not sure JavaScript inside of CSS is the answer I’m looking for, but then again, it’s just about as good as any of the other IE hacks I’ve learned to use.
CSS3 should provide the ability to automagically uninstall IE6 and replace it with Firefox—that’s the real solution to the problem.
I’m not crazy about opening files (.doc, .pdf, .ppt, etc) online. I would just rather everything happen fast and within the browser (unless I actually need to whole file, of course). I came across the Docufarm Firefox extension the other day. I’ve only tested it on a few files, but it seems like it solves my problem. It converts each page to an image and presents you with thumbnails of the document (example). The only downfall I’ve noticed so far is it lags just a bit when showing the larger page view. But that may be a small price to pay to keep it all within the browser.
I’ve watched a video about surface computing before, but I can’t seem to remember where (or if it had anything to do with Microsoft). Nonetheless, Microsoft Surface (aka “Play Table”) looks great. At this point, I can’t imagine owning it or paying for it, but I’d definitely enjoy using it. I believe it’s initially only geared toward hotels, retail establishments, restaurants, and public entertainment venues, anyway, which is cool.
Of the hundreds of possible usages, I’d have to say becoming the table top in a restaurant/bar would be at the top of my list. In one of the videos, it shows two people ordering (or re-ordering) food by just dragging their choice to the center of the table. I don’t know that I feel comfortable saying “that’s much better than relying on a waitress,” since that’s one more step closer to total automated service, which I wouldn’t like (most of the time).
If you get a minute, you should watch these three short videos and see what you think.
My new camera arrived on April 18, 2007. Sadly, the last picture I took with it dates to May 20, 2007. Over that span of 30 days, I took 1,500 pictures. The professionals say to take pictures everyday, as that’s the best way to get to know your camera. I agree. I learned so much over the last month. Honestly, I’d like to take 3,000/month, which I plan to do. I’m going to focus on one specific thing each day (aperture, exposure, shutter speed, etc), or until I feel comfortable moving on. And then I’ll cycle back through to the beginning. Lately, however, I’ve been occupied with other things; but I’m dying to get back in the rhythm of daily pictures.
2008 by Ryan Heath | Get In Touch





