Archive for November, 2008

Fluid Thumbnail Plugin and Delicious.com

Since Delicious rebranded itself delicious.com from del.icio.us Fluid.app’s built in rules for the thumbnail plugin no longer work.

You need to add:

delicious.com/*           h4 a

on the thumbnail-plugin configuration screen.

  • Share/Bookmark

Atlanta Startup Weekend 2 (a decompression)

These are my pretty random thoughts relating to Atlanta Startup Weekend2.

I like the multi-idea format.  It kept people engaged and happy.  A lot of folks felt the idea selection phase took to long.  I was an early supporter of this idea.  However, in retrospect, it might not have been a bad thing. 

Based on the ideas posted to the website, I went into Friday night planning on helping out with Giving Time or the project called Seed Stage Records.  By the end of the night, I really wanted to work on “Mark’s Horrible Idea” or “Get Me A Date.”  Hearing the pitches, it became clear that a lot of the ideas weren’t well thought out or appropriately researched.  This made me uncomfortable, since there really isn’t much time.  The ideas that were better seemed to draw incredibly huge teams.  This is also disconcerting, since you’re likely to spend more time arguing than actually doing things.  

“Mark’s Horrible Idea” and “Get Me A Date” were incredibly appealing, simply because they were quirky, morally questionable, and pitched as jokes.  Which meant they felt nothing at all like a day job.  I’ve already got one of those, along with a bunch of side projects.  I came to ASW2 to have fun, and these were the projects that seemed the most fun to work on.

I pretty much ended up as the front person for “Mark’s Horrible Idea” (rebranded Reepli.com.  This taught me some really important lessons. 

Teams are crucial

We were able to accomplish what we did because all of us had worked together in the past. This made it possible to check our egos at the door and focus on who would be best doing what. The project was originally “Mark’s Horrible Idea” but I ended up taking on the biz dev and marketing duties. That happens a lot in the real world. What doesn’t happen a lot is that transition occurred without any real conflict or founder’s anxiety. Structuring the team that way just made the most sense.

Having a good team that understands each other and knows how to make each member useful is crucial to getting something done in a short amount of time.

Context Switching is Hard

I’m not a biz-dev person, I just played one at ASW. Something I find incredibly hard and will work on more in the future is switching between coder and something else. When you’re programming and deep into the problem, it’s important to switch gears and focus on the points that are relevant to your audience. They probably don’t care that you use Capistrano. They probably do care what problem you solve and how you intend to make money.

Also, as the de-facto team lead, a lot of what I needed to do was make sure everyone was being productive and knew their importance to the goal. However, as a programmer, my desire was to stick my headphones on and jump head first into the code. Finding the right balance isn’t easy.

Beware mock data

More often than not, this ends up on a projector in a room full of people. Thankfully, everyone found it funny and nobody was offended.

Credits

I’d once again like to thank everyone for their hard work and point out their key contributions (in no particular order).

  • Amro Mousa did some front-end and worked extensively on the search components
  • Hamed Hashemi built search and reply modules and assisted with all the server work
  • Mark Luffel pitched the idea that made us laugh. He also built a lot of the front-end and tossed in a most of the AJAX
  • Erik Peterson our resident rails uber-guru built a ton of the backend and wrote the unit tests. We had nearly 75% of our code covered thanks to him
  • Joe Uhl wrote the reply transformation module, before his real startup called and he had to leave us for the weekend

Thanks guys!

Also, thanks to Lance Weatherby and the ATDC who made it all possible.

  • Share/Bookmark

Reepli.com: An In-depth Look

Reepli.com is the Atlanta Startup Weekend 2 project created by Erik Peterson, Mark Luffel, Hamed Hashemi, Amro Mousa, Joe Uhl, and me.  I’m really proud of how the team worked together and the amount of stuff that we were able to get done in a very short period of time.  We closed out 45 issue items over the course of 48 hours.  That’s a pretty good clip.

Since the site’s still in private beta and the seed data took over the presentation, I’m going to present what we built in a little more detail.

Conversations

The focus of Reepli is conversations. The system allows you to not only find conversations, but also reply to them through the system. Currently we support responding to twits on Twitter and WordPress blogs that don’t have captchas.

The conversations screen is the center of the app. This is a list of recent searches that have match the keywords defined in a campaign. We’ve written a background process that fetches new results from google and twitter every 10 minutes. The front end also refreshes every 5 minutes.

You can either choose to ignore a message or reply to it.

Twitter replies happen inline. With each campaign, you define your form responses. You can always use a form response, or modify it to choose your own. There is a module that reformats your English to give the appearance of customization. However, this happens at message creation time right now and is not integrated into this view.

Identities

Multiple identities are crucial to any successful marketing campaign. It needs to appear that you are not the only one spreading the message. Or, if you are a support department, you may want to appear as the only contact point for consistencies stake. Reepli is flexible and will let you use the system however you want.

You can select an identity per-response.

Campaigns

All conversations are tied to a campaign. A campaign defines the search terms (or keywords) that require you to respond. You can activate and deactivate campaigns depending on your needs.

The keywords for an active campaign are passed into the search modules every 10 minutes. The search modules scan Google and Twitter and store the results of their match in a database. The search module also filters out non-blog results on Google. This means your agents won’t have to waste time on non-actionable webpages.

This is the overview of the campaigns screen. You can edit the name of a campaign:

The details page for a campaign not only show the keywords, but also the pre-canned replies defined for each campaign.

One of the neater and more useful features of the app is the system will translate the text on edits. Subtly changing the text you are replying with will help prevent your responses from getting incorrectly marked as spam. Look closely at the following screenshots:

The toolset

Reepli.com is written in Ruby on Rails. For AJAX and effects, we use the JQuery. We’ve configured the database using ActiveRecord Migrations. On our dev boxes we were running SQLite. Our production server uses PostgreSQL.

The app is deployed on a Slicehost slice running Ubuntu Hardy. The appserver we chose is Passenger. The code is hosted on GitHub and is deployed to the server via capistrano.

We’ve also unit tested a significant portion of the system with RSpec. This was invaluable in isolating the faults between the front-end and back-end.

Revenue Model

This is easy. Charge people somewhere between $7-$25/mo for accounts (depending on the costs of the system).

What’s Left?

We built this thing in a weekend. The team was very talented and super-focused, but there’s only so much you can do in that little time. There are a few show stopper bugs. They aren’t hard to fix, we just didn’t get them before demo time (also why the screen shots show a local IP and not reepli.com).

The hard problems of scalability are still there. Support for responding to more platforms needs to be added.

However, for a weekend project, the code is solid, well written, and does a lot. If the eBay auction doesn’t work out, a few of us might actually pick it up eventually. There were quite a few “damn this is useful” moments through the course of the weekend.

  • Share/Bookmark

Powerful Marketing with Reepli

Jumbis

Seed Stage Records

GivingTi.me

Some card or some thing

This blog will be spammed

  • Share/Bookmark

Reepli: “Mark’s Horrible Idea” defined

Media-savvy companies know that in the era of blogs and social media it is impossible to control the conversation. Media-deprived companies don’t even know if there is a conversation happening. Reepli is a solution for rapid and comprehensive response to conversations happening outside of a brand-builder’s direct sphere of influence. PR agencies already engage in this type of activity. However, they charge thousands of dollars a month for this service. Reepli will enable everybody and every organization to have the same level of power.

Consider the case of Joe the Restaurateur. Joe manages all of the day to day for his restaurant. Try as he might, a few patrons leave his restaurant unhappy and post negative reviews. There are only a few a month, but Joe doesn’t have the time, money, or knowledge to find these reviews and set the record straight.

The problem scales to large companies as well. Suddenly, a report is published indicating that a line of popular toys manufactured in China contains a high level of lead. This situation is highly improbable, but if were to happen then the blogosphere would be on fire with conversations relating to this topic. Forums for Mom’s would be questioning the quality of the toys. Financial sites will be speculating on the damage to the stock price. The toy company can use their PR agency to contact CNN and Foxnews, but there is no way they can reach out to individuals on blogs. The company simply cannot keep up with the volume.

A perfect example how immediate and quick response can benefit a company is apparent with Comcast’s new initiatives Comcast is universally lambasted for it’s terrible service. However, they now have service representatives on twitter scouring for people with issues. Once they find them, they solve them. The result is that customers who were publicly complaining about Comcast are now singing its praises. Comcast can do this because they have money to spend on this problem. Joe the restaurant owner doesn’t.

With Reepli, Mattel, Joe the Restaurter and everyone else in between can set up a campaign around a set of keywords. Each campaign would then have a set of predefined responses that could be automatically posted to popular blogging engines and twitter. Reepli will also use advanced language processing to subtly change form messages to prevent the assumption that the marketing outreach is spam.

Reepli allows you to:

  • Quickly create marketing campaigns
  • Automatically generate Google searches
  • Integrate with Twitter
  • Respond to alerts within 2-clicks
  • View Gradient Backgrounds
  • Manage Multiple Identities
  • Share/Bookmark

Why Vote?

The chances of your individual vote mattering for anything is incredibly slim. So why even bother. After all, it’s not like the candidates speak for you anyway.

That, however, is the very reason it makes sense to stand in line and cast your vote. All that follows is my un-researched and largely un-substantiated observations, so pick the appropriate dosage for your grain of salt.

It’s no secret that the crux of most campaign machines is Get Out The Vote (GOTV). GOTV is predicated on there being a group of voters that are going to vote for a candidate regardless of platform specifics. Lately, poor voter turnout has been a given, so all one needs to do is get enough of “the base” to the polls to win. Forty-five percent of registered voters in Georgia showed up to vote in this year’s primaries. Which means your senatorial candidates were chosen by less than a quarter of Georgians.

Therefore, if you think that 30% of the people in the state agree with you, you have a legitimate shot to win. You just need to get that 30% out to the polls. If you pick up just a few more voters along the way, you’ll have a landslide. If you’re a savvy candidate, you’ll drum up all the wedge issues and pull every heartstring you can find. The platform is not about ideas and problem solving, it’s about how the other guy is a “Baby-killer,” “Terrorist-cohort,” “Gunslinging-madman,” “Un-american,” “War-hawk,” “Bearer of white flags”; whatever else will get the base riled up enough to get off their couch and stand inline long enough to vote.

The side effect of disillusioning independent voters is a bonus, because it reduces the number of folks a candidate has to convince to show up. There is no reason left to appeal to any voter that is not naturally inclined to believe in you.

I think this is the heart of the divisive discourse in this country. Going and voting in numbers starts taking the discussion back. By going to the polls, you make the politicians take notice and you dilute the guaranteed blocks that each party has, which in turn will make them appeal to new ears and force them to try new ideas. So if you read this blog and weren’t planning on voting, I hope you reconsider. It’s not just civic duty or a moral code at stake. It’s about forcing the candidates to understand that there is an America beyond what shows up at their rallies and in their campaign headquarters.

  • Share/Bookmark

RMagick, Slicehost, Ubuntu 8.04

The default Ubuntu install in Slicehost has the minimum number of packages. You have to install most things on your own. The documentation provided by Slicehost is thorough for the most common tasks.  However, I ran into a hiccup that took me a while to figure out.  That hiccup, no surprise, was trying to get the infamous and universally required rmagick gem installed.

My first mistake was probably typing:

$ sudo aptitude install imagemagick

And assuming that it would give me the development headers. It didn’t. Then I tried to find the libmagick10-dev package, which doesn’t exist. Eventually, after much trial, error, and increasing familiarity with aptitude, I found this combination:

$ sudo aptitude install libmagick9-dev
$ sudo gem install rmagick

Success.

  • Share/Bookmark
Return top

About

This is my blog about programming. For random stuff, checkout my Twitter or Tumblr