Archive for May, 2008

How to Describe Ourselves

Friday, May 30th, 2008

I was thinking this morning about how I describe CV. My usual phrase is “we’re an online shopping service”. In my mind, this is “shopping service” (i.e., like a personal shopper) + “online”. But that’s not how people interpret it (”oh, like Froogle?”), so I need something better.

Other obvious words fail, too. People hear “service” and think “web servers” — different kind of service. Or if I say “online personal shopping”, they hear “online” + “personal” = “it says ‘hullo Mike’ when I log in”. “Social” is similarly overloaded. So I’m looking for a better word/phrase.

The best I’ve got so far is “human”, as in “human shopping service”. The term “human-assisted search” does exist, and kind of describes the superset of the problem we’re solving. But it isn’t a common term, so it’s a description that encourages questions.

Nearer, my opinions, to thee

Thursday, May 22nd, 2008

I wish I knew enough about things to have opinions about them. Other people have ideas, and they’re sure of them, and I’d like to be that certain about something. In fact, I am that certain about a lot of things, things I know a little something about, which is why my general lack of opinions on technical things worries me.

I run into people with strong ideas about type systems, run-time typing vs static declaration, compiler theory, how best to pass around code blocks and namespaces, object orientation as opposed to other metaphoric systems, the merits of lazy evaluation and infinite objects, threads vs processes or parallelism, monolithic vs micro, or why language/database/framework X is vastly cleverer than language/database/framework Y. I’d like to have opinions too. But I find I just don’t know enough.

My impressions of things are based largely on how they look and whether or not they exist. So I like Ruby a great deal, because it looks nice on the screen, and it exists. I don’t really like Perl because I don’t like the way it looks; Python looks nicer although I don’t care for the tabbing bit. I think Ruby looks best, so I prefer it. I don’t like terminating semi-colons in C/C++/Java, and sometimes too many parentheses make LISP look weird. Assembly code has a nice regularity to it, to be sure, but is not really feasible. When I find there’s some way I can’t do something in a given language, I assume there’s a good reason and just do it another way.

Editors I like for syntax highlighting. I don’t use vi, because I always type something when I’m not in insert mode and something horrible happens, so I use Emacs instead, but just for syntax highlighting; it takes so long to load that I end up using Pico quite a lot. I don’t use any Emacs fancy features, and the huge ELisp bit I only use for… syntax highlighting. So I also like TextMate, because it looks nice and reminds me of Emacs, but I still don’t use any fancy features.

Most of the time, though, I am just too amazed that something exists in the first place to find fault with it. This is not a character virtue, because I find fault with plenty of other things, but when it comes to tech, I’m just astounded at what’s out there. Perhaps my baseline is set too low, having grown up on C64s and Amigas, where compilers couldn’t exist because we hadn’t the memory or hard drives, and when people hid rather than shared code, when shareware and even expensive serious software was fairly bad, and when monitors were basically cheap televisions that broke a lot. So I can download a free setup like Rails and start a website (a graphical BBS) on a laptop. A laptop? With a flat-panel LCD? A GHz processor? A gigabyte of RAM? That’s insane!

I have had minor problems with MySQL and ActiveRecord, but nothing like the cement wall of impossibility to which I’d grown accustomed. Sometimes we have to do something a weird way because the computer expects it, but that is fine. In the not-so-old days it was like that all the time. Even in the early Linux kernel days, it was a victory when anything worked at all (try getting a sound card set up 12+ years ago, or certain wireless cards just a few years back). Try putting Linux on a laptop. Well, now you can order laptops with Linux, or get a MacBook which is basically Unix-based. Wireless cards, cafes with free internet, 4-hour battery lifespans, cell phones, hybrid cars with screens and gps maps, CDs instead of 5.25″ floppies or tape, ethernet as the norm instead of a beeping modem.

Some people are so accustomed with this environment that they can find fault. I would like to feel so at home in this world that I too could someday find fault with it. The most disturbing thing, to my mind, is that regular expressions are not really DFAs, or that non-deterministic algorithms aren’t a bigger part of daily life. As time goes on, which it does, I find myself using computers more and more for old-fashioned things, studying history or economic modeling, but the machines march on without me.

Hacking Hacker News

Tuesday, May 20th, 2008

It seems to be standard practice on HN for the first comment on any PDF link (which is automatically converted to Flash, through scribd.com) to be a comment with the original PDF link, followed by 273 comments discussing the various ways scribd.com is disliked.In the interests of “make something people want”, here’s a GreaseMonkey script to de-scribd.com HN PDFs:

describd.user.js

YC probably hates me now, but you can’t win ‘em all.

Comparison

Friday, May 9th, 2008

This week, I added a “remember me” checkbox to the clayv.com sign-in page.  All the cool web pages have these: this gives you a persistent cookie so it automatically logs you in if you return, even if you’ve quit your browser since then.  (Right now, ours lasts 2 weeks.)  The goal: make it easier for you to stay logged in at clayv.com.

At a previous company I worked for, I was given the task of adding a feature to an internal app which would annoy the user after 15 minutes of inactivity, and end the user’s session after 30 minutes of inactivity.  (Don’t get me started on how many managers it took to define “inactivity”.) This app had about 3 layers of setup you had to do before you could actually do what you wanted to, and “starting a session” was one of those.  The theory (we were told) was that we had to make sure users were really really sure before making a change, and not simply that we were trying to make them forget why they started the app in the first place.

Of course, if you’ve done any usability testing, or even had to use such an app yourself, you can predict the result. People don’t like being annoyed, and people don’t like computers doing things to them (like closing their sessions) without being asked. And people are clever. So they add notes to the thing they’re working on, and get in the habit of making some trivial change to them every couple minutes. Clearly, another win for how computers make our lives easier. (Don’t worry: the app never shipped.)

Usability isn’t unique to ClayValet or even small companies, but it does show the huge difference in thought-processes between the two. We have no choice but to be as pleasant as possible, because it’s much easier to hit the Back button than it is to find a new job because an internal app sucks.

Arithmetic

Thursday, May 8th, 2008

Just when I was beginning to think that maybe Ruby’s slight edge in readability made up for its big loss in consistency, I needed to use rational numbers:

  • Ruby: Rational(3,5)
  • Lisp: 3/5

Languages like Ruby and C are basically infix for arithmetic, and prefix for everything else.  For a web app (like most apps, come to think of it), I pretty much never do anything more than the most trivial arithmetic.  And here, in the one place where I do need something as complex as fractions(!), Ruby forces me to use prefix notation — which even Lisp, the prefix-notation king, doesn’t require.  And not just prefix notation, but spelling out the name of the numeric type I want.

This seems just so deeply, thoroughly wrong.