My new site: fortuitous

leaf logo When I came back from Austin, I mentioned that I wanted to do a new site focused on business type advice. After a month or so of the idea gelling in my head, I wrote down about 30 ideas for essays I’d like to write, I banged out a mockup, and I looked up a bunch of goofy domains. A couple more weeks passed and thanks to the CSS coding of Ryan Gantz, editing skills of Anil Dash, and the nice fellow that sold me the domain cheap, I give you: fortuitous.

It’s a new essay every Monday about some aspect of business that I’ve learned while running the MetaFilter/PVRblog/etc empire. Nothing too earth shattering, but it’s a fun outlet and I think it’ll help a lot of people in a similar situation out. Subscribe to the feed and follow along.

(btw, the design of the bottom frame CSS hack thing is totally cribbed from NorthTemple and it does display funny if you scroll your mousewheel like mad. It was also the first thing I’ve ever built using Coda as the IDE and it was fantastic, with a little more polish/features it’ll replace Textmate as my editor of choice)

Bug report: Two things that suck about Gmail

Gmail is the best web app there is, period. It’s also my sole interface to email. It’s close to perfect, but a couple things keep me from calling it as such.

I get a ton of spam, in the low thousands per day, and gmail is pretty good about most of it, but it does generate a lot of false positives. Given that say 3,000 spam messages come in every day, false markings on 3 or 4 messages is damn good percentage wise (putting gmail’s filters as 99.99+% accurate), but it still sucks to miss out on legit email. I’ve found a couple places where Gmail is lacking:

  1. I have a few filters for mailing lists and email from my websites’ contact forms, which each get labels. Stuff I filter on sender or receiver and label should bypass spam filters. Today I missed several messages addressed to my contact form and one mailing list message that was merely someone’s eulogy of a lost friend. I don’t think spammers are going to guess all my filter rules and labels to get around Gmail’s spam-catcher so I think it’d be safe to skip the spam checks on any specially filtered or labeled mail. If you’re on a mailing list that gets spam, you should probably fix it through your mailing list software, not your client. I can’t have any false positives with private mailing lists (spammers will never join) or contact forms (it’s my first point of contact with outside strangers and very important that I don’t miss any).
  2. I get a lot of phishing scam email that makes it into my inbox and Gmail’s phishing reporting makes you think you’re doing something substantial (it requires the extra step and all), but in reality I’ll get several exact copies of things I’ve already reported as phishing scams minutes to hours after I report the first one. It’d be nice if Gmail would kill any and all future attempts that match previously reported phishing spam.

Parallels updates

I first heard about the new Parallels beta here on Dan’s vox account. It’s really incredible. It includes a couple cool new features, one being “Coherence” which lets you run windows intermingled with your mac. See how I have a windows taskbar below my apple menu at the top? That’s Coherence running.

When it comes to computers, I’ve long been a tool agnostic. I started on Windows but I used to run emulators to test out how sites looked on a linux box or an old mac. I used both a mac and windows machine simultaneously for the past four years so I could use the best applications of each platform. At first it was two computers side-by-side, then I got to share a single keyboard and mouse. Eventually, I got two virtual desktops running on a single intel Mac with Parallels. With the latest Parallels beta, I can now run just the one or two windows apps I need directly on my mac desktop.

After many years of tinkering, I’ve finally got the ultimate web testing platform. I can edit files in a window, then just hit refresh on safari, firefox, and IE6 all next to each other to see how each browser responds to changes.

If you develop websites and have to worry about CSS differences between platforms and browsers, this is the killer tool for you: Parallels and an Intel Mac.

Future of Web Apps

In a few weeks I’ll be in SF for the Future of Web Apps conference.

Every conference I’ve been to has had its share of shortcomings, and often my friends talk about someday doing our own conferences so I’m happy to see developers like Ryan Carson take the initiative and do their own. I’m looking forward to and I like that it’ll be a single-track speaking schedule. There’s something extra you get out of being stuck in the same room with everyone that you don’t get in a big sprawling multi-track conference that forces you to ask everyone “were you in the talk on X?”

It looks like it’s in a huge theater so I bet there are still tickets available.

For the love of bartering

I’ve been building sites for ten years now, but these days I’m lucky enough that I don’t have to take on client projects to pay the bills. Back when I did, I always had a love-hate relationship with my clients and the work. I spent a lot of late nights away from my family and my own projects but it also paid fairly well but then again every once in a while a project would go way over my budgeted time and I’d take a loss on it.

Lately though I’ve run into family members and non-web nerd friends that need help building sites and I’ve dipped my toe back into doing it. But this time around, I’m having a blast helping them out because instead of money, we’re doing small barters of favors or cheap goods. Here’s why it’s working this time around:

– When you’re not billing someone $100/hr for your time, they’re not edgy when you don’t finish a task immediately and you’re not edgy when they go out of town for a few days leaving you waiting for feedback. It’s incredibly low stress compared to paid client work.

– I trade my work for something friends/family produce or get at a massive discount. It’s always for something I kind of want or need and I save a few bucks by getting it free. They get a great site for a small (if any) price and we’re both happy.

– I tend to be bashful with clients — I’m not the type of guy to bust into a conference room and proclaim I’m a world-renowned web expert on coding, design, and community. Turns out it doesn’t matter when they’re friends and family — if you’re building a site for your uncle, you don’t have to explain why XHTML/CSS web standards are important or worth the effort, you can just code it.

– It’s almost always a new site, so there aren’t legacy code/design/support issues and there’s often low-to-no expectations from the “client”. Anything you do will wow them so you’re free to explore possibilities. I’ve yet to have an argument over mockups and I’ve been able to go with my first mockup so far. This also makes things stress-free and easy for you as the designer/developer.

– One example: I traded a year of free haircuts for building a site for a salon. The salon owner would probably have to pay someone local $500 or more for something similar and now I get a nice $30 haircut every month or two, saving a couple hundred this year. The cost of their time for cutting my hair is much less, so everyone’s happy in the end.

I’m doing a couple more sites for family and friends in the coming months, and someday I’d love to hook up with a local silkscreen shop to trade t-shirt printing for building them a new website.

If you’re a designer/developer, try asking around your local friends and close family — chances are they could use your help and can get you something small for the low-stress work that makes everyone happy in the end.

When friends and contacts are neither.

I noticed something weird in how I use Flickr today and wondered if maybe there is a disconnect between social software systems and utility in web applications. I know flickr has continually moved away from the social software label, but their application still has firm roots in such a system.

I started using flickr back when it was a flash-enhanced backchannel chat at etech many moons ago, and when it was finally released to the world, it was built off the previous web trend of social software [1]. You used to have 5 or 6 different levels of contacts with various rights attributed to your images, but thankfully they simplified the process into basically “contacts” and “friends/family” (friends and family can be separate, but they’re basically equal).

So the odd thing is that I’ve been adding really good photographers as “friends” even though I’ve never met them. Real-life friends I’ve shared many beers with have been demoted to “contacts”. Half my contacts list contains people I’ve never had any contact with whatsoever aside from looking at a photo of theirs on flickr.

When I first joined flickr, I did the natural thing and connected to everyone I knew online as contacts with people I met and hung out with in real life as friends. But flickr isn’t just a social software app and is a great utility, and the one page I hit on many times a day is the “Photos from your contacts” page. What I quickly found is that while I love seeing my friends take photos of the beach, and their family, and meals they eat, eventually the feed was getting clogged with one friend’s fascination with a subject, or another friend’s attempt to upload thousands of photos at once.

I realized mapping my personal relationships of “contact” (acquaintances) and “friend” clashed with the actual utility of Flickr. With almost 300 contacts, I’ve taken to keeping my favorite photographers as friends, and viewing photos from “friends and family only” and switching that back to “photos from all contacts” occasionally when I have nothing to do and time to kill. A bunch of pro photobloggers I’ve never even emailed are on my friends list, while people I have attended many parties with and enjoy talking to are demoted to contacts. At this point, the word “contact” lacks meaning and I can’t think of a new term they should swap it out with.

This presents weird social problems. I worry when I set a stranger as the elevated “friend” level and they get the email from flickr describing it — it feels like a social faux pas that I’ve overstepped my bounds [2]. Similarly, I don’t have the heart to completely delist anyone from the lowest contact level, especially those I’ve talked with at many parties, on the off chance they notice.

Maybe it’s my early adopter status and adding so many friends as contacts early on when the application was just getting going, but I’ve noticed the leftover social software components don’t really mesh with how I use the app anymore. Flickr is a really useful, fun way to share photos with friends — it is software and it is social in nature, but the old conventions of social software don’t really apply.

I’m curious what comes next — what terms should we use to describe social and utilitarian connections in the latest web applications?


[1]. It’s weird how the best example of web 2.0 technology was born during the 2003 social software boom that has since passed. Is the next king of web development trends going to spring from all this web 2.0 hullabuloo by learning from current mistakes and conventions and outlive this era?

[2]. For the ancient-in-web-years reading this, you probably remember a time when Carl Steadman added you as a life partner on

Thoughts on etech

I just got back from etech, exhausted a bit more than usual considering I didn’t partake in any sort of debauchery. Everything is still fresh in my mind, so I better jot my thoughts down before they escape me.

The Good

My favorite talks from the event were George Dyson’s, danah boyd’s, and Scott Berkun’s. They were fun, interesting, and filled with good ideas. There were a lot of product demos (more in a bit) but two stuck out as fun to watch and I couldn’t wait to use reblog and (someday in the distant future) a multi-touch interface (which is absolutely incredible). It was fun to drive around in a hydrogen powered car. The food was better this year, and having three nights of free open bars was very generous for the sponsoring companies, though I never had more than one drink. This year’s etech also had a futuristic streak — where topics of what computing and life would be like 30 years from now was heavily discussed and while that may have no bearing on my own work I found it refreshing and stimulating. More talk of robots, more crazy art student hacks, and more discussions of future RFID universes of things, please.

It was great to see everyone and I came away with lots of good ideas for things to build into my own projects (mostly from conversations, not presentations though).

The ‘meh’

The conference was sold out, so it was crowded everywhere, which is to be expected. But it did suck to miss talks because the rooms were overfilled. Once a day I couldn’t get into a talk I wanted to see and couldn’t get into alternate talks either and had to sit in the hallways instead. On the last day, talks were moved to smaller rooms with almost the same number of people so it was very difficult to see all the talks you wanted to see that day. I showed up ten minutes early to the ones I got into and still barely got a seat. I don’t know how to solve this problem when a conference is popular, but it would have been nice if the last day still maintained the larger rooms (that still filled up the previous two days).

Oh, as a result of the crowds, the wifi was borderline unusable. When you could get a connection and load a page, it was like a slower-than-normal dialup, frequently taking a minute to load a web page with lots of timeouts. It was a tech conference and everyone had a laptop, so I know it’s a tough crowd to manage bandwidth for, but I would have been a lot happier this week if I could check email and my sites during down times. Maybe Cisco or Verizon can sponsor it next year and wow us with fiber speeds in the many multi-megabit per second range.

There were a lot of product pitches thinly disguised as talks this year. A handful were interesting. In addition to the ones I already mentioned, the Root Markets talk and even Ray Ozzie’s copy/paste demo were fun to watch and showed how a product could save you time. The rest of these demos felt out of place. It was especially clear during the morning keynotes. You’d have one or two interesting talks and there would be some momentum between the audience and presenters but then… bam! a boring shill from some company demoing their latest patch that added ajax to a product I didn’t care about before and won’t care about in the future. A boring product demo or two combined with a slow internet connection meant an otherwise fine morning of talks was often soured by the 20 minute infomercial I couldn’t escape from. Don’t get me wrong, some demos are cool but so many of them this year fell flat on their face — were the presenters oblivious to the audience? It sure seemed like a few companies had no grasp on what the conference was about when they gave their talks. I’d say the Microsoft, IBM, and Adobe/Macromedia demos felt the most off-kilter with the audience.

Sponsorship of conferences and product launches/demos aren’t going away and aren’t categorically bad things, so I hope future etechs can strike a balance between companies wanting to get the word out and audience expectation of compelling talks and information. It’d be great if all the demos could be put into a big morning slot where everyone gets ten minutes to show their latest product. It’d be a great incentive for startups to launch big new ideas at etech and I bet the demos would feel less like an infomercial and more like something I’d be excited to attend and see for the first time.

The theme of the conference was about attention economy — how to conserve what time we have and maximize our output amidst the information avalanche that hits our desktops daily. I wasn’t convinced talks and demos were working towards that. Everyone seemed to mention the word “attention” and tweak their introductions to fit the theme, but I saw very few mentions of practical advice, approaches, or tools to help me get through the glut of email, rss, and the web. I wasn’t expecting a GTD seminar or anything, but it would have been nice if presenters dropped tips or let the audience look over their shoulder as they worked, metaphorically speaking.

Overall, I had a good time, ate some good food, talked to and met a lot of great people. It was a fun trip but not a perfect conference (etech has been the perfect conference in the past).

Measuremap goes to Google

(the signing, originally uploaded by MaggieMason)

I’m happy to see Google did indeed buy Adaptive Path’s Measuremap. I joked about the rumor earlier, but it’s actually a great time to acquire an app.

I’ve been using Measuremap since last summer and I could tell from early on the service was going to be hardware intensive. They built a robust statistics package that let you deeply mine your data but they also had all that data to deal with. I know people that devote a separate box to analyzing their log files from a single site, so it was hard to imagine how Measuremap was going to deal with every hit to every blog and offer all kinds of analysis on the data for every user. Google’s great at massive hardware-intensive projects, so they’ll be a good new parent.

When it comes to their applications, Google could also use some design help and they couldn’t get a better deal than taking on Jeff Veen. It’d be great to see Google Analytics stuff get a fancy AJAX facelift from Measuremap, or have Google Analytics and Measuremap combine into some sort of hybrid super stats package. My hope is that hey work Veen like a mule, and he revamps the Google Adsense system, the search engine output, Google News, and makes Google Video look cool. Hey, I can dream can’t I?

But a big hearty congrats to AP, Measuremap will be great when everyone can use it.

I just found this in my saved iChats, from the first day I got to try out Measuremap:

me (11:55 AM): holy cow I can already see why this is crack in its pure form
jeff veen (11:55 AM): may I send that quote to the team?

Testing JSON

Last ten from delicious, via the JSON api (thanks to Jason)

function showImage(img) {
return (function() { = ‘inline’});
var ul = document.createElement(‘ul’);
for (var i = 0, post; post = Delicious.posts[i]; i++) {
var li = document.createElement(‘li’);
var a = document.createElement(‘a’);
var img = document.createElement(‘img’); = ‘absolute’; = ‘none’;
img.height = img.width = 16;
img.src = post.u.split(‘/’).splice(0,3).join(‘/’)+’/favicon.ico’;
img.onload = showImage(img);
a.setAttribute(‘href’, post.u); = ’20px’;
li.appendChild(document.createTextNode(‘ /’));
for (var k = 0, tag; tag = post.t[k]; k++) {
var t = document.createElement(‘a’);
t.setAttribute(‘href’, ‘’ + tag); = ‘smaller’;
li.appendChild(document.createTextNode(‘ ‘));