Matthew Bellantoni

Tracy Hoy Clark Sold My Condo

I want to take  a few words to recount my recent and very positive experience selling my condo with Tracy Hoy Clark of Chobee Hoy Associates Real Estate in Brookline Village.  I retained Tracy after my condo had languished on the market for 10 months with two other realtors.  Five days later I had an offer which exceeded my expectations.

Tracy quickly came up with a pricing strategy and marketing approach to salvage my disaster of a sale.  She's very knowledgeable about the area and the market.

At all times she was to the point and made things happen.  She just handled it.  Most of our communication was by text (and some email) which I appreciated.  (I'm not sure if this is always her preferred way to communicate, or if she just listend to what I said to her when we first met.  Either way, yay.)

One place where Chobee Hoy need to up their game is on their website contact form.  I initially tried to get in touch this way and it took a day for someone to get back to me. (Compare this with their Brookline Village competitor who got back to me in 10 minutes.)  However, after that small bump, we were off and running.

Your mileage may vary, but consider me one very happy customer.  If you're in Brookline Village, Coolidge Corner, Washington Square or anywhere else in Brookline looking for a realtor, I don't know how you're going to do better.


A Rails Rake Task to Dump The Asset Path

Here's a rake task that dumps out the current asset path.  For those who don't know, the asset pipeline is a major (cool!) new feature in Rails 3.1.  I've been working on some gems that provide assets (javascript and stylesheets) and I've gotten tired of going to the console to look at the asset path.

Here's the code:

1
2
3
4
5
6
7
8
namespace :assets do
  desc "Display asset path"
  task paths: :environment do
    Rails.application.config.assets.paths.each do |path|
      puts path
    end
  end
end

Also available as a gist.


Idea: Coffee Meeting Matchmaker

Yesterday's blog entry by Mark Suster, "Why You Need to Take 50 Coffee Meetings,"caused me to come up with (yet another) idea for a product. I've passed my 50 coffee mark some time ago, but I in no way take 250 meetings a year, as Mark suggest. And the farther along I get in my career, the more I believe that advice is sound.

But I've got a problem. I would take more meetings but I need to find more reasons to meet with more people. I'm not very good at this! So here's a proposed solution: the coffee meeting matchmaker.

In short, people you know suggest people they know with whom they think you should meet for some reason which they would specify. After both parties agreed to the meeting, you'd set it up and have your coffee.

One possible refinement is that you are not given any recommendations until you make some of your own. Or alternatively you're given some period of time to return the favor. This seems to be in the spirit of the service.

Another refinement might be requiring more than one recommender before a match is considered good. That is, I would be told I should meet a person until N number of people have said I should meet that person.

This is built off of your LinkedIn social graph. I have no idea how it makes money.

If you build it (or already did,) please let me know!


Panini: A Way to Generate Sentences From A Context Free Grammar

One of the coolest things I ever learned about were Context Free Grammars (also known as a CFG.) I'll leave the description of CFGs to Wikipedia.

I've always had an interest in using CFGs to generate sentences that could be used to seed data sets, or to create a series of certain actions within a bounded set (e.g. to drive a GUI for testing purposes.)

I was never able to do that because I didn't have the tools. So, a couple of months ago I started creating a toolkit in Ruby called Panini that would allow me to do this.

Getting Started

The gem can be installed via:

  gem install panini

You can also find the code on GitHub.

Usage

Defining a grammar is easy. Create a grammar object, add some nonterminals and then add the productions to those nonterminals.

Here’s how a grammar to create sequences of the letters "a" and "b" is defined:

1
2
3
4
5
6
7
8
9
10
11
  
  grammar = Panini::Grammar.new
  
  nt_s = grammar.add_nonterminal
  nt_a = grammar.add_nonterminal
  nt_b = grammar.add_nonterminal
  
  n_s.add_production([n_a, n_b])        # S -> AB
  n_s.add_production([n_a, n_s, n_b])   # S -> ASB
  n_a.add_production(['a'])             # A -> 'a'
  n_b.add_production(['b'])             # A -> 'b'

Sentences are created from Grammars using a Derivator. Creating the sentences from the grammar can be tricky, and certain derivation strategies may be better for some grammars.

  derivator = Panini::DerivationStrategy::RandomDampened.new(grammar)

To generate a sentence, call the derivator's sentence method like thus:

  derivator.sentence -> ['a', 'a', 'b', 'b']

You will get a new sentence (depending on the grammar) with every call:

  derivator.sentence -> ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b']

Check out the README at GitHub to learn more!


Generating Complex Tables Using Ruby on Rails

In couple of places (so far) in my current project I'm creating tables where the presentation varies widely between rows based on the nature of the data.  I ended up with a solution that I've never seen before, so I thought I'd share.  I'm using Rails 3 with Ruby 1.9.2.

Note, the data I'm presenting in my app is actually tabular in nature--I'm not just using the table as a presentation hack. (I think!)

Where I Started

The first solution involved a lot of presentation logic in the view.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table>
  <tbody>
    <% person.list_of_things.each do |thing| %>
      <% case %>
      <% when thing.cond1?
        <%= render(:partial => "type_1"), :locals => {:person => person}) %>
      <% when thing.cond2? %>
        <%= render(:partial => "type_2"), :locals => {:person => person}) %>
      <% else %>
        <%= render(:partial => "type_3") %>
      <% end %>
    <% end %>
  </tbody>
</table>

This is pretty horrific, and the above example is greatly simplified from my actual case: the conditional expressions in reality are more complex and there's another nested level of control structures.

As you can see, there's a partial for each type of row. I won't show the code, but its pretty straight forward: each partial renders a single row, each of which has some very unique elements (most related to icons and other images contained in the cells.)

Where I Ended Up

A way to get the logic out of the view is to use a helper.  My helper iterates through the row data, and creates a lamba function that calls the appropriate render function.  Those lambdas are then executed in the view.

This is what the helper looks like:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  def compute_table_rows(person)
    person.list_of_things.map do |thing|
      case
      when thing.cond1?
        lambda do
          render(:partial => "type_1"), :locals => {:person => person})
        end
      when thing.cond2?
        lambda do
          render(:partial => "type_2"), :locals => {:person => person})
        end
      else
        lambda do
          render(:partial => "type_3")
        end
      end
    end
  end

The code in the view now looks like this:

1
2
3
4
5
6
7
<table>
  <tbody>
    <% compute_table_rows(person).each do |row_proc| %>
      <%= row_proc.call %>
    <% end %>
  </tbody>
</table>

Commentary

There are other ways to do this.  I could have just iterated over the list with Enumerable#inject (a.k.a. Eumerable#reduce) to build up a single large string in the helper and then just ship that back to the view.  However, I didn't like the idea of building up a huge string in the helper and it feels less functional to me.  (Yeah, I know that's a persuasive argument.)

I don't love helpers.  While I'm not as zealous about this point as some others, helpers do seem out of place in an object-oriented, functional programming environment.  This one should probably be an object itself. (I'd love a pointer to a pattern anyone uses for these kinds of objects.)


Working From The C3

I've taken up residence at the Cambridge Coworking Center (a.k.a C3) which resides within the Cambridge Innovation Center in Kendall Square.  Below are my thoughts after working there for a little over a month as well as some thoughts about working from home vs. not as a single entrepreneur.

First, some background.  I've been pursuing a project for the last few months and had been working out of my home.  The benefits of working out of the house were: affordability, close proximity, quiet and comfort.  What's not to love!?

Plenty, it turns out!

Working From Home

The location isn't great after all (well, for a web or software company.)  I live in Brookline.  I'm at a stage where I'm attending a lot of events and out meeting people, usually in Kendall Square or a couple of the usual locations.  So, I was spending a lot of time traveling between those places and my house.  And, frankly, sometimes on cold and dark January nights, that trip kept me from getting out to as many events as I should have.

Home can be distracting.  I'm a pretty disciplined guy and I can work intently for long periods of time on my own, but boy, did I find the house distracting after a while!  Doing laundry, emptying the dishwasher would all become more pressing as I wrestled with a tough problem.  And I felt as more time went by, this was getting worse.

Home can be isolating, and this is what really put me over the top.  Even though I was getting out, I was really by myself for hours and hours and somedays days at a time.  I was getting into a negative feedback loop of sorts where the less contact I had with people, the less contact I sought.  This is exactly not what I needed to be doing as I developed my project.

Working From the C3

I decided to fix the problem.  I'd attended many events at the CIC and had heard about the C3 and frankly I have a real bias towards Kendall Square.  The price was right, and so after a quick tour, I became a resident at C3.  After a month, I have to say that I'm a happy camper.

The facility itself is great.  You get a non-dedicated place to sit, to put your laptop, a power outlet and a wireless network connection.  So, pretty much everything you need! The furniture and the building itself are the nicest I've experienced in my career at startup and early stage companies (where the furniture is always second hand and crappy and the roof always leaks.)

There are "phone booth" rooms where you can take or make a calls, conference rooms, as well as printers and copiers.  And there's food and drink: apples, bananas, pears, chips, cereal, nuts, yogurt, ice cream, soda, coffee, espresso, and I've forgotten a bunch of other stuff.  Nothing is metered which is zero-hassle and thus awesome.

There are other people there.  I find being around smart, hard working and energetic people motivating.  Seeing other people passionately executing on their projects challenges me to to the same.

It should be said though, that the C3 is not a clubhouse.  And while many people seem to know each other well, it's clear that this is a product of time and people getting to know each other.  (I bring this up because coworking spaces have often been portrayed to me as places where everyone is working shoulder to shoulder, and I find that this, unsurprisingly, isn't the case.  People to whom I've spoken at other Boston/Cambridge coworking spaces have recounted similar experiences to me.  I'd be interested to hear others' experiences.)

The location is choice.  I get an electric buzz just from working in Kendall.  The C3 itself is steps away from the Kendall/MIT Red Line stop.  The C3 in turn, is steps away from the places where Boston web community startups and startup events happen: CIC (in the same building,) NERD, Dogpatch, or Voltage.  Getting to Central Square or over to MassChallenge (or #WhiskeyFriday) is just a short Red Line trip away.  Plus, I get to see my good friends who work in Kendall more often.

In Closing

It's been a very positive experience so far.  I'm having more fun and I'm getting more done.  I think the cost of the space ($250/month) is made up for in increased productivity, increased sanity, and reduced travel times!


The opposite of "empty" is "full."

Sometimes you want to know what something is and not what it is not. Got that?

1
2
3
4
5
class Array
  def full?
    not empty?
  end
end

I do like writing some Ruby!

Update 2/28/2015 You're looking for Array#any?.


TechStars Boston Results

TechStars has started accepting applications for the 2011 Boston (Spring) Program!   Now that they've been in Boston for two years, I was wondering how the first two classes have faired. TechStars have a reputation for being very transparent with their results, but they haven't updated their numbers since May of this year.

So, I thought I'd do my own research in hopes that it would be useful for anyone contemplating applying to the Boston 2011 program.

Summary

Here's the rundown for the first two years in Boston.  You can find more details at the end of this post.

Program # Companies # Funded # Active # Failed # In Boston
Summer 2009 9 4 (44%) 7 (78%) 2 (22%) 4 (44%)
Spring 2010 10 3 (30%) 9 (90%) 1 (10%) 8 (80%)
Total 19 8* (42%) 16 (84%) 3 (16%) 12 (63%)

There have not been any acquisitions or IPOs yet.

*Update (11/22/2010 15:00 ET): I've received notice from a very reliable source that one additional company has received funding and that three others are currently actively fundraising.

Thoughts

When compared to the first two years in Boulder, Boston seems to be off the pace when it comes to the number of companies that received funding (13 vs. 7.)

Likewise when it comes to the number of dollars raised (~$7.8M vs. ~$4.9M.)  However, the Boston number doesn't take into account StarStreet's undisclosed funding round.  These numbers are probably further skewed by the fact that the Boston 2010 Demo Day was only a few months ago, and sufficient time may not have passed for financings to occur.

Boston may be doing a better job holding on to its startups when compared to Boulder, but it's a little difficult to tell given the amount of acquisition activity that has occurred in Boulder.

Caveats

This research is not rigorous!  It was performed by Googling around and looking in the usual places.  If you have better information and you let me know it,  I will happily update what appears below.

I didn't go back and normalize for time (meaning, I should really consider the data as it would have been 6ish months after the second Boulder Demo Day.)  Likewise, I didn't normalize for the fact that there were 20 companies in Boulder and 19 in Boston in the first two years.  Please pardon my laziness!

Details

Summer 2009
Company Sought Raised FTEs Status Nexus
AccelGolf $550k $600k 7 Active ME, MA
AmpIdea $150k $0 - Failed -
Baydin $0 $100k 4 Active San Fran
HaveMyShift $400k $0 4 Active Chicago
LangoLab $360k $0 4 Active Cambridge
Localytics $500k $700k 4 Active Cambridge
oneforty $0 $2,350k 9 Active Cambridge
Sensobi $300k $0 2 Active New York
TempMine $450k $0 2 Failed? Cambridge

Spring 2010

Company Sought Raised FTEs Status Nexus
Appswell $350k $0 3 Active Cambridge
Loudcaster $350k $0 1 Active Somerville
Mogotest $325k $0 2 Active Portsmouth
Monkey Analytics $0 $0 2 Active Cambridge
Marginize $350k $650k 2 Active Boston
SocialSci $250k $500k 5 Active Cambridge
Sparkcloud $250k $0 3 Active Newton
StarStreet $500k Undisclosed 4 Active Somerville
TutorialTab $200k $0 2 Active ???
UserMojo $300 $0 - Failed -

A Grand Unified Theory of Pitch Deck Slide Count

Over the past several years, there's  been something of a cottage industry around advice concerning the number of slides that an entrepreneur should have in their pitch deck.  Unfortunately, much of this advice—at first glance!—appears to be contradictory.

In this humble essay I will offer a theory that will demonstrate that this advice is, in fact, entirely consistent.

The Theory

The theory states that the number of slides in a pitch deck should be directly related to the font size (in points) that is used in the pitch deck.  More specifically, the relation is described by this linear equation:

lengthpitch deck = f(sizefont) = (0.29)sizefont + 0.39∏

The Method

I gathered data from the following two data points (because a line needs two data points!)

Point 1: Guy Kawasaki's approach outlined in the blog post "The 10/20/30 Rule of PowerPoint," specified ten slides with 30 point font.  (I'm picking this post because it's the first one I remember seeing.)

Point 2: Tim Young's post "365 days, $10 Million, 3 Rounds, 2 Companies, all with 5 Magic Slides," advocates for five slides.  (I'm picking this one because it's the most recent post of this sort I've read.)  He doesn't say what font size he uses, but inspecting the slides in his post it looks like 12 point or 14 point font, so let's call it 13 point.

Just plot these in Excel and it will spit out the above equation (without the pi.)  I didn't do the math, but I figure the error in my calculation is probably +/- 1%.

Corollaries

There are a couple of corollaries that can be easily drawn:

  1. Since the smallest font size available (on PowerPoint, anyway) is 8 points, the would suggest that, theoretically, the shortest possible pitch deck is 4 slides.
  2. It also follows that since there doesn't seem to be an upper bound to font size (in PowerPoint, anyway) pitch decks may theoretically be infinitely long!

Next Steps

Wikipedia states that "[t]heories are analytical tools for understanding, explaining, and making predictions about a given subject matter." So, it is necessary that an experiment is performed and that the GUTofPDSC correctly predict the result.

Here is the proposed experiment.  This Summer, Fred Wilson advocated for a Six Slide Pitch deck, but then did not provide a specimen of such a pitch deck.  The theory predicts that when Fred Wilson does provide such an example, it will have a font size of 16 points to 17 points.

Conclusion

Use as many slides as you like in your pitch deck, just make sure you use the correct font size on them. Also, don't try and assemble a deck of less than four slides, because it's theoretically impossible.

In Closing

The analysis has been performed, the theory constructed, the conclusions drawn and the prediction made.  The matter is now in the hands of  the experimental community.

I eagerly await your peer review and experimental results!


Seven Days with 99designs

Someone recently said to me regarding creating an identity (a.k.a. logo) for a startup "[if] you need a logo real bad, that's just how you'll get it."  So, it was with interest I followed a friend's recent experience using 99designs to source a logo.

99designs is a web site based in Australia where a community of designers compete to create a designs (e.g. logo, Wordpress template) for you.  You submit a design brief and offer a prize.  They submit entries.  After a number of days, you pick a winner and award a prize.

Anyway, this person's experience is recounted here for your enjoyment and edification.

Day 1

Taking the leap and giving 99designs a try to see if I can source a logo.  I've carefully crafted the design brief and tried to keep it implementation-free so designers will be able to exercise their creativity and delight with the unexpected.  I've added $100US to the base prize in hopes this will attract higher quality designs.

The first design is submitted within hours.  This is exciting!  I provide a message of thanks to the designer, consider it and provide some thoughtful feedback.

Day 2

Overnight, lots of pointy people have appeared.  I didn't ask for pointy people, so I don't know why so many of them are being submitted.  Single pointy people, pointy people couples and teams of pointy people.

The rate of submissions is increasing.

For the first time, I eliminate all of a designer's submissions.  I'm informed that they've in turn "withdrawn all of their designs."  A brief moment of remorse.

Day 3

Up to 40 designs this morning.  It is getting difficult to keep up in any meaningful way.  It simply takes too much time to provide thoughtful feedback when people keep throwing three or four (bad) designs against the wall at a time.  So much for this being a background task!

I've been asked by 99designs to guarantee that I will choose a winner and award the prize.  Wanting to maintain the health of my contest, I wait a few hours and then do as advised.

All hell breaks loose!

Pointy people galore.

Day 4

It's getting really ugly in here.  In the comments there are now allegations that people are using clip art!

More seriously, there are allegations of plagiarism!  The guy in Indonesia is claiming the guy in the Philippines has stolen his design.  He offers as proof links to other contests where he's submitted the same design!  (Hey, thanks for reading my design brief.)  There are demands that designs are withdrawn and threats of escalation.

I update the design brief to forbid any more pointy people and kumbaya groups.  I begin eliminating these with malice.

I remove the word "Web 2.0" from the title of my design contest.  At one point, I thought this would attract energetic design, but apparently in the other hemisphere this roughly translates to "pointy people."

Designs are coming in faster than I can review them. I tell people to stop spamming me with designs. Ask them to spend a few minutes reviewing the brief instead of creating that 10th extra design.  Nobody listens.

I can't take three more days of this.

Day 5

Another deluge overnight.  Ugh.

People have been addressing me as "CH" for days.  I only now realize this means "contest holder."  People keep asking in broken English "Hey, CH, you like my design?" in a way that reminds me of kids in post-war Europe saying "Hey Joe, baseball!"  Charming.

I've eliminated 50 designs today without any feedback or even a thank you. I've become a numbed brute.

All signs of decorum are long gone.  The center cannot hold.

Day 6

My preferred design has disappeared.  What!?

I reach out to the designer and it turns out that he's been banned because of the allegations by the Indonesian guy a few days ago.  Super.  He contacts me via his girlfriend's account and gives me his email address.

That's great, but I've got to award the prize to someone who is still in the contest.  And this communication is probably in violation of the terms of use.

I'm at a loss.  After the money and the substantial amount of time I've invested, I can't believe I'm not even going to get my preferred derivative design!  I should have just bought Illustrator and made my own logo.  It would have been cheaper, faster and less hassle.  (Okay, maybe that's an exaggeration.)

I write 99designs telling them I want my design back.  It's early Sunday in Sydney.  I do not know if I will hear from them before my contest ends.

Day 7

The last day.

I've stayed away most of the previous day after the plaigerism debacle.  Just the occasional visit to summarily dispatch a handful of designers.

I awake to another 40 designs, more allegations of plagiarism and no word from 99designs.  It's late Sunday night in Sydney  and I'm on the East Coast of the United States.  I'll either have to pay to extend the contest, or just choose another design.

I prepare to abandon the kid in the Philippines in favor of the kid in Serbia who has recently appeared on the scene.  I ignore everyone else and work through a few iterations with him.  He points out some interesting things he's done with fonts in the logotype.   I decide it's good enough and declare him the winner.

We quickly work through the handoff process.  A couple of questions back and forth.  I get my design files and he gets his money.

Four-hundred and ten designs and 7 days later, it is over.