I’m Giving Away a Copy of My Book, Beginning HTML and CSS


Want a free copy of my book? Sure you do. This month, I’m giving away a copy of my book right here on the blog (on this very post.)

The rules of this contest are simple, simply share an interesting/funny anecdote about your experience interviewing for a technology or agency position (no names or companies needed, blind items are fine.) At the end of October, I’ll pick the best one and you get a free copy of my book, Beginning HTML and CSS. I can’t tell you what kind of story will win, but if you’ve got an interview story that’s funny, creative, cool, inspirational, or whatever share it and you might get some free stuff. This contest is open to anyone in the world with an address. If I can send you a copy of my book using the US Postal Service, you’re eligible.

And heck, even if you’re already an expert and don’t have need of a beginner book, you can certainly hand it off to someone looking to make their own site for the first time or to an engineer from another technology discipline looking to get introduced to the joys of web technology.

Posted in HTML | Tagged | 4 Comments

The Project (soon to be) Formerly Known as ng-grid

I’ve go a bunch of small updates to share (and one big one.) I’m starting with this one since it fits with the Angular kick I’ve been on.

I’ve recently gotten involved with the ng-grid project housed under the Angular UI banner. We’re using it at work, so it makes sense for me to pitch in to help keep the project humming along as best it can.

We had a meeting last week and hatched plans to rewrite the core of the project in order to juice performance and ease development going forward. Working in financial services, grids are a big deal for me and I’ve never been a huge fan of any of the ones out there. I’m hoping this project will end up being the quality grid I’ve always been looking for as a consumer.

On the name

While it’s called ng-grid at the moment, it’s going to get a name change for 3.0, in order to better fit with the rest of the Angular UI stable. I’m not 100% sure of this, since we haven’t followed up since the meeting, but it will likely be UI Grid.

So, yeah. If you’re an Angular type and are looking for a data grid, I’ve got your back.

Posted in JavaScript | Tagged , | 15 Comments

And… @roblarsenwww

I’m finally going to start using @roblarsenwww. I’ve had the account for a couple of years and have long had the plan to use it for tech tweets. As I’ve basically given up editing my other interests on @robreact, I figured now as as good a time as any to try to separate out the accounts. If you’re interested in technical subjects you’re not all that well served by @robreact and I’m enjoying the content I’ve been sharing there, so I’m not interested in changing what that looks like any time soon.

So, if you currently follow me @robreact, that account probably won’t change much. I don’t really talk about technical subjects there very often, so very often will just turn into never. @roblarsenwww will be only be about technical subjects. It’s basically content I don’t share at present. IF you’re interested in that stuff, follow me there.

Now you know.

It will look something like this:

Posted in Web | Leave a comment

Help Wanted: Please Test the New @h5bp Ant Build Script Image Optimization Flow

I reworked the way images are optimized in the Ant Build Script. After all the work I’d done to get it to 1.0 I discovered that a lot of the features we added to the image optimization process, coupled with a few hacks I threw in there myself, had made the image optimization tasks wonky on the Mac and on Linux. To that end, I reworked them, making them much simpler logically. I think the new changes are pretty foolproof (me, being the fool) but I need as many people as possible to test it to make sure I’ve really solved the problem. With these image issues fixed, I would release 1.1.0 and then sit back and see how things go. I’m really looking at getting the project to a nice stable place where I can just let it chill out and do its thing without me worrying about having stupid open bugs staring me in the face.

Which is where I am now.

Anyway, the branch is new-image-optimization.

To test you need some PNGs and JPGs in the img folder in an HTML5 Boilerplate structured project. Importantly, you need to test your version of OptiPNG. If it’s less than 0.7.0 and you can’t upgrade for some reason* you need to uncomment line 189 in your project.properties. If it’s above, just run ant and holler if your images aren’t getting optimized.

This is the issue to track issues with the new flow.

If this works, I can close like 6 bugs and release the patch** version. Which is the bee’s knees.

* This is some Mac thing. I’ve never quite understood why people just can’t upgrade their tools, but apparently something about the Mac stops you from being able to update a stupid little utility.
** I’m wondering if this should be a minor version since there’s a lot of “private” code rewritten to change the image optimization flow. 1.1.0? Maybe.

Posted in Performance | Tagged , , | 1 Comment

Easy Autocomplete with the datalist Element, the list Attribute and AngularJS’s ng-repeat Directive

Continuing to write about some Angular features I’ve been working with recently, I thought it would be interesting to show off one of the little conveniences I was able to put together using just a couple of Angular’s core features. This example leverages basically two basic features of Angular and two HTML5 features to create an easy, live autocomplete widget.

The pieces we’re going to use are:

  • Angular models This demo shows how easy it is to use Angular’s models. While they can get more complicated, this example shows the base case of simply binding to a variable in scope, creating dynamic links that update the UI when the data is updated with minimal or no JavaScript interaction.
  • ng-repeat Obviously if you’ve worked with Angular for any length of time you’ll be familiar with this directive. Here, it’s used here to iterate over a collection and create a dynamic datalist element.
  • datalist and list The datalist element and the list attribute are the two new HTML features that bind up the autocomplete functionality. In short, the datalist element defines a list of autocomplete entries. The list attribute binds the datalist to an input using an id reference. This combination is available in Chrome, Opera and Firefox with buggy support in IE10+

Let’s see how it all goes together.

First up, since this is Angular, let’s look at the markup.

To get started you need to define an Angular controller. This one is named MainCtrl. Since this is just a simplified demo to illustrate the autocomplete widget, it doesn’t do much, but the code it’s pulled from is a form used to add information about individual comic books to a simple database. Many of those comics are from the same titles (Amazing Spider-Man, Action Comics, etc.) so it’s handy to have an autocmplete list in order to improve data entry efficiency.

The input itself has two pieces to note, the data-ng-model attribute and the list attribute.

Note: As always, I append data- to Angular attributes in order to follow the HTML spec’s directions on custom attributes. That’s just me. You might want to let it all hang out. Fair play.

The data-ng-model attribute defines the model for the input as the title property of variable named item bound to the controller’s scope. Interestingly, this variable doesn’t exist at run-time. Instead of erroring with a warning about item being undefined Angular handles the creation of it once the form is submitted. This is a great example of how casual Angular is with their models. There’s no ceremony here. Add the data-ng-model attribute and the binding is done for you. If the variable exists in scope, the input is bound to it. If it doesn’t exist, Angular creates it. That’s pretty sweet.

The list attribute references the datalist element that the input should look for in order to build value hints. The value of the attribute is the id of the datalist you want to use.

The button at the end of the form is the next interesting piece of markup. On that input we’re using data-ng-click in order to bind the addItem function to click events on the form. Angular will look for addItem in the global namespace and in the controller’s scope. As you’ll see in the JavaScript example, we’re safely binding the method to the controller’s scope. If you click this button after adding a new title the title will be immediately added to the autocomplete list.

Finally, there’s the datalist element which uses data-ng-repeat to build out the list of autocomplete options. This directive is bound to the titles property of the controller scope. Since Angular models are bidirectional, once you update $scope.titles this list will be updated with new values. Pretty sweet. As you can see, this datalist element has the id we referenced earlier in the list attribute of the input.

<body data-ng-controller="MainCtrl">
        <input type="text" data-ng-model="item.title" list="comicstitle">
        <input type="Button" value="Add" data-ng-click="addItem(item)">
  <datalist id="comicstitle">
    <option  data-ng-repeat="ttl in titles" value="{{ttl}}">

Now that you’ve seen the markup, let’s look at the JavaScript that binds it all together. It’s actually pretty simple. Most of the wiring is done in the markup so the JavaScript is pretty sparse. That said, there are some interesting things so let’s look at it in-depth.

For starters we’re defining the starter list of titles as a variable on the controller’s scope. It’s a simple array bound to $scope.titles.

Have I mentioned that data binding is one of my favorite things about Angular? There’s absolutely no ceremony with creating a model. It’s just a variable on the controller’s scope (or even the global scope if you’re super lazy.)

After the model, the only other thing on the controller is a function called addItem.

This function is the method referenced in the data-ng-click attribute in the markup. It does a couple of things. The first is that is pushes the new value to $scope.titles. This example uses lodash’s contains function to test whether or not the title already exists in the array before it’s added. That keeps the list unique.

The next bit is another neat illustration of Angular models. Since the item we created when we added a title, setting it the object to an empty object is a shortcut to clearing the values out of the form. In this case there’s just the one form element, but if there were fifty or five hundred form elements with their data-ng-model attributes bound to properties of item this single line would clear all the values out of every bound form element.

app.controller( 'MainCtrl' , function( $scope ) {
  $scope.titles = [ "Action Comics" , "Detective Comics" , "Superman" , "Fantastic Four" , "Amazing Spider-Man" ];
  $scope.addItem = function( item ) {
    if ( !_.contains( $scope.titles , item.title ) ){
      $scope.titles.push( item.title );
    $scope.item = {};

Check it out, in action, with this plunker.

And there you have it. Let me know if you have any questions, comments or corrections in the comments. I’ve got at least one more Angular

Posted in JavaScript | Tagged , , , | 6 Comments

Sorting by Multiple Fields with Different Sort Orders Using the AngularJS orderby Filter

I’m working on a new, interactive, interface to the $100,000 Club dataset I keep on itsalljustcomics.com. The data deals with the world’s most valuable comic books (those worth more than $100,000) and it’s always just been a static list. Since I’ve started keeping track of that data, the number of entries has steadily grown to include hundreds of books. Because of that growth and in concert with the relaunch of that site, I’ve started to put together an AngularJS based interface to the data. One of the things I need to do is sort the displayed data by three different fields and with two different sorts. This is very easy to do in Angular, you just might not know it since the documentation for orderBy is crummy. The one example that’s there is more confusing than it needs to be and only shows one variation.

Here’s how you do it.


For starters, this example uses the ng-repeat directive. ng-repeat makes it trivial to loop through a collection and apply an HTML template to every member of the collection. In this example items is a collection of JavaScript objects stored in an array on the controller’s scope.

app.controller('MainCtrl', function($scope) {
  $scope.items = [{
    "title":"Action Comics",
    "publisher":"DC Comics",
    "general_commentary":"Best Existing",

Every time through the loop the value of that particular item in the array is exposed to the template as it and any properties of that object are available using familiar dot notation. Those values are included in the template using a familiar bracket pattern and Angular recognizes them, interpolating the values into the page.

<tr data-ng-repeat="it in items">

You’ll notice I don’t just throw ng-repeat in there. While ng-repeat will work as an attribute, I prepend data- to the attribute name. While this doesn’t matter to Angular, it’s the way the HTML specification defines adding custom attributes, so I use that pattern for consistency across all my code.

This initial version would output something like the following:



While the previous example works fine, the rows are simply presented in the order of the members of the array. That might be okay for you if you’re getting a presorted collection, but if you want to change the order, you have the power to adjust it using Angular’s orderBy filter.

In this example we want to sort by the title of the comic (ascending, from A to Z), then by the issue number (ascending, from 1-∞) and finally by the grade (descending, from 10.0 to 0.5.) While this is dead easy to do using Angular, it’s not clearly documented.

This is where the superheroics happen. Inside the ng-repeat you invoke the orderBy filter on your data. This is done with the pipe “|” character. This will be a familiar pattern for you if you’ve hacked around on the Unix command line. Everything on the left of the pipe is passed to the filter referenced on the right of the pipe. In this case we’re using orderBy but it could be any of the built-in filters or a custom filter of your own devising. Commonly, orderBy is shown accepting a single variable (technically an Angular expression) representing one of the available properties of the members of the collection. What’s not clear from the documentation or common examples is that is that it can also accept an array of properties with which to order the collection.1 So passing ['title','issue','-grade'] to orderBy tells Angular to sort first by the title, then by the issue and finally by the grade properties of the it object. Notice something interesting about the way grade is passed into orderBy? Yes, it’s that simple to reverse the sort in this syntax- simply negate the variable with “-” and the sort on that property will be reversed. Pretty sweet.

<tr data-ng-repeat="it in items | orderBy:['title','issue','-grade']">

Here’s a plunker with a working demo. This example is basically Exhibit A of what I like about Angular and what drives me crazy about it at the same time. I love the elegant, declarative syntax that really does feel like HTML rewritten for web apps. I’m giddy over how powerful some of the pieces are- like the directives and filters we’ve seen here. The out of the box stuff is great and custom filters and directives are just such a powerful option.

And then there’s the documentation. While the documentation is mostly correct, and they provide some form of documentation for pretty much everything in the library, none of the documentation is great. It often reads like it’s written by an Angular engineer who’s been tasked with writing documentation- technically correct, but often bare-bones and written from an insider’s or experts perspective. For an example of the latter see the usage of the word “predicate” in the documentation of orderBy. Quick show of hands- how many of you know what that means? Obviously some of you will, but many of the self-taught hackers that populate the web developer sphere won’t and the documentation suffers because it often errs on the side of the experts.2

1. It can also accept a more complicated Angular expression or a function reference.
2. They promise it’s going to get better, so I’ll keep my fingers crossed, but I’ve been tempted to start an unofficial AngularJS documentation project on Github to do an end-around the 808 issues and counting in their issue queue (many of which are documentation PRs).

Posted in JavaScript | Tagged | 6 Comments

Front End Engineering Spectrum Poll Results

The results of my poll are in. Thanks to everyone who filled it out and shared it. It’s much appreciated and it gave me some insight into where we are in terms of roles, organizations size and maturity and, probably most interestingly to me, what we’re called on out business cards.

Let’s look at the results.

Describe Your Current Role

The Hybrid 25 11%
Soup to Nuts 37 17%
Full Stack 53 24%
Markup Master 2 1%
Front End Developer 107 48%

As defined here.

Obviously, this isn’t a scientific poll1 and based on my audience there are going to be some biases in the makeup of this sample.

That said, it’s heartening to see so many of you focused on core front end technologies.

Also, I’m surprised that there were so few Markup Masters out there. I’ve interviewed a few of them over the past couple of years. I guess they’ve all been nudged over to being Hybrids or Front End Developers.

I feel for all you Soup to Nuts people. Here’s hoping you aren’t spread too thin.

What is Your Current Job title

CTO 3 1.4%
Developer 12 5.6%
Director 5 2.3%
Front End Developer 31 14.4%
Front End Engineer 11 5.1%
Front End Web Developer 5 2.3%
Interface Developer 4 1.9%
PHP Developer 3 1.4%
Software Developer 11 5.1%
Software Engineer 19 8.8%
UI Developer 7 7%
Web Developer 35 16.2%
Other 70 32.4%

I was surprised by the prevalence of “Front End Web Developer.” It makes sense, sure, but I was still surprised by the specificity of “web” being inserted in there.

The CTOs were all in smaller organizations (less than 50). It’s still nice to see people with the job title in this space, but I yearn for the day for a CTO who’s truly one of us at a big-time organization.

On that note, two of the Directors were from larger organizations (101-1000 and over 10000) so there’s light at the end of the tunnel. Let’s promote those guys.

Also, there was one VP :).

If you’re looking to standardize on something for your job titles, you should start with Developer as the foundation. It’s clearly the most common noun for what we do. I will say I was susprised to see the generic Web Developer title win out over something like Front End Developer. Not super surprised- plain old surprised.

Random notes from the Job Titles

There was only one Ninja2. To make up for it, there was a Kahuna.

There were only two people with JavaScript in their title. More people had PHP in their title than JavaScript. I don’t know what that means.

I was surprised to see only two people had Mobile in their title.

There were two Webmasters. Party like it’s 1999.

While cleaning up the data to do generic comparisons3 I learned that “Front-end” vs. “Front End” was a thing. I write Front End, but a lot of people hyphenate it. I don’t judge.

There was not one “Creative Technologist,” but we did have a “Computer Scientist.” That’s one in the win column. I’ve never liked the phrase Creative Technology. I don’t know where it came from or what it really means, so I’m pleased that it didn’t show up.

There were no Managers or Senior Managers. I’m mad at all the senior Sapient people I know who didn’t fill this out.4

How Old is Your Front End Engineering Team?

Less than 1 57 24%
1-3 96 40%
4-7 45 19%
More than 7 40 17%

I knew the results for this one were going to stink. I chose 7 years because that was just about when Ajax was everywhere and forward looking companies would have had at least a chance of putting a focused team together. Unfortunately, not many of them did.

The teams in the poll were much younger, with the majority being less than 3 years old5. Knowing from firsthand experience what it looks like with a mature team and what it looks like with an immature team I can say, without hesitation having some maturity in your overall team is a godsend. It allows you create world class solutions and creates a professional, supportive structure for front end engineers. It also allows them to operate at a very high level even when key members leave. People are automatically groomed to step up.

Having to build up those structures can take a while, so organizations with more experience are going to have a real advantage.

Organizations with more maturity are also more appealing to work for because there’s a track record you can point to in the recruiting process. A lot of people say things like “this is what we want to do” when trying to hire talent in this space. Speaking from experience, there’s a big difference between aspirational talk and talk based on real-world results. A group that has already proven it’s worth is a much easier place to be than one where the value top front end engineering is still an iffy proposition. Building everything from scratch can be fun, but it’s not automatically so.

How Large is Your Front End Engineering Team?

0 (You Don’t Specialize) 33 14%
1 35 15%
2-5 110 46%
6-10 23 10%
11-25 18 8%
26-100 7 3%
100 or more 12 5%

I don’t know that there’s much to gain from this chart other than my concern with the prevalence of people who don’t specialize. What we do is hard to do at a high level right now and pawning it off on someone who’s also doing Java or design or… whatever doesn’t seem like the best idea to me. I know there are exceptions and I’ll have to analyze the data a little bit more to see if these are all shops, but it still concerns me.

I’m going to play around with this data versus the size of the organization to see if there’s something that shakes out there. Obviously a five person team in a ten person organization is more interesting to me and a five person team in an organization with more than ten thousand employees.

That’s what I’ve got. If you’d like, you can look at the full results. Feel free to share anything you notice in the comments.

I’m also going to follow up with an opinion piece that’s been brewing for a while. The results of this poll solidify the thought behind it, so the time to write it is now. Check back for that in maybe a week or two.

  1. as I am not a scientist, although I do like this Guided by Voices song 

  2. an HTML5 Ninja even 

  3. comparing titles without “Senior”, “Junior” or “Principal”, etc 

  4. I’m taking my ball and going home now 

  5. Which coincides nicely with the HTML5 era 

Posted in Web | Tagged , , | Leave a comment

I’m Presenting on Data Visualization at the Boston Front End Developers Meetup May 22

Since Pascal already sent out the email, you heard it here second. I’m doing my Data Visualization presentation at the Boston Front End Developers on May 22nd. As of this writing (on a Sunday morning) almost 80 spots are filled. At this pace they won’t stay open for long so sign up and watch me enthuse about SVG, Canvas and a special surprise guest technology.

Hope to see you there (and then at Trade afterwards.)

Posted in Web | Tagged , , | Leave a comment

Please Fill Out My Front End Engineering Roles Poll

As you may know, I’ve spent some time thinking about front end engineering at a higher level than just the code that we write and the technologies that we use. I’ve written about what we do both in terms of the flavors of front end developers that exist and in terms of the roles that we slot into at work.

The two posts on the subject are:

The Front End Engineering Spectrum- The Three Generic Types of Front End Engineers
The Front End Engineering Spectrum: The Roles

Check them out, I think they’re pretty cool.

These posts have resurfaced a couple of times recently and in reviewing them I thought it would be interesting to see where people’s experience plots against those roles.

To that end, I made a quick poll.

If you’re the “front end” guy or gal at your job, please fill it out. It will only take a minute

Check back here May 20th when I’ll share the results. The poll will close next Thursday, May 16th at 11:59 Eastern time.

Fill it out below, or if the form isn’t loading, at this link.

Also, please share it far and wide!

Posted in Web | Tagged | 1 Comment

Windows Apps for Web and Front End Developers

Spurred on by this post by Rey Bango, I thought I’d share some of the tools I’m using myself when working on Windows. Rey’s post is great, but since Window-based developers are under-served by the community (even though there are a lot of us) I figured it couldn’t hurt to add my own options. These are almost all in addition to the tools Rey mentions as I use a lot of the same tools in his post.

Visual Studio 2012

As I mentioned, I’m going to try to avoid a lot of repetition of Rey’s options in this post (which is why you won’t see Sublime Text mentioned, even though it’s #3 in my code editor triumvirate.) Still, I feel like I have to add in my two cents on VS2012. One of the weird things about the web developer community is that, as a whole, we recognize that the tools we have aren’t as good as they should be. Some of this stuff is hard to do right or do efficiently and doing both is often the domain of the real experts. Then, in the very next breath, some folks will pile onto Microsoft and Adobe with as much vitriol as they can manage. The thing is, and this is something you pick up pretty quickly when you start to work with XAML, Silverlight and Flex refugees on the open web stack, Adobe and Microsoft created pretty sweet tools and APIs. People could get their jobs done. No, they weren’t perfect but their developers felt empowered. It’s surprising that they stick around at all, after they see what our ragtag band has to offer.

VS2012 is one of those tools. Yes, it costs money. Yes, it only runs on Windows. Yes, it’s a multi-GB install. No, it has no street cred. All that said, even out of the box it’s a powerful editor for web tech and, if you take the time to configure it properly it’s ridiculous.

I’ve been using this more and more recently.

Adobe Dreamweaver

This isn’t necessarily a Windows-only thing, of course. But still, it’s worth pointing out as Dreamweaver gets a bad rap.

Yes, it’s a WYSIWYG editor that people have made awful things with for 15 years and people disparage “Dreamweaver developers” as people who don’t know how to hand-code anything.

The thing is, while it can be those things, it’s also pretty great. From the beginning (FWIW, the first version I used, 1.2, came out in 1998), Dreamweaver has embraced and understood JavaScript in ways that other editors only started to recently. Dreamweaver extensions are written in JS so JavaScript isn’t some add-on, it’s core to the product. It’s also the heir of HomeSite, the great web-centric text editor that was my bread and butter for nearly the entire 2000s.

While it’s still got WYSIWYG features aplenty, it’s a fine, configurable editor with great code hinting, excellent site management tools and plenty of opportunities for automation. Mixed with Adobe Fireworks, you can smoothly move between graphics files and your web editor for even more webtastic power. My go-to editor at home where I’m running CS6.

I love being able to open an HTML document and having the full context of the attached files available when I’m editing. You always remain in the context of the HTML page, even when you’re switching back and forth between the attached JavaScript and CSS files.


My utility text editor. If I need to open and manipulate a big text file on Windows I do it with TextPad.


A great editor for Markdown files. Buy the $15 license and get support for Github flavored markdown right on your Windows desktop.


I run CS6 at home. Having a big monitor, mouse, scanner, etc. make for a better experience with my CS6 Creative Cloud subscription. That said, I have a Lenovo Yoga that I spend a lot of time on and having Paint.net on it for basic image manipulation. It’s a great image editing app. It’s not a Photoshop replacement but for an image editing utility it can’t be beat.

Minimalist GNU for Windows/Minimal SYStem

If you’ve installed Git for Windows, you’ll know these projects as “Git Bash.” While I’m a fan of Powershell and pin it to my taskbar, I’m glad to have this scaled down Bash prompt available to me as well. It’s surprisingly robust.


I’ve just started using this tool as a replacement for FileZilla and like it. The difference maker for me is that the local window is just an Explorer window, which means that all the customization I have on the Explorer context menu are available right in the WinSCP interface. When you’re trying to put out a fire, it’s a big deal to be able to fall back on consistent patterns (right click> open in Sublime Text, for example)


I don’t get bent out of shape with conflicts because I’ve got WinMerge. It’s just good software.


While I’m as happy to spin up a node server to test locally as the next guy, double clicking a file to start up a quick web server is super convenient. No command line needed. Drop mongoose.exe in a folder, double click and you’re good to go. Pretty sweet little app.

7 Zip

The Swiss Army knife for compressed files.

Java, Ruby, Perl, Python, and Node installed and on my path

Many doors open up if you’ve got common programming languages installed and on your path. I’ve obviously made good use of Java over the years, but I commonly use Node, Python, and even Ruby tools.


While much of the work I do with Amazon S3 and Cloudfront is automated, occasionally you need to get up there and poke around. S3Fox adds an FTP style interface for AWS right into a Firefox tab.

Those are my additions to the Windows web dev canon. What else is out there? What are we missing?

Posted in Web | Tagged , , , | 1 Comment