Less Vanilla and More Sauce, Please

Paul Brown @ 2006-04-15T00:04:00Z

For the record, I like Google Calendar, and it's probably going to replace iCal as my primary calendaring tool. I've already set up iCal as a client by subscribing to my Google calendar, and this will solve the problem of synchronizing calendars on multiple machines and being able to update the calendar from a remote location.

A solid online calendar is good, but I was hoping for something a little saucier. My wishlist:

  • A web service interface for managing events and checking free/busy status. For instance, I'd like to be able to provide a generic method for people to request a meeting with me or figure out when I'm free for lunch. (Yahoo!'s calendar has a feature like this, IIRC.)
  • I got addicted to labels (i.e., tags) in GMail, and I miss having them in the calendar. For example, I would like my “home” and “work” calendars to contribute to a single, aggregate availability indicator, but I wouldn't want the details of “home” events to be visible to “work”. (One program that fulfills this requirement, if a bit obliquely, is Microsoft Entourage through what it calls “projects”.)
  • I'd like the labels and addresses that I've built up in GMail to be shared with the calendar and vice versa, e.g., so that I can look up everything related to a given topic via a label.

And I'd love to have something more or less like MailTags for GMail with the ability to spawn time-bound tasks from an email. MailTags uses the “URL” field in the task within iCal to store a file://... link back to the mail item, and that bidirectional association is convenient for providing context. Of course, this would require that there be support for tasks on the Google platform, but I can only assume that it's in the works. (Maybe it will be called “Google-To-Doogle”? Feel free to use the name...)

Maybe a Google GTD implemented via Greasemonkey is only a little while away?

(comment bubbles) 0 comments

Damn Ergonomics

Paul Brown @ 2006-04-10T00:36:00Z

After having my hard drive renamed “iywemsndfgouy” a few times, I got a recommendation for AlphaBaby from Sam (thanks!), and the kid likes it. A lot. AlphaBaby displays shapes and letters and plays sounds in response to keypresses but otherwise locks the machine down. (Nonetheless, Emme has managed to hit the magic key combination ctrl-alt-cmd-q a few times with her palm and middle finger and get back to renaming desktop items.) My old 17“ G4 Powerbook is a downstairs email terminal about 50% of the time and running AlphaBaby for Emme the other 50%. (Fortunately, she's not talking yet to ask for a MacBook Pro...) She has a grand time massaging the keyboard and watching the shapes. She has actually started to peck at the keys with a finger as her manual dexterity improves, but it's never very long before she notices the power button on the upper right — round, shiny, textured, and inviting. It just looks like it should be pushed, so it gets pushed. Repeatedly. Half the time, she suspends the machine; half the time, she shuts it down. We'll see how long it takes for her to get over the urge to push it.

(comment bubbles) 2 comments

How would you boil the ocean?

Paul Brown @ 2006-04-07T17:19:00Z

Via Mike Champion, I've come to find out that there's a whole book full of think-outside-the-box interview questions called How Would You Move Mount Fuji?.

Here's one of my favorite such:

An infinite number of identical ball bearings are at rest and spaced out on an infinite, perfectly level frictionless surface. A single ball bearing, identical to the others, is rolled down a ramp onto the surface, and the ramp is removed. After some amount of time has elapsed, and without watching in the interim, how can you identify the ball bearing that was added?

After a little while, I'll put an answer in the comments.

(comment bubbles) 8 comments

Devil's Definition of Off-Site

Paul Brown @ 2006-04-07T00:17:30Z

In the spirit of the Devil's Dictionary, here's a definition of off-site:

off-site, n. A meeting or sequence of meetings held outside of the office and intended to bore or frustrate leaders into making choices.
(comment bubbles) 0 comments

Sitting on the Other Side of the Table

Paul Brown @ 2006-04-06T23:55:00Z

Earlier this week, I had the opportunity to sit down with the co-founders of a local startup (non-software) and go through their funding deck, and it was almost as much fun sitting on the (mock) investor's side as on the entrepreneur's side. Some of the take-aways that came out of the process:

  • I'm betting on you. Tell me how you are going to make the business successful. If I'm sitting across the table from an entrepreneur who's built a small going concern, the last thing I want is for them to use my money to change horses. I want to know how my money is going to enable the entrepreneur to scale up first and then how they'll know when they're ready to scale out.
  • You only need a salesforce once you've got a proven, repeatable business model. Or, to put it another way, “Show me the collateral!” Salespeople drive the sales process, not sales; sales happen as a result of a well-designed sales process. I want to hear the whole story that starts with the market, how you're going to reach prospects, how you're going to qualify prospects, how you're going to drive the succession of contacts between discovery and closure, and how you're going to ensure that the customer is happy. I also want to believe that you've got a passion for the data coming out of the process — when and how do you know if it's working?
  • Be prepared to hit interim milestones if you call them out. It's great to dangle pending deals from your pipeline in front of your prospective investors, but trying to create urgency this way can backfire on you. An investor may (quite legitimately) ask you to knock off your next few milestones as proof of your ability to execute on your plan. If the price goes up appropriately, that's OK, because it's the same investment either way in terms of the price versus probability of success.
  • Why aren't you doing that now? As you describe your plan, your potential investor is going to stay right with you and potentially get a step ahead. For example, if you call out a list of potential acquirers and an exit by acquisition, you should expect the question of what you're doing to connect with those companies now and build a relationship.
  • What do you want for yourself and your business? Are those compatible? This is a version of the “comfortable, rich or wealthy?” question but with a twist. It's one thing to put a $100M valuation up on a slide, another thing to lay out a plan, and something altogether different to execute on it. Be very clear and honest with yourself about whether you're the guy with the $100M idea or the guy with the $100M handshake.

I claim ownership of none of the ideas above; I learned nearly all of it from my Board, my investors, friendly VCs I've pitched, or from the School of Hard Knocks.

(comment bubbles) 1 comment

Coworking

Paul Brown @ 2006-04-03T04:59:31Z

Via Scott McMullan:

What’s coworking? I think of it as your favorite wifi coffeehouse, but with paid membership, more explicit community, and focus on project work and collaboration.

After a quick look at the coworking wiki, I'd probably give it a shot if I were doing independent consulting. (Nonetheless, it doesn't look like there's anyone doing something similar in Seattle, at least by that name.) A cafe where I had a guaranteed table, a properly trained barrista on-call, bottomless americanos, some white noise, ample power, wifi, and a couple of cellular phone booths would make an attractive work environment even without the possibility of collaboration and conversation.

(comment bubbles) 0 comments

Comprehending the Problem

Paul Brown @ 2006-04-02T18:48:00Z

List comprehensions are a programming language convenience but also an instance of a good way to think about solving some kinds of programming problems. For example, consider the problem:

Given a set, define a function that returns its powerset, i.e., the set of all subsets.

For my purposes herein, the datatype for a set has a notion of membership, size, and enumeration.

Et tu, Bruté?

The brute force solution using recursion is roughly:

Set powerset(Set s) {
  if s == EmptySet {
    return {EmptySet}
  } else {
    x = first element of s
    y = powerset (s \ x)
    return y union (apply (__ union {x}) to y) 
}

And this is far from efficient, since the powerset of a set of n elements has 2n elements which have a total of n2n-1 elements between them:

# elements in union over powerset =
                       = sum (j*(n choose j),j=0 to n)
                       = sum(j * n!/((n-j!)*j!),j=1 to n)
                       = sum(n!/((n-(k+1))!*k!,k=0 to n-1)
                       = n sum( (n-1)!/((n-1)-k)!*k!),k=0 to n-1)
                       = n (1+1)n-1 = n 2n-1

Thinking a Little

So how could thinking about comprehensions help things? The idea is to use the definition (“set of all subsets”) to influence the implementation. For example, to implement the size method on the powerset:

Powerset implements Set {

  Set _s

  Powerset(Set s) {
    _s = immutable copy of s
  }

  int size() {
    return 2^_s.size
  }
}

The same goes for membership:

boolean contains(e) {
  return (e is a Set && e is a subset of _s)
}

The only item left would be generating an iterator that visits all elements of the powerset, but thinking in terms of comprehensions again suggests a good approach. A subset of the source set is defined by a function that returns true if an element is in the set and false if not. With the source set indexed by 0,..,n-1, this suggests an approach where each subset corresponds to a number between 0 and 2n in binary notation — 1 in the kth bit if the kth element is in the set.

The bit vector encoding approach can be used to get a generator-style, recursion-free solution without necessarily encapsulating the powerset, but the encapsulation is equally important because of the frame of mind that it creates. Thinking about what "is a subset" means is what actually leads to the encoding concept.

(comment bubbles) 0 comments

All Posts contains 397 items in 57 pages of 7 items each:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57