…on life, the universe, and everything

Twitter vs Facebook

The difference between Twitter and Facebook isn’t that Twitter is a better company, a better product, or that they treat their users better (they aren’t, it’s not, and they don’t). It’s that after reading twitter I feel (you know, ever-so-slightly) happier and more relaxed. And after using Facebook I miss old friends, and generally feel anxious and melancholy.

If that’s how it feels to “stay connected”, I’ll pass. Email, text, snapchat, and twitter are still good :)

Twitter requires you to curate who you follow, and that’s real work. I appreciate that. I’m also not the target of the bizarre pile-on attacks twitter is sometimes associated with. I’m sure that would ruin it for me. But, Facebook doesn’t have that problem (as far as I know) and it’s already baseline negative so… ¯\_(ツ)_/¯

Also, friends, if you publish anything anywhere (blog, soundcloud, university website, etc.) please — PLEASE — let me know how to subscribe for updates. I am seriously interested in the work you do!

It’s easy. Just write an email to me and say “Hey your blog post says to tell you that I am publishing my work at …”

Please do it!

Tyranny of the Majority

Many people, especially liberals, are concerned about the “tyranny of the majority” and spend much time thinking and discussing how we might make things better and more fair. Specifically, how to put a check on the power of the majority. A noble goal.

The problem: If you give minorities – say we aim to help transgender people – a check on the power of the majority, then what happens to that other famous minority, millionaires? It’s not like the millionaires have had a hard time advocating their interests up until now.

Compared with other minority groups, the millionaires are better organized. They have resources. They’re connected. You’d better believe they will take full advantage of any systems designed to empower the other minority groups, no matter how noble the intent. This isn’t theoretical; look no further than the electoral college and the tax code.

Of course, we can make targeted changes to benefit a specific minority each time there’s a need. Which does work — if you can make it happen. That plan relies on the majority though, to notice and accept the specific minority actually has a need. Which, historically, hasn’t been reliable.

I don’t have solutions, but I find this concerning.

What Makes a Good Game?

Fun is number one. Gaming is entertainment. Not a lifestyle, not a subculture.

Call me a filthy casual if you want. But do it quick, I heard Destiny raised their level cap again. Or can you skip the grinding with an in-app purchase now?

My other values largely follow from that.

Story Telling

Do it well or don’t do it at all. Script, voice-acting, and themes will be evaluated against the best from hollywood.

Yes, games require exponentially more content, and that is hard. But that’s not my problem. The story doesn’t care that the medium is expansive. It can be done, I’ve seen it done.

But, not all games need story. If the game is great fun without story, then toss it. Tacking on a crap story will only hurt the game.


Should match the player’s ability. Where possible it should dynamically adjust. Challenges should be achievable but, you know, challenging. If it’s too easy it’s boring, if it’s too hard it’s disenchanting.


If the grind is fun, then the grind is the game (and, I’d say, it’s unfair to call it grinding probably). If the grind is not fun, then it’s unforgivable.

For those who only care about the trajectory of the story, you should be able to continue through the game without grinding, but of course there has to be some reward for doing the grind. That’s a balance that must be achieved.

In Borderlands 2 you can grind for better gear and stats, but you can also just power through without worrying much about it on an easier difficulty setting. That design worked pretty well (along with many other complementary game elements).

Novelty, gimmicks

Novelty is worth something. I won’t dismiss a game because it has a gimmick. Novelty wears off though.


I appreciate the value of a deep universe and lore, but each game must stand alone. I not going to watch every Star Trek movie ever made before seeing this year’s blockbuster, and I won’t play all of a games predecessors before I start on it either. I just won’t.

If the game is great I may play the predecessors afterward. There may be spoilers in the sequels. I understand the risks.


Truly free games make me suspicious - I need to know why someone invested that much effort for no financial reward.

Free-to-play games should be free-to-win. Without a level playing field we’re really just playing a game of “who’s willing to spend the most money on a false sense of superiority?”

But, really, one way or another, I want to pay for games.

If you like games (check), and you want games to keep being made (check!), then the people who make games need a reward for their effort (e.g., to get paid).

It doesn’t matter if you, specifically, pay for games. Because guess what? The game makers who get rewarded will be the ones who make games for the people who pay.

The more you (and people like you) spend on games, the more developers are going to make games for people like you.

That also applies to in-app purchases. Every dollar you spend in Farmville is a vote for more games like Farmville (whether that’s good is up to you!)

Execution beats ideas

Really. Execution above all else. This is not exclusive to games, but it’s just as true for games as for all other products.

A good idea badly executed is still a bad game. A bad idea executed terrifically can sometimes reveal the idea to be quite good. Some ideas really are bad. You need both.

Maintainable CSS (or CSS the good parts)

CSS is kind of terrible. Everything affects everything. It’s impossible to refactor. Code is spaghetti from day one. And selectors are used to identify elements in scripts as well as applying styles, not to mention the semantic meaning of html tags themselves.

So. Some proposals…

Element ID

Don’t use ID. Don’t use getElementByID(). Don’t use element IDs in your CSS selectors. Just don’t. ID has no benefit over classes for use in CSS or JavaScript.

There is virtually no case where you can be 100% certain that a style will only ever need to be used on one element in the whole page. Even if you were certain, a class would work just as well!

There is only one acceptable use for id: to enable deep-links to specific elements (with the scroll behavior that entails).

Tag selectors

Don’t use tag selectors in javascript. In CSS only use them to provide the most basic reset and baseline styles. Never mix tag selectors with class selectors.

One class selectors

No nesting. If you need more behaviors on an element, add another class. If you need only some of the behaviors of a parent class and you want to override others, your parent class is probably doing too much. Try giving it less responsibility, or if you really can’t – no way, no how – just define a new class.

Really consider giving the parent class less responsibilities though. If you have to think about the order of the rules in a style block, there are probably too many.


.my-class {  }

Not great (but sometimes necessary):

.my-container .my-class {  }

Bad (just create a third class):

.my-class.other-class {  }

Very Bad (fully engaged in the precedence war):

.container .sub-element a.special-link.active {  }

Use Naming conventions

You should be able to tell roughly what a class is for (and you’re only using classes right?) by the name. Establish – at a minimum – a convention for classes that control layout, text styles, and javascript hooks.

JavaScript should not use the same classes as css.

That would be mixing presentation with logic.

Use rem (root em) units

em units are kind of crap because if they are nested they compound. Still, it’s great to set the font-size on the body and have everything work from there. And, rems are well supported (IE 9+).

Use lots of CSS files

You should have one main css file which uses @import to bring in everything else it needs. Break up your css so that each logical unit is in it’s own file. Got a custom dropdown widget? super-dropdown.css. What about persistent navigation at the top of each page? header-navbar.css. Login form? login-form.css.

If you have less than 5 CSS files you’re probably doing it wrong. If you have exactly one CSS file you almost definitely are.

ok, ok, ok. I know what you’re thinking: “James, I’ve been doing lots of these ‘wrong’ things and it’s been working fine for me.”

You see, it seems that way at first. IDs, specific selectors, using a class for styles and javascript. These things seem useful and “clean”. Why use two classes when one will do? Because you will not be able to refactor your code. That’s why. And if you let it go on long enough you won’t even be able to change your code without a full round of manual testing.

Most CSS code being written today is technical debt from the moment it’s created. And it’s the worst kind of technical debt: the kind you don’t know you have.

A Path to Fluency

Learning a language is a Good Idea. It makes you smarter, more creative, and empathetic, and more likely to recover from a stroke. Thinking it’s good idea doesn’t make it easy. The payoff is too far off, too abstract.

Recently though, I’ve been making some headway after giving up lots of times in the past. Some observations:

Learning a language because it’ll be “useful” probably won’t work out.
If you haven’t encountered any Chinese in the last 20 years, odds are you won’t in the next 20 years either. Any language is worth knowing, but, like exercise, most people run out of motivation before reaching their goals.

My advice? Pick one you have a personal reason for. I have Spanish-speaking family (including my wife), Mexico is right next door, and there’s Spanish language TV here in New York.

Duolingo is amazing.
If you’re not using Duolingo, you’re missing out.

Entertainment: You can trick yourself into learning.
Spanish tech news on twitter and RSS make it easier to practice every day without it feeling like work. I also picked up some translated graphic novels. Comics, graphic novels, and manga make it much easier to get the gist of the story without struggling too much. There are also “side-by-side” readers which have the same text in two langauges – English on the left, Spanish on the right.

Be careful of things that are too difficult for you. Feeling like you’re in over your head makes it hard to stay focused and it’s demoralizing.

TV and Movies are a siren song.
At least early on; I’m still not able to keep up. They seem like a great way to practice, but the pace is too fast and there are a lot of idioms.

Traditional methods don’t work (for me).
Stuff like Rosetta Stone, “Learn Spanish” books, podcasts, etc bore me to death. Motivation is as important as the information and exercises. You definitely won’t learn the language if you quit. And “I’ll know Spanish if I do this hard-ass work,” is not enough on it’s own.

Honestly, I don’t know how anyone learns language that way. ¯_(ツ)_/¯

Visiting Mexico was a huge motivator.
Really. Nothing makes me want grind through Spanish lessons like being surrounded by native speakers.

You can fly to Cancun for just over $150 each way on Jet Blue:

JFK to CUN for $315

…and rent a lovely place in Puerto Morelos for $220/mo (4000 pesos):

Puerto Morelos Apartment for $220/mo

note: I haven’t done that, I just took that photo of the apartment listing when I was in Cancun a few years ago.

That’s all I’ve got for now. Wish me luck!