Chris Burnor

Professional Nerd
Powered by Obtvse

Terminals: A Rant

First let me start off by saying that I absolutely love my terminal. I spend literally all day with a terminal window open, and it's usually in the foreground. Honestly, if it weren't for the fact that most of my work is implemented in the browser (and that the best developers are the first to Google), I could probably ditch the GUI entirely.

However, it is because of this love that I would like to rant for a moment on the state of the modern terminal and provide some suggestions for how terminal emulators might be brought into the 21st century. I particularly want to focus on features that would make terminal emulators better for experts. Most 'features' on terminals seem to be for making it easier for newbies to get started with the terminal, rather than to make the terminal better once they've mastered it.

I would like to see more than 256 color support in the terminal. This one is a no brainer.

Terminals should have better integration with the system clipboard. Why is selecting text so difficult. I should be able to use the system clipboard, not just for inputting and selecting text, but be able to pipe and modify that text.

Terminals should integrate better with the system content types. Apple has done some good work here with the open command. Linux should take some inspiration here.

I realize there are some tools out there that do some of this, but these seem to be features that should really be part of the terminal itself, not some half-baked weekend side project that never gets updated.

Better than a phone: Thoughts on Facebook Graph Search

Facebook Graph Search came out on Tuesday and while the jury is still out on whether it will be a good thing for consumers, I think that broadly speaking it will definitely be a good thing for Facebook. There was a lot of speculation that it was going to be a Facebook phone, which, frankly, I think would have been stupid. Phones are already social and Facebook gains more from being a platform that is accessible anywhere than it does from going outside of its core strengths into a highly competitive field that no one really wants them to be in anyways.

Why do I think this is a good thing for Facebook?

First, (and this is sort of beside the point, but it's been a personal pet peeve of mine) Facebook's search has already sort of sucked. I tried to search for my co-founder Chris McCann on there when I first met him and was greeted with a list of hundreds of Chris McCann's -- all not him. Honestly, LinkedIn's search is much better for trying to find that person that you knew from that thing a while ago because it ranks your search results by how closely connected you are. I'm not sure at all how Facebook ranks searches.

Second, Facebook now has it's foot in the door to start capturing not just the passive interest data that it has been, but also intentional data. One reason that Google is still the dominant advertising platform on the web is because they capture data about what you want when you want it. I wanted an ethical ring for proposing to my girlfriend. I googled it and the top result (an ad) was for a local company that does ethical diamonds. Boom. Ad money. Facebook can now get their foot in there. I'm sure the first version will be pretty rough, but Facebook is genius at guiding users behaviors. More than any company I know, they are masters at saying to the users, "You shall use the service this way" and the users will do so. If they can replicate this with search, they will be doing quite well.

Third, there is a lot more to a search engine than a search box and a list of results. Fundamentally, a search engine represents an intelligent match between intent and information. Google doesn't just give you really good search result and then just slap an ad on the results page. They use the exact same technology to give you great search results as they do to give you great ads. If Facebook has a search engine to search it's social landscape, then they also have a technology to deliver finally relevant ads to users. This is something they've sorely failed at so far in my opinion. From my likes and posts, it should be pretty clear that I lean to the poltical left and yet during this most recent election, I kept seeing only ads for 'Take back the Whitehouse' and 'Stop Obama'. I hope they are in a position to do better.

Whether this will be good for users is an entirely different story. I'm sure many people be annoyed by it, and I'm sure there will be a lawsuit at some point over something that was found that was not wanted to be found. However, I'm not sure how we should even gauge utility when it comes to users and Facebook. It's an odd servie in that everyone is addicted to it, but no one seems to actually like it. Everyone I know from my little sister in high school to my parents, feels that they spend too much time there. I'll have to think more about how to answer that question, if that's even possible.

Thoughts on thinking about the End of the World

Like many others this week, my Facebook and Twitter feeds have been full of 'end of the world' posts and my social aggregation sites have been full of doomsday sales and promotions. Also, like so many, I have responded to such discussion with a roll of the eyes. Clearly the world is not going to end based on some prophecy or misunderstanding of an ancient calendar. Why waste our mental energies on such nonsense.

I wonder, though, if there is more going on here than simply widespread superstition. I know my friends and circles and though there is a wide distribution of intellectual abilities and social and political persuasions, I think I can accurately say that none of them actually believes that there is any chance of a civilization-ending event this week or this year.

There is very little room in contemporary society for us to express our existential fears. Yes, depending on our political persuasion, we may worry about global warming, or nuclear arms, or terrorism or the collapse of traditional American values, but we tend to see those more as problems that require solving rather than a true out-of-control doomsday scenario.

Nevertheless, as we struggle through live in the shadow of our own transience, we also realize that our world is similarly transient. Through some means, it will not last forever and some subset of our progeny will have to deal with that end.

We do not like to ponder such fears, but they haunt us and sometimes an ancient portent of doom allows us the freedom to obliquely grapple with them.

What's the Deal with .*rc Files?

Modern POSIX operating systems are littered with .rc and rc. files. Apparently these stand for 'run commands' and the term actually dates all the way back to 1965 on the MIT CTSS system (the precursor to Multics which was the precursor to Unix).

I love the overwhelming weight of history that you find in a *nix system.

Upside vs. Downside Risk

Risk is usually discussed in one dimensional terms, as though it is a scalar that simply has a value in a particular situation. Sky diving is risky. Leaving the root MySQL account without a password is risky. Starting a company is risky. I think this is a mis-modeling of how risk works.

What is risk? Fundamentally, it is simply a probability -- the chance that a particular outcome will manifest itself in a given situation. However, it passes a value judgment too. We don't talk about the risk of winning a particular hand in poker or the risk of being blue-eyed vs brown-eyed. Risk is therefore the probability of a negative or undesirable outcome.

This is where the aforementioned 'risky' concept comes in. However, we need to be smarter about how we define that undesirable outcome. Our minds are attuned to very strongly weigh bad things that could happen to us. We generally are much worse at thinking about missing out on good things that could happen to us.

I get asked a lot by friends and family if I think it risky working for a start-up rather than a big company. This is focusing on the 'bad thing that could happen' scenario. I call this downside risk.. It misses the upside risk that comes from working at a big company and missing the opportunities of a start-up. As an engineer, I think that I have much higher upside risk than downside risk. There will always be jobs and demand for engineering, but the specific jobs that I choose to work on are the difference between a decent salary and an awesome payout.

We need to think more about risk in this way. Don't just think about what could go wrong, but what you might be passing up by avoiding that negative outcome.

Success is 80% Not Screwing Up

There was a poster in the the hallway of my middle school that said 'Shoot for the Moon: Even if you miss, you'll land among the stars.'

I always hated that poster.

My cynical eighth grade self, thought "It should read: 'Shoot for the Moon: If you miss, you'll slowly suffocate to death in the cold loneliness of space.' " Cynicism aside, it seemed patently false. Success wasn't about shooting for the moon, but doing your homework, studying for tests and not being a dick to your friends.

As I've gotten older, I think I understand the idea behind the poster a lot better. Those without high ambitions fail to achieve high results. However, I think that my adolescent objections still stand. While it's all very well and good to 'aim high,' it still matters quite a bit exactly what you are aiming at. For example, if you start a company, it may fail, but you will still have learned valuable skills and have new connections and street-cred. However, if you drop out of school to try and become, say, a pro baseball player, your chances of success are far lower and you are left with far fewer options if you do not succeed with your primary goal.

To put it in tersms of start-ups, it's hard to see which companies are going to be wildly successful, but, generally, it's much easier to see which are definitely not going to be. Over confidence, poor thinking of the market, over-reliance on magical 'technical' solutions, over-reliance on name-dropping connections are all bad signs. What is amazing is that if you hang around Silicon Valley or any other large tech community long enough, you start to see the exact same mistake being made over and over again.

This leads me to believe that most companies and people fail to succeed because they continue to make the simple fundamental mistakes. I think this is why we see people that 'create their own luck.' Once you've mastered the art of not screwing up, success is simply a matter of searching through that remaining 20% to see what sticks.

Users, Customers and Community

Jack Dorsey posted last week on reconsidering the use of the term 'user.' He proposes replacing it with the word 'customer' in the general sense, and 'buyer' and 'seller' in the specific Square context. While I agree in the general sense that the term 'user' is somewhat disparaging (though not as bad as some terms I've heard -- like 'muggle') , I think that replacing the term with 'customer' is a step backwards. It focuses too much attention on the actual money transaction part of the person's interaction with the product, which obscures all the more important characteristics of the person.

The problem with the term 'user' is that it's too simple. It pushes us into a model where we think of company, product and user. In reality, we have multi-tiered communities that interact with our products. At StartupDigest we had Curators, subscribers, VIPs to name just a few. At GroupTie we have members, organizers and groups. At bigger sites like Facebook and Google, they have advertisers, developers, members, users and so on. There are too many to name. It becomes very difficult very quickly to think or talk about them in general without resorting to a word like user. It becomes even more difficult because with these various roles comes an interplay between them. Doing something to improve the advertiser experience, may hurt the member experience. Making it easier to buy may hurt the seller.

I think the solution actually is to forget about trying to use an archetypal single individual as our model for thinking about how our product interacts with our community. In fact, that is the word that we should use: community. Companies have communities of people that interact with them. They have different use-cases and different interaction models and no one word will describe them. What we need to do is define our community, define the roles that exist within that community (including the role of the company) and then determine what is best for that community.

Los Techies

Has quickly become my favorite source of Backbone.js knowledge.

Space Colony Art from the 1970s

I remember seeing these pictures in a book in my local library and being absolutely enamored of them. The juxtaposition of New England-style countryside inside of gleaming, bright cylinders looked like the most wonderful world to my young eyes. I recently re-watched Stanley Kubrik's 2001: A Space Odyssey and was amazed how it, like this, despite how dated it is, still is my vision of 'the future'

App Specific Settings for Django

While Django encourages a healthy degree of decoupling in how apps and modules are structured, the settings file can very easily become a monolithic mess. There are some good resources for how to divide up settings file between environments, but with a big application, even that can leave you with a mess of configuration settings.

What is particularly annoying in this situation is that many of these settings really just affect one app. For example, I store JavaScript and CSS files specific to each app in app_dir/static/ and then use django-pipeline to wrap and compress all the files for deployment. However, Django Pipeline requires you to define Groups in your settings.py file. However, since those groups are specific to each app, it seems like they should live with the app, not in the settings file. Adding a css file shouldn't require me to change the settings.

At first I attempted to fix this by putting a settings.py file in each app's directory, but Django doesn't automatically import those files and attempting to do so manually in Django's own settings files lead to all sorts of messy import loops. However, I found a much simpler solution. Simply put the extra settings in the __init__.py file in the app root. This get's imported automatically when the app is installed and those settings will automatically be added to the general settings environment.