About two years ago I had a simple idea: that businesses want to leverage social media content that is relevant. 19 months ago, right after my twins were born, we were kicked into action by a tweet from Doug Williams at Twitter that said (paraphrasing): “Is anyone working on Twitter moderation, we have customers.” It was crude, but we had our first product written by the end of the weekend.
Over the next 19 months we worked on Tuesday nights and when we had time. We iterated, found customers and revenue. Fast forward to today and we now have a seasoned executive in Sam Decker to lead the company, a new name (Mass Relevance) and nearly $2 million in venture capital funding from FLOODGATE and Austin Ventures.
So after 19 months, I’m very happy to be saying that the adventure is just beginning.
Here are some articles about our funding:
I’m passionate about coding but lately I have been spending a lot of free time studying money. First, Fred Wilson’s MBA Mondays turned me on to some of the financial fundamentals of business. Next, I had to cope with TweetRiver‘s taxes, which is extremely frustrating since I know almost nothing about accounting or corporate taxes (thankfully, I learned I could file an extension on the 1120, whew).
The switch in my brain really flipped when I read The Big Short by Michael Lewis, which mentioned You Can Be a Stock Market Genius a few times. I was intrigued and bought the book billed as “the great investing book with a terrible name.”
I couldn’t put either book down. I am very intrigued with the analysis of special situation and value investing. I would really love nothing more than a great education on how to value a company, not only by its financials but also by understanding what makes a business a great business (Warren Buffett style).
There is one quality about financial/business analysis that is really new to me relative to my skills as a developer: the uncertainty of it all. The reason why I loved Computer Science in college was that I knew if my answer to a problem was right or wrong, period. Contrast that with making trades or deciding what idea to pursue as an entrepreneur – I just can’t ever feel fully confident. Maybe it’s healthy self doubt or maybe I’m just too much of a novice.
I guess we’ll see what happens as I start to explore this field more.
On another note, I’m just plain thirsty lately. I need to drink more water….
I have been toying with interesting methods for improving how we store and make searchable streaming content inside of TweetRiver and something else I am prototyping.
Today we have mysql+sphinx. Things work ok, although writes to mysql are starting to take a bit since we’re trying to make sure that no duplicate tweets are inserted. Also, sphinx delta indexing (done every minute) is not available for search as quickly as we’d like.
Attempt #1: Build it like Facebook inbox search
Store a reverse index in cassandra, where the customer_id is the key, the term is the super column, and a time-sorted list of columns points to tweet ids. Raw tweets are stored in cassandra in another column family.
Pros: Excellent write speed, Worked extremely well for single-term searches
Cons: I don’t feel like building a search server for complex searches (multiple words, etc). Also, SuperColumns are currently only practical up to a few thousand terms.
Attempt #2: Lucandra!
Lucandra makes Cassandra the back-end for Lucene. This gives you the write performance of Cassandra and fancy Lucene queries that read from Cassandra insertions in real time. The big drawback here is that Solr support is not here yet (big frown) and I don’t really want to muck with finding ways to talk to Lucene from Ruby.
Attempt #3: Zoie Solr Plugin
I tried to detach myself from the hotness of cassandra and focus on near real time Solr, after all, I just want to be able to query as tweets are being inserted, period. I found the Zoie Solr plugin, which appears to have been released just a few days ago by the SNA team at LinkedIn. Basically, the Zoie plugin replaces the Solr index reader and update handler and promises to make things available to search immediately. This was fairly easy to get going and seemed to work quite well. I was very excited to hear that the Zoie team is looking towards “forward rolling indexes” next, which is ideal for logs and tweets since only the most recent N documents are kept in the index…awesome stuff.
Is there a winner?
I don’t really know where to go from here at this point because I have a feeling that Solr integration will be coming to Lucandra very soon. I want to wait until then to see which performs best. I’m looking for ease of setup, convenient storage of original document terms, great search performance regardless of quantity and rate of insertion, and decently powerful querying.
I’ll be presenting on “Commercial Advantages of Ruby and Rails” tomorrow (10/16) 2:30pm at the Innotech Austin conference.
See you there!
FiveRuns just announced a great feature added to Manage 2.0 that allows users to have a one-page look at the health of their Rail’s app.
Spent a few minutes getting some bugfixes into clientperf today.
How to upgrade:
gem install clientperf
What is fixed:
- Don’t choke on SafeERB
- Added indexes (indices? can you say indexes when you’re talking about databases?)
- Graphs don’t choke when there is no data.
Here are the slides from my talk last night:
I’m giving a talk at Austin on Rails next Tuesday on applying the 14 rules of high-performance websites in the typical rails mongrel/nginx stack, the main idea being to focus on some of the important implementation details when it comes to client-side performance optimization.
As I was planning, I realized that there was no simple as in the we’re-all-spoiled-with-rails simple way to measure client download times in production. Now, there is clientperf. It’s just a start, but decent enough to benchmark the actual client performance impact of any optimizations you make:
How it works
How to install
gem install clientperf
and that’s it!
Enjoy and please let me know about bugs.
FiveRuns TuneUp is a neat profiling tool for developers. Developing this tool also has brought up some interesting challenges. Here is one that I encountered today:
We can’t tell all TuneUp users to manually turn off RJS debugging, so here is how we disable it solely for our one heavy AJAX action in rails version 2 or greater:
def action_name debug_rjs = response.template.debug_rjs response.template.debug_rjs = false ... response.template.debug_rjs = debug_rjs end
It’s trivial, but it took a little bit of digging through the rails source to find out how to get to this from inside the controller, so I hope it’ll save others some time