Hello, Livestream!

This post is a little late, but a week and a half ago I began my fulltime post-grad employment at Livestream! I work as a frontend developer, working mostly with Rails templates, CSS and JavaScript.

It's a really fun job. I feel incredibly lucky to be able to build a career based on a true passion of mine.

Gmail And Mental Models

Every time I'm replying to an email in Gmail's web interface, I always make the same mistake: I click the button on the left.

Why is that a mistake? Well, let's take a look at the other buttons. (Gmail has convenient tooltips to let you know what each button does).

Seems pretty straightforward, right? Each button does something to the email. I want to reply, so—keeping in mind what those buttons have in common—click the button that looks like "reply".

Uh oh.

There's a specific term for what Gmail is doing wrong here: it's breaking the user's mental model.

When using an interface, a user constructs their own internal explanation of how the system works. They keep a list in their mind of what actions they can perform, how to perform them and what the consequences will be. That internal explanation is called a mental model. (Wikipedia has a much more comprehensive explanation).

Consider your mental model when driving a car. You expect that when turning the steering wheel clockwise ("right") the car will turn right, whereas when you turn it counterclockwise ("left") the car will turn left. Now consider what might happen if you were driving and the car broke your mental model. You turn the wheel counterclockwise, but the car turns right! At best, you'd be surprised; at worst, grievously injured (or dead).

The consequence of Gmail's misplaced button is less deadly, but the issue is the same. Even more interesting is that being aware of the discrepancy between my mental model and the actual interface does little to mitigate the problem. Even though I know that that button specifically will bring me back to my inbox, my broad categorization of those buttons as "buttons that do things to the message" wins out nine times out of ten. (The tooltip does nothing to help, since I've almost always clicked the button before I have time to read it).

Fortunately, this is a relatively simple user interface problem. I've filed a bug with Google, so with any luck it will strike a chord and the issue will be fixed.

In Which I Discover Greyhound's Lack Of Respect For Its Customers

I ride buses a lot. One of the more modern conveniences on buses is onboard Wi-Fi, which can be sluggish if a lot of people are using it but generally makes the trip much more enjoyable. Today, however, on a Greyhound from Philadelphia to New York, I was greeted by an unpleasant surprise.

Greyhound's annoying ad frame.

A big honkin' ad for Greyhound that was definitely not served by Wikipedia, and a nice reminder of how little Greyhound respects me as a customer. This happened on almost every page I visited.

How does this benefit anybody? It certainly doesn't help me—I already know what bus I'm on—but I can't imagine it benefits Greyhound, either. One of the slides on the ad has a little shout-out to 7/11, but is the money they get from that and whatever extra ticket sales they make really worth the goodwill they're burning by doing this?

A quick peek in the page's source reveals the offender is a snippet of JavaScript injected at the top of the page. The script is by iComera—the same company which provides the onboard W-Fi in the first place. "The large print giveth and the small print taketh away", as they say.

Unfortunately for Greyhound, not only will I be actively avoiding their buses in the future, but I happen to know a thing or two about computers. With a little inspiration from Daring Fireball, I've blocked their annoying webpage-framing script. I'm not aware of any browser extensions that will make the process easy, but if you feel comfortable editing system files then you'll be okay.

The fix lies in your hosts file. (Wikipedia has a good list of where to find it on various operating systems.) Open up the file, then add the following line at the bottom: proxy.moovbox.icomera.com

Bam! You may have to restart your browser, but the ad frame will be gone, system-wide, for all iComera Wi-Fi networks. (I've actually created a "Don't Be Evil" section at the bottom of my hosts file specifically for blocking annoying things like this.)

And of course, if you travel or expect to travel on Greyhound, you should pester them on Twitter so that maybe they'll stop this altogether.


At the urging of a certain judgment-casting developer friend, I've signed up for GitHub and created my first repository: skedaddle. Per the description, it's a very (and I mean very) bare bones MVC framework written in PHP.

The framework was originally written for my senior project at Drexel. My group looked at a couple different frameworks, such as CodeIgniter, but to save the time of learning a framework we'd never used before (and because it's supposed to be a learning experience) I set out to write my own. The project served as a testing ground for the framework, and every week I found a tweak or two that would make it just a little bit better.

A general rule of mine is, treat every project as if you were going to productize it. It forces you to keep your code clean and avoid hacks. Even though I had no plans to do anything with the framework beyond simply using it as the foundation for my senior project, it was written as if it were its own product, so it was fairly easy to extract for standalone use.

Right now, all the framework does is allow you to define routes (using regular expressions) that map to model, view and controller files. GET requests run the model and display the view, while POST requests run the model and controller. I'm trying to keep the base framework as minimal as possible, but there are a couple more features planned, such as making GET data available as an associative array, and the ability to include third-party modules.

Coming in at 82 lines of PHP, the skedaddle framework is available on GitHub. Check it out, give it a try, or even fork it! Questions and suggestions may be directed to @jlazaroff (me!) on Twitter.

Hello, Weblog

And welcome, dear reader! Plans for tonight include beginning this weblog with an entirely stereotypical opening paragraph: if you are reading this, you are either a friend, close acquaintance or Twitter follower whose interest was mildly piqued by my prodding to read this collection of my thoughts; or, it is years in the future, and you've heard about the cocaine-filled, stripper-laden parties I regularly attend with my fellow celebrity bloggers and decided to see just why the universe has decided I deserve several million dollars and my very own private jet.

Or, (hopefully) most likely, you're following along as I attempt to eke out a place for myself on the WWW.

This is probably my third or fourth or nineteenth attempt at creating a weblog that I update regularly, but I'm hoping it ends up being the final time due to my immense success and dedication. I finally feel like I have something to say; like I've found myself, clichéd as that may be. Also, on a technical level, I think I've become skilled enough that people might actually care about what I have to say about prototypal inheritance vs. classical inheritance and that sort of thing.

I've long had a checklist of things I wanted to accomplish with my own blog. Some are topical in nature, and some technical. On the content side, I'd like a place to talk in-depth about web design, development and general geekery, alongside less technical subjects like music and politics. The Loop has convinced me that it's possible to combine those audiences and be successful. Hopefully good writing will supersede the decidedly large rift in subject matter.

The technical goals are more specific. There are a lot of things wrong with publications on the web right now, and while I've long been vocal in speaking out against these practices, I never had a platform on which I could walk the walk, so to speak. This is that platform. I believe a website's obligation is first and foremost to its readers, and I've built this website to meet that obligation.

Look around and you'll notice no confusing URLs. No multi-page articles. No SEO. No sharing buttons or any other ridiculous social media features. Why?

Because it's all bullshit.

The sole purpose of multi-page articles is to make readers visit three separate pages instead of one so publications can collect additional ad revenue for each page. SEO is a scam run by people who make money by convincing publications that if they pay them, they can somehow outsmart Google's hundreds of highly paid engineers. And has anyone ever heard of anyone deciding to share something because there was a share button on the page rather than because they liked the content?

Of course not.

Brent Simmons has a more expansive list of these things over at his blog. I agree with every word of that post: publications that don't respect their readers do those things to try to squeeze every dollar they can out of them. They're disrespectful and wrong, and by not committing those crimes here my hope is that I can make the web a slightly better place, and maybe even inspire others to do the same.

And so there you go. The Jake Lazaroff's Weblog Manifesto. If you made it this far and liked what you read feel free to add me to your bookmarks, because there's more where this came from. If not, keep checking back. I just might surprise you.

Jake Lazaroff

Welcome! I'm a designer, developer and musician. During the day I work as a frontend developer at Livestream, and by night I work on secret projects. Stay tuned!

This is my personal blogging space. Expect musings on technology, art, music, politics, and life.