JSConf 2015 — Three Talks I’m Psyched to Attend

Did I mention I’m going to JSConf this year? It starts tomorrow, so I maybe could have posted this sooner, but this is my first time going, and I’m stuck in an airport waiting for my flight’s crew, so let’s do this.

I’m one of those people that reads over the entire schedule before the conference and plans all the talks I plan on attending. This year, there are three talks that I consider can’t-miss. Here’s why:

Beyond Responsive: Building a mobile web you’re f*ing proud of

Responsive design is always an interesting topic, and that title just makes me want to drop everything and start building a better web. Kate Hudson promises us a talk that goes beyond the usual spiel about media queries; there’s all kinds of stuff in that pitch that makes my mouth water.

Async Programming in ES7

I’ve seen Jafar speak before, and it’s something to behold. If you’ve never heard of RxJS, you don’t know what you’re missing, and you have no idea what’s in store for you in this talk. Expect everything you know about promises to be questioned.

Zombies and Soup: Why End-to-End testing sucks (and why it doesn’t have to)

This one piqued my interest for a couple of reasons: First, I’ve heard a lot about Walmart Labs, but I’ve never seen someone like Dave Cadwallader speak. Second, end to end testing is an enormous pain, and I’m wondering how one of the world’s biggest retailers has approached it. This is definitely the Friday talk I’m most looking forward to.

If you’re hitting up JSConf this year, what are you looking forward to?


Goodbye Google Reader

It’s a sad day for the blogging community; Google Reader has shut down.

As someone who follows way too many blogs, an RSS reader is essential for me. I’ve switched to Feedly, which is great, but as a Google Reader user since 2007, I’m more than a little sad to see it go.

However, as part of the switch to Feedly, I’ve dug through and purged most of the posts I’d starred and tagged in Reader, keeping only a few that have left a lasting impression on my life. Since you might enjoy these as well, here are seven of my favourite blog posts from the past five years:

1. The Office According to The Office

This is an excellent study of the modern corporation, explained entirely by referencing characters and situations from the first few seasons of the TV show, The Office. If business was always taught this well, we’d all have MBAs.

2. How to Give a Kick-Ass Presentation with a Hangover

This was written by a veteran conference organizer, and it’s a list of 60 or so tips for speaking at conferences. I’ve read it before every important talk I’ve ever given (including my talks at SenchaCon and OSCON), and it’s helped me enormously each time.

3. Halfway

I’ve mentioned this post before. The irony of posting it on July 1st — again — is not lost on me.

4. Why Aren’t you Really Good at Graphic Design?

A reminder that the internet changed everything, and all skills are learnable.

5. Overnight Success

Don’t worry about the post, just watch the minute-long video. It’s probably the most motivating video I’ve ever seen, and I watch it anytime I feel like I’m half-assing some part of my work, to remind myself that sometimes you have to stop playing video games for a while if you really want to build something great.

6. On Craft

This is a post about changing jobs. The bit about craftsmanship in the first few paragraphs is exquisitely written, and I take from it whenever I need to explain software development to anyone.

7. Me, but you, but me

Beautiful writing from the legendary Mark Pilgrim. Proof that you can be both a fantastic programmer and a fantastic writer.

I hope this makes up for publishing so few of my own posts over the past year and a half. I don’t think I’ll ever get back to a weekly scheduled, but I’ll do better going forward than I have recently. Many of the posts above weren’t written by professional bloggers, and the thought that I could someday write something that would reach someone the way these posts reached me… well, it’s something I’d like to start working towards, again.


Motivation Hack: Lock Screen Reminders

One of the classic motivational techniques for achieving a goal is to keep that goal in front of you all the time.

The traditional suggestion is to put post-it notes all over your desk or monitor or whatever. This way, when you space out at your desk, you look at one of these and it reminds you that, oh, hey, you wanted to write a book, get that promotion, etc.

But post-its are a little old-fashioned, aren’t they?

Here’s what I’ve started doing instead:

Pick up your phone. You always have that with you, right? You probably check it a hundred times a day. And every single time you do, for a split second, you stare at that little screen you have to slide to unlock.

Take a picture of your goal, and put it on that screen.

Last week I had a lot to do, so I wrote it down, took a picture of it, and set that as my lock screen. For several days, many, many times per day, I would see that list, realize I have a bunch of stuff to do, put my phone down, and get back to work. Often without even unlocking it.

I’m training for a race (the kind you run with your feet). Right now my lock screen has a picture of my awesome running shoes, so that a few dozen times a day I’m reminded that running is awesome because I have awesome shoes. Guess how much trouble I’ve had motivating myself to train this week?

You can put all kinds of crazy stuff there. Anything that visually reminds you of your goal is fair game:

Want to write a book? Jot down an outline and use that.

Want to spend more time with your family? Use a picture of the wife and kids.

Want to start updating your blog regularly again? Try a screenshot of your traffic stats from the month you stopped.

Constant reminders are a tried and tested technique for boosting motivation. You’ve got a little portable reminder-machine that you carry with you all the time and are constantly looking at.

It only takes a few seconds to change the image on your lock screen. Why not do that right now?

Oh, and let me know what you set it to, because I bet I can learn from your creativity, too.

Web Technology

Instant AngularJS Starter

Have you heard of AngularJS?

It’s a Javascript framework that’s picked up some serious momentum over the past few months. And it’s not hard to see why! I wrote a post about why I think it’s great back in July (now the most popular post on this blog, by the way), and it’s gotten even better since then.

But knowing why a framework is great is only the first step. Now you have to figure out how to use it. This can lead to all kinds of frustrating questions:

  • How well does AngularJS scale?
  • What sort of tools can/should I use with AngularJS?
  • How do all those features work, under the hood?
  • Any gotchas to watch out for?

I could go on.

I wanted to help you figure these things out, but I couldn’t fit all of that into a single post. Even with many posts, I would have had to gloss over a few things. What’s a simple, part-time blogger to do?

Write a book, it turns out.

Announcing the Instant AngularJS Starter (also available in paperback).

This is a book I wrote to help you ramp up on AngularJS as quickly and efficiently as possible. It’s full of code samples, helpful tips, and an entire chapter about using the framework to build scalable Javascript applications.

I wrote this book because I used to spend a lot of time learning how to work with new frameworks. I know the pains and problems with trying to build an application in a framework you’ve never used before, and I know what kind of examples are helpful, and what kind aren’t.

If you’re looking to ramp up on AngularJS, and you don’t have time to dig through Google results and sort through forum posts, this is the book for you.

Here’s where you can get your copy:

Instant AngularJS Starter (eBook)

Instant AngularJS Starter (paperback)

If you pick one up, I’d love know what you think. Drop me a line anytime at

Note: There were some typos in the code samples that shipped with the book. I’m working with the publisher to distribute the corrected versions, but in the mean time, you can email me and I’ll send you the updates directly.


Why I Adore my Lumia 920

It’s no secret that I’m a fan of Windows Phone. I was one of the maybe six people on Earth who were actually optimistic for Windows Phone 7.8. But when I realized my pre-paid T-Mobile plan was going to expire days after the Lumia 920 launch, and that the 920 would only cost $100 on a 2-year term, I decided to pick one up.

Best. Decision. Ever.

The Lumia 920 is a phone made by Nokia, running Windows Phone 8. It was released last Friday, but I’ve only had mine for about three hours. I already completely adore it. Here are five reasons why:

1: Nokia Maps is incredible.

I hated Bing Maps in Windows Phone 7.

I remember searching for Westfield one time, because there are a bunch of Westfield malls in San Jose and I guess I wanted to get my shopping on.

It found nothing. This is completely typical of Bing Maps. Coming from iPhone back when it had Google Maps, this was a huge let down. I often cited it as the only thing I genuinely disliked about WP7.

Nokia Maps is leaps and bounds better. I searched for Westfield and it focused on the closest Westfield mall, highlighted the rest with little shopping bag icons, and when I scrolled down from the map, it gave me a text-based list of all the results.

It’s beautiful. Sometimes jabbing at tiny pin drops in a moving car (in the passenger seat, of course!) is really ineffective. Having a list of text results is great because they’re easier to tap, and you can see in plain text what all the results are, without having to tap on each one.

This is a huge win for UX, and it’s indicative of Nokia’s commitment to making sure WP8 succeeds.

2: Built-in GPS is about to be very helpful.

Nokia has a really slick Drive app, which is your basic 3D voice-navigating GPS. The brilliant feature in this app is that it lets you download maps of specific areas in 100MB or so chunks, so that you can navigate those regions while offline.

I’m going to Las Vegas with the wife and some friends this weekend, and one of the things we’re going to do is drive to the grand canyon. I just downloaded the maps for Nevada, so now we’ll have GPS despite driving through areas with bad or no reception. When we get back, I can delete the Nevada maps to free up the 90MB they’re currently taking up. Excellent!

3: Smaller live tiles are awesome!

Live tiles in Windows Phone 7 came in two sizes: big, and really big. Really big tiles stretched the full width of the home screen, and were half as tall as they were wide. Big tiles were the same height as really big, but square-shaped.

This means if you used all big tiles — the smallest available option — you could see about eight on screen at one time.

Windows Phone 8 offers a smaller size, which is 1/4 the size of big tiles. If I put all small tiles on my Lumia, I can fit 24 on screen at a time.

This is incredible!

I still have a really big tile for my calendar, and a big tile for my social network notification app, but that leaves me space for twelve additional icons, which is great when you have three email addresses, two blogs, two messaging apps, and of course a phone icon, and you like to have them all above the fold so you can see all your notifications at once.

4: The camera is superb.

I don’t know a whole lot about cameras, but this Carl Zeiss thing takes great pictures. It also records HD+ video, but I don’t know what that means. I guess it’s more pixels than HD?

Looking at comparisons online, the vote seems to be split on whether it’s better or worse than the iPhone 5 (my money’s on worse; it’s amazing what people can do with an iPhone these days).

All I care about is that the pictures aren’t blurry. You should see what came out of my last phone; it’s like the lens was part Jell-O. Glad to put those days behind me.

5: I’m digging the large screen.

One of the things I was a little concerned about with the 920 is its size. It’s a little bigger than my last phone, which was itself slightly bigger than the iPhone I had switched from.

It turns out the larger form factor is pretty sweet. It fits nicely in my hand, and thankfully the power button is on the side; I would struggle to reach it if it was on top like every other phone I’ve ever used.

My new Lumia sports a 4.5 inch screen, at a resolution of 720×1280. This is really nice for content that generally feels a little cramped on a mobile screen. Calendar events and non-mobile-optimized websites, I’m looking at you — and you look great!

Overall, I’m pretty psyched.

This is the first time since the iPhone launched in Canada (2008), that I’ve owned a just-released phone. This thing has features that I don’t even know how to use (NFC), and some that just seem like overkill (inductive charging).

I think I’m in for a swell two years :)

It’s good to be back, by the way. My last post was four months ago — ouch! — but I’ve been working on a little secret something in my time away. I’ll fill you in soon, but it’s going to be especially good news if you’re into serious Javascript development…


Effective Code Review (OSCON 2012)

In approximately 24 hours, I will be speaking at OSCON 2012.

My talk is about code review, why you should do it, and how it can help you write (much) better code. We’ll talk about hidden benefits, how to do code review with distributed teams, code review tools, and much more.

Here are the details if you’d like to attend:

Effective Code Review

Wednesday, July 18th at 1:40 PM in room Portland 256.

Hope to see you there!

Web Technology

Things that are Awesome about AngularJS

This post was so popular I wrote a book about ramping up on AngularJS. It’s available in eBook and paperback if you’d like a copy.

We host talks at Netflix every Monday, and today’s talk was from a couple of Google employees that work on AngularJS — one of those new-fangled Javascript frameworks (like Ember, Knockout, Backbone, etc).

In no particular order, here are some thoughts I happened to write down during the two-hour talk:

HTML5 Fallbacks

I noticed a couple of places where Angular seems to be doing something that I know is a planned feature in HTML5 (field-level validation, web history via JS).

At first, I thought this was kind of stupid. What are you going to do when those features become mainstream? I don’t want to have to choose between the proper, standards-specified way of doing something, and the way this framework wants me to do it. That would be super-lame.

Eventually I caught on that they’re providing a framework way to do it, but they seem to be falling back on the HTML5 versions when supported. This was very clear in the web history example, where the speaker mentioned they convert from hash-bang syntax to proper HTML5 history API calls, but I caught a bit of it during the validation example as well.

This is actually kind of cool. They’re making the features available right now, but putting the framework (and by extension, the apps built using the framework) in a position where transitioning to the standard HTML5 solution will be easy when that solution becomes widely available.

In short, you get to use soon-to-be-standard HTML5 features now, and it will be easy to convert your app to use HTML5 standards later. Neat!

HTML5 Future-Mindedness

Along the same lines, the team at Angular seems to have put a lot of effort into helping you get your application (and skillset) ready for the future of HTML5. Here’s an example:

One of the HTML5 features I’m most excited about is Web Components. We’re still at least 6 months away from seeing these in beta release channels (Aurora, Canary, etc), but they’re available in the Safari and Chrome nightlies right now.

Web Components are going to change how plugins and widgets are developed across the web. (It’s going to get a whole lot easier for everyone.) They’ll herald in a fundamental change from Javascript-based widgets (see most jQuery plugins) to HTML/CSS-based widgets that perform better, cause less naming conflicts, and integrate better into both standalone websites and Javascript applications.

What I love, love, love about reusable components in AngularJS is that they follow the same paradigm shift. The way you write and use reusable components in AngularJS looks and feels a whole lot like how you’ll write and use web components in a couple of years.

This is super-helpful for the web developer community. Web components are the future, and Angular’s reusable components are a very similar present.

Good Web Citizenship

My main gripe with a lot of frameworks these days is that they don’t play nice with the rest of their world.

Just today, for example, one of my coworkers went on a rant about how some Node-based packaging plugin he was looking at tried to force its own conventions on the content you’re trying to package. This is a huge no-no! A good framework goes out of its way to make sure it can work with as wide a range of content as possible.

AngularJS is one of the good guys.

Need your HTML to validate? They provide a slightly-more-verbose syntax for that. Want to minify your dependency injections? You can do that too, just add an extra line of code. Want to integrate with jQuery or Node or your favourite test framework? No problem!

The web is a heavily-interconnected place, and it’s nice to see frameworks put some effort into fitting in. People aren’t going to use your library if it conflicts with anything they’re already doing/using.

Dependency Injection!

Did your heart skip a beat when I mentioned this a second ago? It should have.

I’m not going to advocate that all JavaScript applications would benefit from dependency injection, but I bet most of the kinds of apps people build with frameworks like AngularJS absolutely will. You get to write less code, you don’t need to worry about the boilerplate of managing dependencies, and it’s just so much more fun to have a smart library handle this for you.

Even if you’re not a fan of dependency injection, I still think you should be excited about this. We need more experimentation with server-side features. If the success of Node has taught us anything, it’s that JS developers want to write server-ish code if it will help them get the job done quicker. Experimentation must be encouraged!

Unit Testing is a Big Deal

I didn’t count how many times our speaker mentioned unit tests, but I’m fully confident it was at least two dozen times.

I know what you’re thinking: Dan, every framework wants you to write unit tests.

You’re right, but most frameworks don’t put anywhere near this much focus on testing. It’s not some after-thought they tacked on to attract the TDD crowd. There’s support for testing in the docs, and every aspect of an Angular application is fully testable. Our speaker discussed integration with Jasmine, Testacular, and Selenium.

It’s always great to see frameworks (and their communities) encourage testing, and the level of testing support for AngularJS is especially notable for how new(ish) the framework is.

The Usual Suspects

Like every other JavaScript framework ever, AngularJS has all the staples:

  • Template support,
  • data binding,
  • work-in-progress documentation,
  • and a handful of useful UI components.

Next time I find time to build a fun little webapp, I’ll probably give AngularJS a shot. I was seriously impressed by all the thought they put into making their features HTML5-ready, and little extras like dependency injection and seriously overwhelming testing support are just icing on the cake.

I’ve been away from the JS framework scene for a little while now. Did I miss anything? Is this all old news? What are the all cool kids using these days?

Software Development

Some Thoughts on Recruiting

There’s an excellent article called The Recruiter Honeypot that’s been making the rounds since it was published last week. It’s a downright fascinating read about the state of recruiting in high tech.

Grab a coffee and open it up. It’s worth a few minutes of your time.

Back? Great. Let’s see if I can supplement what you’ve just learned. Having just been poached myself, here’s my two cents:

1. Recruiters really do rely exclusively on LinkedIn.

One of the most common questions I was asked when I told everyone I knew that I was moving from Ottawa to California to join Netflix was “How did they find you?”.

I was bold enough to ask, and the answer was LinkedIn. Not this blog, where I talk frequently about Javascript and software development, not G+ where I maintained a weekly series of in-depth pieces about web browsers earlier this year, and not Stack Overflow, Twitter, or anything else.

In fact, other than candid prodding from friends, I don’t think I’ve ever been contacted about a job outside of LinkedIn. It truly is the go-to source for recruiters looking for talent.

2. Managers make better poachers than recruiters.

Netflix is not the first famous Silicon Valley name to grace my InMail. What made them special (well, one of many things) was who contacted me: the manager of the team I’ve since joined.

For the recruiting company, there is one major advantages to having a manager make contact as opposed to a recruiter:

Technical managers are former developers. Mine was in my position for five years before switching to management. He knew the role intimately, and could really explain how I’d be spending my time. He knew the team, he knew what technologies we were using (and not using), and he could sell the company as well as anyone in HR.

It’s not easy to leave a job that you love—and let’s be honest, everyone worth poaching loves their current gig—nor is it easy to move across a continent, or to another country.

Before I commit, I need to know what I’m getting myself into. And a manager is almost always going to be better suited for that task than a traditional recruiter.

3. Location matters. A lot.

The number of LinkedIn messages I get from recruiters has gone up by at least 3 or 4 times since I moved to the valley. I get that some of that is due to the Netflix brand, but I’m positive an even bigger chunk of it is location, location, location.

Here’s why I’m so sure: Since moving to California, despite the huge uptick in recruiter spam, every single message I’ve received has been from a bay-area company. Every. Single. One.

Despite how interconnected the world has become in the past couple decades, the recruiters that have contacted me have been massively biased towards location. I can’t help but think this is a trend, and also an opportunity for teams that are willing to hire remote workers, or invest in relocation costs.

There you have it…

If you want more recruiters to contact you, beef up your presence on LinkedIn.

If you’re trying to poach someone, send a manager instead of a recruiter.

If you’re looking to work in the valley, move to the valley.

(And because I’m sure someone will ask: Netflix is great, and I’m having a blast. Won’t be leaving anytime soon.)

Web Technology

We Still Haven’t Solved Search

Google Search results for "What time is tomorrow's Giants game?"
(click for larger version)

Pictured above is what I see when I search “What time is tomorrow’s Giants game?” on Google.

It’s terrible.

Look at the sidebar on the left. What does it say for location? San Jose, CA. And where are the top two results? New York. Nearly 3000 miles away.

The next two hits have the right team (thankfully), but are both from 2010. I had “tomorrow” right there in my query. This is another missed opportunity.

The next two hits are for the wrong city, again, and rounding out what I saw above the fold is telling me tomorrow is March 27th. Disappointing.

The bottom three results (the rest of Google’s first page) were equally unhelpful. Beneath that were some ads promoting the Giants, and even mentioning their schedule, which is completely infuriating; why are the targeted ads more relevant than the search results themselves?

So, next time someone tells you that search is a solved problem, or that nobody will ever be able to beat Google, you can remind them that search is hard, and even the Giantest search engine of them all still has a long way to go.

Software Development

High School Students Make Great App Developers

Check out this OC Transpo app (for Android) built by a few Ottawa high-school students:

Look at the polish. The crispness of the design. These guys get it. That app is going to do really well.

They had a little help. My last gig was pretty big on social involvement, and sent a few designers/developers to mentor the students and provide guidance. (I was one of them, until I moved.) But we were just there to teach high-level concepts and weigh in on decisions. The idea for the app, all the app code, and the app’s overall design were all generated by the students.

They did a fantastic job, and this shows us two things:

First, high school students are perfectly capable of building useful software. I spent four years volunteering my programming expertise at various Ottawa high schools, and you would not believe the quality of some of the products I’ve seen. The app showcased above is one of the best, but it’s not an outlier.

Second, app development is a great way to learn to program. We figured this out years ago when I was volunteering with OCRI. With a little guidance, all a novice programmer needs to build something truly incredible is a platform and a purpose — and he or she can usually supply the latter.

This is the amazing thing about software. You can have a giant company with hundreds of employees trying to solve the same problem as a few teens in a classroom, and which will do a better job is anyone’s guess.