Tuesday, January 29, 2013

HTML5 for .NET Developers

We need more JavaScript developers! There are too many jobs, and not enough qualified devs. The thing is, JavaScript isn't even that hard, and it's actually quite beautiful, but you've got to take the time to get to know it.

There's a huge pool of talented developers in the .NET world, hitherto sheltered from JavaScript, but now starting to become curious. For a long time, Microsoft urged devs to shun HTML and JavaScript in favor of the tidy, self-contained world of .NET. They scared us with horror stories about browser incompatibility and unreliable open source libraries. Even if you wanted to do interesting things on the client side, there was Silverlight to keep you in the safe Microsoft bubble.

It worked for a while, but now the winds have changed. All of the interesting stuff that's happening in the client-side world today is done in HTML, JavaScript, and CSS. With Node.js, JavaScript is becoming an important language on the server. With Windows 8, even Microsoft has embraced these technologies, leaving a lot of developers feeling stuck. Having never taken the time to learn the open web stack, is it too late now?

Jim Jackson and I wrote HTML5 for .NET Developers as an invitation, to help bring these folks into this new world. We give you a crash course in the core web technologies, as well as an introduction to some of the latest additions. Since each chapter is its own little project, we give you lots of great starting points for your own explorations.

Throughout the book, we're sensitive to the issues particular to folks coming from the .NET world. One of the common problems is trying to program JavaScript like it's C#. You can kind of do it, but you end up with a mess that's worse than either language on their own. We show you how to program JavaScript like it wants to be programmed, and everything is much smoother. It may take an open mind at first, but it's worth it.

People are also often overwhelmed by the fact that, while .NET is relatively self-contained, the JavaScript world is wide open; you're using all these libraries from different places, on all these different platforms, and there's new stuff every day. The good news is you don't have to learn it all, and there are tons of other people using the same stuff, sharing their discoveries, and helping each other out. We help you establish a beachhead from which you can continue to expand your knowledge.

So, if you're JavaScript-curious, come on in, the water's fine! Buy our book, play with our examples, hang out on Stack Overflow, and make stuff! When you do, let me know… I'd love to see what you come up with!

Tuesday, August 28, 2012

Fathom Philosophy

Fathom is simple enough, but it's actually got a lot of my design philosophy packed into it. I'd like to go into detail on each of these points eventually, but for now I think it's worth just getting the broad brush strokes out here. So, in no particular order:

Rather than focusing on the recommendation algorithm, I'm focusing on the presentation/exploration interface. Recommendation algorithms have gotten lots of attention, so it's hard to move the needle there; interface not so much, so there's lots of potential in that area.

Make it fun, inviting, and safe to explore… eliminate click friction; make it easier to just try something than it is to think about whether you should.

Rather than completely passive (like Pandora) or completely active (like Amazon), you get to choose and fluidly slide between levels of involvement.

By using APIs, I can focus on my strength (user interface) without having to build up all of the required data ahead of time. Also, by being connected to those other sites, we become just a little entwined… no website is an island anymore. This approach has its challenges, of course, but I feel it's worth exploring.

The interface scales to fit your window, however big or small.

The content is the interface, as much as possible. Controls appear when needed and disappear when not.

Animation is used to explain what's going on… you see where things are going to and coming from.

Focus on albums, rather than tracks.

Promoting album cover art and reconnecting it with the music in people's minds.

Minimize unnecessary clicks; for instance, you don't have to click an extra “play” after selecting an album.

An album's “neighborhood” of related albums gives it context… you start to get a sense for the space.

Having new albums come in with every move keeps things fresh and gives a game-like exploration feel.

Music is right-brain; your interface shouldn't be left-brain classics like the spreadsheet (iTunes) or huge pages of text (Amazon).

Of course Fathom is just one possible expression of these ideas. I look forward to future explorations along these lines. What do you think? Did I miss any? Are there other good examples of these principles out there?

Labels: ,


Tuesday, August 07, 2012

Intersection & Union

Time for today’s math lesson! How are the geometric concepts of intersection and union applicable to your daily life? To discuss this fine topic, we'll use our old friend, the Venn diagram:


That bit where the two circles overlap is called the intersection:


The entirety of both circles together is called the union:


Pretty basic stuff. Remarkable how few people seem to get how it applies to them, however. Let's take business: When I was at Microsoft, we were constantly being told, “You can't do that, you’ll step on the toes of one of the other divisions,” or, “Helping our customers in that way would also be helping our competitors.” The idea was that no part of the company should do anything that might interfere with what some other part of the company was trying to do. All the different parts should make the other parts work better. There are all sorts of great buzzwords for this, like “synergy” and “better together”. On the face of it, it all sounds like common sense… don't get in your own way, help yourself out. The problem is, when you think that way, you end up with only the intersection of your business initiatives, only the areas where one helps the others:


… and every new initiative you have, that intersection gets smaller:


… but this is business, ruled by bigger, better, more! What you really want is everything, the union:


If one department steps on the other’s toes, it’s okay, because the whole pie is so much larger.

This doesn't just apply to business, of course. Let's say you're dating someone. Here’s a diagram of your movie tastes as a couple:


… and now it’s time to pick out a movie to watch together. Should you go for the intersection (where your tastes overlap), or the union (where at least one of you is interested)?

It comes down to how long you're together. If this is your first date, you’d better stick to the intersection, so you know everyone's happy. If you're going to stay together for years, though, you need to start venturing out into the union… otherwise, not only will you not see as many of the kinds of movies you like, you also won't get the opportunity to discover new things you might like outside of your comfort zone. For a marriage to survive, you need to be able to keep reinventing yourselves together, and that means trying new things.

The timing factor applies to companies as well: if you're a startup, everybody needs to be focused on one thing so you can move quickly. That puts you right in the middle of the intersection. Once the company has a chance to mature, however, sticking to the intersection means stagnation, which means death, or at least irrelevance.

Whether you're a person, a marriage, or a company, long-term survival depends on periodic reinvention. Look to the union of your interests, and you'll always find it.

Thank you, math!

Tuesday, July 10, 2012

Things You Don't Mind Breaking

As anyone who lives with kids well knows, they're a potent force of destruction. It's tempting to hide all the breakables and fill their lives with indestructible plastic objects. Of course this means you can't have nice things. Worse yet, your kid never learns how to treat things nicely.

Our strategy has been to fill Caitlyn's life with nice things, breakable and not, which are nonetheless relatively inexpensive and easy to replace. We don't want them broken, but it's not a big deal if they are, and it's a valuable learning experience for Caitlyn. If it's a plate, she helps clean it up, and we get another. If it's a toy, we try to fix it, and if we can't, that's how you lose your toys. These days she routinely handles heavy glass jars full of food, for instance, and rarely is there ever an incident.

It seems to me that this is a good principle in design as well. If you treat your users like idiots and constantly protect them from themselves, then they'll just keep getting dumber. If you give them nice things and help them learn when they break stuff, you're helping them grow, and they'll love you for it.

Labels: ,


Tuesday, July 03, 2012

Interdependence

I'm a pretty self-reliant guy, but somewhere along the line I have come to realize that too much self-reliance is a bad thing; it isolates you from other people. The advantage of "relying on the kindness of strangers" is you get to know people, and you build a web of social capital and debt. Being able to act independently is a powerful thing, but it doesn't beat being enmeshed in a strong social fabric.

So next time you think you can do it better on your own, think about what you might be missing by not letting someone else into your life.

Tuesday, June 26, 2012

Whole Systems Thinking

The candy bar was delicious, but now I've got this wrapper to deal with. Easiest thing would be to chuck it here on the street. I'm optimizing for my own convenience.

But what about the whole system? What impact does my action have? Well, just this one candy wrapper doesn't make much difference. But what if everyone dumped their trash wherever they happened to be standing? We'd be wading through it, right? Doesn't sound good. On the other hand, maybe we could hire a small army of folks to collect our trash for us, and solve our unemployment problem! Of course, if we could afford to hire all those people, is there something better we could be doing with their time? And anyway, who's going to pay for those jobs? Maybe a sales tax increase? Is it worth a few extra pennies per candy bar for us all to be able to drop our wrappers wherever we want and still not end up drowning in seas of trash?

Maybe so, maybe not, but at least you're thinking the whole thing through.

Of course, if we thought through every decision that thoroughly, we'd never get anything done! It's a useful skill to have, though, especially when thinking about shaping the institutions that surround us. Every one of us has an impact on those institutions (your neighborhood, your job, the government, etc.) on a regular basis, whether you think of it or not. The more we all learn how to think at the system level, the better off we'll all be.

So how does one get better at thinking in systems? Practice, of course! Learn about systems, build systems, experiment with them.

Believe it or not, playing games helps… games are often little systems (small enough to wrap your head around), and figuring out the dynamics of the system increases your skill at the game. Next up is modifying games (say, change some of the rules to Uno, which itself is just a modified form of Crazy Eights), and then creating new games.

Systems are all around us; you just need to keep your eyes open. How do things fit together? What actions lead to what reactions? What happens when single actions become many? Ask yourself questions like, “What if everyone on the planet did this?” or, “What if we continue doing this for the next thousand years?” or, “What changes in behavior would this incite?”

I don't know, what other ways can we help strengthen our systems thinking muscles?

Tuesday, June 19, 2012

Red Pen

I'm an incurable proofreader. I grew up in a household that published a magazine, and now it's second nature to spot typos, improper homonyms, punctuation issues, etc., wherever they may be. Even when I find a typo on someone's website, sometimes I'm compelled to let them know. I figure it's the virtual equivalent of telling someone they've got broccoli in their teeth… a little embarrassing perhaps, but it saves them from greater embarrassment down the road.

What I (and all the other incurable proofreaders of the world) need is an easy way to inform the website owner, so bit by bit we can collectively clean up the writing on the Web!

Here's one possible design: A “red pen” bookmarklet sits in your browser, awaiting the moment you find some text that needs fixing. When that moment arrives, as it inevitably will, you select the offending text and hit the bookmarklet. Up pops a dialog box with the text, an opportunity for you to describe the correction, and a big friendly “send” button. Hitting the button e-mails your note, along with the URL of the page, to the best address we can find (if nothing else, the technical contact listed for that domain's WHOIS record). If this thing becomes popular enough, people will even register their websites with the service, to streamline the process.

What do you think? Is this the gadget you've been waiting for, or should we all just keep our writing critiques to ourselves?

Labels:


Wednesday, May 02, 2012

Fathom: Now with more music!

I've finally gotten around to adding Rdio streaming music support to Fathom! This means everyone now hears at least samples of all the tracks, which already makes for decent music discovery. If you have an Rdio account, however, you'll hear full-length tracks, which is even better! You don't need to log in to Rdio on Fathom; as long as you're logged in on the Rdio site, it just works (thanks to the great Rdio API).

So what are you waiting for? Get hunting!

Labels:


Tuesday, March 20, 2012

Cool Music Interface Explorations

It seems like the music tech scene on the Internet is bursting with potential these days. Unfortunately, I've been so distracted with other projects that I haven't had a chance to do all the crazy cool things I want to with Fathom… I keep telling myself I'll get to it soon, but, well, so far that hasn't happened. There are sketches in my notebook, but not much else.

The good news is it hasn't stopped other folks from taking some of the same ideas and running with them. At least I get to see them in action, right?

For instance, I wanted to do a kind of group DJ/party/jukebox thing where everyone collaborates to make the mix we all listen to. Well, someone has made that:


I also wanted to make a service that would watch your social feeds for links to music recommendations and give you a “music inbox”. Yup, someone has made that, too:


Here's another one I at least got around to writing up (well, in terms of books): an easy way to share music recommendations without having to know what service your friends use for streaming. Sure enough, someone's made it:


Of course, they're not quite exactly what I would make, so maybe I'll still get around to playing with those ideas, but in the meantime, it's great to see all these explorations happening! I mean, if I'm not going to get around to it, someone should.

Labels: , ,


Tuesday, March 13, 2012

Off Planet Mozilla

I've been syndicating my blog to Planet Mozilla for about a year now, and it's been great, as it's a community that shares a lot of my passions. I've been finding lately, however, that I've been subconsciously censoring myself, wanting to make sure my posts are at least somewhat relevant for that audience. Considering my extremely low blog output, anything that slows me down further probably isn't a good idea, so I've decided to switch to a tagged feed; only posts I specifically tag for Mozilla will show up on the Planet.

If you've been reading me through Planet and would like to continue following my (hopefully more frequent, but no promises) off-topic posts, you can do so with the RSS feed for my blog, or even (for more off-topic bits plus blog post notifications) my Twitter stream.

I haven't been actively working on Firefox for a while now, but I still consider Mozilla to be one of the best families I've been welcomed into. Cheers to all of you!

Labels: