Jiaaro

…on life, the universe, and everything

Software is all about context

In the early days, the context was the world, and you went to a computer and gave it some information to crunch and then returned to the world. Now as we move into an era dominated by computing, context is often completely within your computing experience.

You don’t do your taxes at your desk and type the mathematical computations into your computer anymore. You download your bank statements, import them into your tax software, and submit your tax returns over the internet.

If this is how things are going to be (I would bet on it). The context created by the software we create needs to be smarter.

I don’t need to know about restaurants in 23rd and Park Ave (New York) when I’m alone in my apartment. I need to know about them when a group of friends and I spontaneously decide to go out for lunch on a thursday.

Computers have taken us a long way in terms of reducing the amount of time it takes to get information, but I think the real power is when it’s fast enough to effectively become augmented intelligence. Basically where internet access is fast enough that your brain going to the internet for info is more like hitting ram than hitting the hard disk (which is slow as hell). We’re pretty close already - probably within an order or magnitude in terms of network speed.

I don’t know about you, but the real problem I have, is knowing how to ask for exactly the information I want.

As it stands, just about anyone can find the wikipedia article that contains a given bit of information without much trouble (a few minutes at most), but It could take you half an hour to read some of the articles on wikipedia enough to find the information you need.

This is the opportunity.

If there was some kind of system tracking your context the computer could do the scanning for you, and I’m not talking about ctrl+f.

What I really want to see is for the information to be prefetched and displayed automatically. The computer should be able to eliminate the:

  1. google search
  2. clicking on the wikipedia result
  3. scanning the article.

It should just skip to showing you that paragraph about how mark twain used his childhood friend as inspiration for a character so you can use him as an example for your next blog post/term paper.

Don’t force us to remember this stuff.

Don’t force us to go look for it.

You should be able to half remember it. Vaguely describe it, and then have your computer go through your history and show you similar things you’ve come across that could be the thing you mean.

You know… the same thing your friend would do in conversation… that takes 20 minutes of both of your time to finally figure out what was on the tip of your tongue.

That’s how people work, and the goal is for computers to help us get things done. right?

Computers should do that for us. They’re much better at these types of tasks, as long as we can write the software to figure out what info you need right now.

That’s a hard example though, so here’s one you can implement tonight:

Let’s say you build software with users. Let’s also say that these users interact with each other.

When you start typing into a field, try to autocomplete using first OR last name OR email address OR any other identifier in your system. And make sure people I’ve typed in this field before get sorted to the top. I probably mean them. Also any people I’ve recently connected with should get extra weight as well.

This is pretty specific and probably wrong in your application so here is the most important part: measure your success rate. Keep track of how often I pick on of your autocomplete suggestions and keep tweaking the algorithm for better suggestive power.

Measure –> update –> start over

Drop.io was killed by facebook... what do I do?

So you had all kinds of stuff on drop.io, eh? Well my friend, lend me your ear. A few of my buddies and I are in a band. We make music. We hassle our friends to come see us play shows on facebook, and try to get our music out there any way we can.

We're not beholden to some evil company, peddling our records, desperately trying to stop fans from downloading the music we make. But sometimes it's just not ready yet. During the process of creation we like to send each other different mixes and ideas, and we used to use a vanilla FTP server to do it.

At some point I got tired of explaining how to use FTP to all my friends and put together a file uploading service (very similar to drop.io ;)) so we could exchange files.

Anyway I guess what I'm getting at is this, it's in alpha right now. It's free to use, and the files are stored on amazon s3, so they're not at risk of getting lost.

The idea is to provide more and more collaboration features as the site grows, and eventually become something like a github for everyone else (if you're unfamiliar with github, it is a site that facilitates collaboration on software projects).

For anyone interested, you can email me (jiaaro on gmail) and I'll personally help you migrate your files to esploded (and give you 6 months of service for free once we do start charging)

Idea: Auto-syncing internet radio

I think it would be a neat project to make an html5 internet radio (like mixest.com which I love) that automatically time syncs all the clients.

That way you could have everyone in an office go to a certain url and all the computer's speakers combined become the house sound system.

Not especially useful, but it would make a fun little node.js project.

Python/Javascript Trick - Hacky Error Handling

So I discovered an interesting way to run some code AFTER your return statement... get this (same idea works in both python and javascript)

(function x() {
  try {
    var x = 7;
    throw "run catch block";
  }
  catch (err) {
    x += 1;
    return x;
  }
  finally {
    // if you return here it will override the return
    // value from the catch block if it was run
    x += 1;
    alert(x); // 9
  }
})();
// returns 8, but x === 9 !

or in python...

 
 class FakeError(Exception): pass
 
 def my_func():
     try:
         x = 7
         raise FakeError
     except FakeError:
         x += 1
         return x
     finally:
         # if you return here it will override any value
         # returned by the except block if it was run.
         x += 1
         print x
 
 my_func() # prints "9" and THEN returns 8

pretty neat... kind of hard to read though

FizzBuzz

Fizzbuzz seemed like fun... My 5 min attempt in python:

for i in range(1, 101):
    fizz = "Fizz" if not (i%3) else ""
    buzz = "Buzz" if not (i%5) else ""
    print (fizz + buzz) or i