SocialCam should be renamed ScumbagCam

A favorite pastime of my wife and I is to watch funny videos in bed on the iPad. Last night I was browsing Facebook and saw a link to some wacky video in my news feed. I clicked it (something about a giant snake eating a human) and it launched a video on SocialCam. 

The video was neither funny or compelling–but, hey, you can't win 'em all. What I noticed later alarmed me, however. SocialCam posted on my behalf that I watched the video. No sharing dialog, permission request (that I'm aware of), or other prompt. My best guess is that they used the permissions I granted them to the actual camera app–but I could be wrong. 

This behavior by SocialCam is terrible and I hope Facebook revokes their developer privileges. I also can't see why YCombinator would want to be associated with a company like this (yeah, I get the experienced founder part). 

Two things really stand out for me: 

I thought SocialCam was "Instragram for Video"

I thought SocialCam was trying to be the mobile video sharing service of record–appears that's what their investors think too. That's funny because if you look at their trending videos, most are just re-posted funy/fail/stupid videos–the kind you'd find on YouTube, Break.com, etc.

It makes me wonder–is all this spammy behavior just a giant user-grab in the hopes people will download their camera app and eventually use it for sharing personal videos. If that's the case, seems like a terrible way to find true product-market fit. 

Contrast that with Viddy's feed, which actually appears to be people sharing personal videos. Personally, I'm not sure an "Instagram for Video" will really take off (I think photography and video are very different beasts), but at least they're trying. 

No one likes spammy, surprising behavior in their social networks ... including Facebook

I do a good amount of Facebook API development, so I'm fairly familiar with it's capabilities and their policies. 

Here's a couple of snippets from their platform policies

  • Don't mislead, confuse, defraud, or surprise users
  • Don't spam - encourage authentic communications
  • If a user grants you a publishing permission, actions you take on the user's behalf must be expected by the user and consistent with the user's actions within your app.

That last one is important if SocialCam is indeed using their camera app's permissions to also auto-post about videos I watched through Facebook.com. Those 2 things are completely different and there's no way permitting the former should imply the latter. 

You can see on Hacker News here and here that I'm not the only one who feels this way.

 

Adobe vs. Panic: A Tale of Lost Serial Numbers

Panic

Adobe

How to Make a Beautiful Sign In Page for Your Rails (or other) App

Being a big photography guy, I've recently become a fan of web apps that use edge-to-edge photographs in the background of their login page. One of my favorites is over at Jetsetter

Screen_shot_2011-09-13_at_11

This look is also becoming popular on "coming soon" pages for yet-to-launch web apps. Launchrock seems to like this look as well: 

Screen_shot_2011-09-13_at_11

After launching my MVP of Cilantro a couple weeks ago, one of my many to-dos was "Make the login page less ugly". I thought I'd try my hand at implementing such a page. Below is a quick rundown of how I did it. First, here's what I came up with for the Cilantro login page

Screen_shot_2011-09-13_at_12

Choosing an Image

For Cilantro, I've been using a handful of images I purchased from iStockPhoto. I'd simply suggest using an image with a narrow depth of field (not everything in focus) and something interesting around the edges (since the sign in box will be centered). 

In terms of size, I like my backgrounds to be around 1400 pixels wide. 

CSS3's background-size Property

When doing something similar to this in the past, I always had to use jQuery/javascript to fill a container and proportionally scale the image when the browser window is resized. 

Now, CSS3 includes a background-size property which allows you to adjust the size of the background image. Even better, the syntax has a couple of special values: container and cover. The cover value happens to be the one we care about: it stretches the background image so that both edges are larger than the background area (in essencse, filling the container). 

Natually, this property isn't supported on every browser your app will encounter. Namely, IE8 and below, Firefox 3.0 & 3.5, and Safari 4.

Modernizr to the Rescue

If you've never used Modernizr, you're missing out–and this is a simple way to learn. Modernizr is a javascript library that does "feature detection" on your web page(s). Among other things, Modernizr detects CSS3 capabilities, including our new friend background-size

It works like this: 

  1. Add the Modernizr script to your page (I put it in the head)
  2. Modernizr will detect various CSS features each visiting browser supports
  3. It will then add classes to the <html> element of your page
  4. You can then write CSS that will only apply to elements under html.somefeature, allowing you to gracefully support older browsers.

In our case, Modernizr adds a backgroundsize class (all one word) to the html element when the browser supports it. 

Screen_shot_2011-09-19_at_12

CSS

Now we can write some simple CSS to make our page have a pretty, edge-to-edge background at any window size: 

So, you can see our background image with the background-size property will only be applied to the correct browsers. 

If we wanted, we could include another CSS block that would style older browsers–say, with some sort of basic tiled background. 

Centered Sign-in Box

Our sign-in box is centered using some absolute positioning, fixed width and height, and some negative margins. Take a look at the source of the Cilantro login page (I left the styles inline for you).

A Note for Rails Apps

If you're using Rails like me, you're likely using Devise for authentication. Because I only wanted this look for my sign-in page, I had to create a unique layout file and use subclass Devise's session controller. Here are (roughly) the steps you need to take: 

  1. Created a SessionsController that is a subclass of Devise::SessionsController
  2. Create a layout file just for sessions (sessions.html.erb)
  3. Tell the SessionsController to use the new sessions layout file
  4. Adjust the devise_for line in your routes.rb file to use SessionsController

Well, I hope that's helpful for someone. Give it a try and get creative with your login page's background, sign-in box, etc. 

 

 

 

 

Normal People will Never Understand Domain Names, Name Servers, or DNS

For about 7 years I've been doing startups that help small businesses build and manage web sites. This includes my newest venture aimed at restaurants. It's fun, challenging, and (usually) profitable. 

After fielding some support emails from a few of Cilantro's first users late last night, I've come to a conclusion: Normal people (i.e. not geeks) will never understand domain names, name servers, DNS, or the like. 

Why do I say this? Well, because over at BIG Folio and APhotoFolio, "going live" has been–by a wide margin–the most frequent support issue since we started years ago. And what was the first request I had over at Cilantro? You guessed it–"make it live!"

I suppose the issue could be boiled down to a combination of: 
  • A domain/DNS system that probably wasn't designed by or for non-technical people
  • People usually use a different company for their website than their domain registration
  • The largest domain registrar (GoDaddy) having a very difficult to use control panel
  • Website tools/designers that have different preferences for their end users (some prefer name servers, some CNAME records, some A RECORDS, etc.)
  • Website tools/hosts (myself included) with poor assumptions and poor documentation
For example, we have name servers and handle DNS records for people (but we don't do registration). Wordpress.com will registar a domain or give you instructionson using their name servers. Tumblr just tells you to create an A RECORD to an IP address. Weebly offers domain registration or recommends an A RECORD. SquareSpace (which I think has the best documentation and tools) requires a CNAME record. You get the idea. 

Oh, and I didn't even mention email setup and MX records. I would be money that all the companies above get support requests for email as well (I know we do). 

What's my conclusion? I don't know–other than this is a headache for both small business owners and the companies that provide them website services. Maybe that means there's a need here (domain registration and automatic DNS setup for the most common website tools?). It definitely means anyone providing a web service that allows custom domains (starting with me) needs to put serious thought into their experience and documentation. 

 

I'm Your First Customer: Fraud Detection as a Service for Payment Aggregators

Want to build a startup? Do this and I'll be your first customer. 

Watch this Founder Stories clip with Chris Dixon and the founders of Eventbrite.

 

We deal with the same thing here at our small, niche service for professional photographers. We are what's known as a third party payment aggregator. Meaning, we process credit cards on behalf of photographers, take a transaction fee, then transfer the money to the photographer via ACH. 

From what I can tell, TPPA-type web startups are growing like crazy. We see the big ones like Square, AirBnB, Eventbrite, etc. in the news. But I also get emails from small, niche ones often (asking for advice). 

Of course, the Eventbrites of the world can afford to put a team of engineers on this because they're processing hundred of millions of dollars a year and/or are kneck-deep in venture capital money. The niche players and the bootstrappers? Not so much. We count our employees on one hand and our revenues are in the low 7 figures. 

Nonetheless, we've lost a few thousand dollars in the last year due to chargebacks. So, while I can't afford a full-time engineer, I'd be more than willing to pay for a service that could alert me before I pay out money to Mr. Shady. 

How the fraud happens

Basically, (a) some guy/gal sets up a store/account with a TPPA service like ours. They then (b) create some fake events/products/invoices and (c) run stolen credit cards through the system (I have no idea where they get the cards from). Then, we (d) ACH the money to them via an automated job that runs nightly. 

Sometimes we're lucky enough to catch the transactions before disbursing the money. Usually not though. 

Oh, and in case you're thinking "hey, this is a serious crime! Since you have the thief's banking (ACH) information, surely, you can get the banks to cooperate and catch this person," I laugh at you. 

What I want

In theory, what I want isn't that difficult. We have an automated job that transfers money to our users nightly. Ideally, I'd like to: 

  • Interface with your web service for any disbursement over (say) $250
  • Pass you names, addresses, dates, amount owed, and individual transaction amounts, IPs, and (if allowed) the user's bank name or routing number 
  • You come back with a "score", letting me know (say, on a scale of 1 to 100) how legitimate this user/disbursement appears to be
  • I'll decide what to do with the score. For example, I would simply hold disbursements below a certain score for manual review. 

What I'll pay

I'd pay $100 a month for this service, without hesitation. Probably more. 

Just When I Was Ready to Give AirBnB a Try

I think AirBnB has a ton of potential and a great team. People in the startup/VC world love them too–and for good reason. They've also got one of the best executed iOS apps I've ever used.

That being said, I've always been a little wary of their ability to grow once cities and states start losing tax revenue because of them

I've also never attempted to use the service personally–until this week. Now, I'm not sure I'll try again. 

I was planning on taking my 2 youngest daughters to [REDACTED] this weekend while my wife hosts a baby shower at our house. I found a nice place there at a good rate. The host said it was available and asked me to PayPal or wire her a $50 deposit on top of the booking fee (I have no idea if this is standard or allowed on AirBnB). The host also mentioned that my AirBnB profile was "hidden"–but, as best I can tell, there's no such setting in AirBnB. 

After working out details with the host on Tuesday, I spent most of Wednesday and today working and getting my taxes done (and watching some opening day baseball). I hadn't yet booked the place on AirBnB–but I still planned to (today or Friday). Apparently, that wasn't soon enough for this potential host. Here's the AirBnB message thread (with names removed):

I get that AirBnB wants to be the "eBay of spaces"–but using eBay doesn't involve me and my kids sleeping in a potentially unstable person's house. 

Do shady people use eBay? Sure. Could this be an isolated incident? I hope so. This incident simply left a bad taste in my mouth and it will be a while before I attempt to use AirBnB again. 

UPDATE (3pm)

This potential host wont quit. Additional comments so far (I've decided to contact AirBnB and not reply): 

The "Good luck with that" line is in reference to one of my (rather successful) companies which I'm assuming they found via Google or Facebook. 

UPDATE 2 (4:22pm)

Less than 2 hours after submitting a ticket to AirBnB, one of their staff members called me on the phone. That alone is quite impressive and shows that they care about these issues.

She gave me some good tips (which most of you have already mentioned): (1) use people with good review, (2) use people with high response rates, etc.

 

Startup Idea: A Modern Hosting Control Panel that Doesn't Suck

Need a startup idea? Look no further. Not only do I have one, but (a) I can guarantee it causes pain and (b) I'll be your first customer. I want a modern, simple web site/app hosting control panel that doesn't suck

Let me break that down for you:
  • Modern: can easily handle Apache or Nginx virtual hosts. Virtual hosts can be configured for LAMP apps (Wordpress) or Rails/Sinatra apps via passenger. Throw in additional cloud or node.js features if it makes you feel good. 
  • Simple: I don't want additional features like email accounts, client accounts, reseller accounts, DNS, theming, etc. Just a simple way to spin up hosts and a nice API. 
  • Doesn't suck: Not a huge resource hog. Doesn't completely muck up server internals or use wacky paths. Has a nice, clean UI without floppy disk icons!
If you think this is a solved problem, it's not. I've used them all–Plesk, Webmin, cPanel, etc. They're all bloated, slow, and downright painful. We mainly use Plesk here at BIG Folio but I still can't stand it. Heck, I even heard from a source that Plesk drives admins and engineers at Rackspace to the brink of quitting. 

If you think this is a dying segment, I don't agree. I know cloud-based apps and storage are where it's at. But (a) Wordpress installations don't seem to be slowing down and (b) there's no reason what I'm asking for couldn't also work on cloud instances or use S3 for storage (at least I don't think there is). My own company is growing and I don't foresee a time when we won't need a hosting control panel. Heck, something like this could open up additional opportunities–just like there are dedicated Wordpress hosting companies, people could start hosting other open-source Rails apps such as Redmine or Fat Free CRM for a monthly fee. 

Ok, get started. Tell me who to make the check out to. 

Quick and dirty way to get your Rails users into a MailChimp List

You started using MailChimp recently, but you've got existing users in your Rails app (via devise, clearance, etc.). Here's a quick and dirty way to add your users to a MailChimp list. 

First, make sure to install the hominid gem and get your MailChimp API key. 

Then, fire up the console of your Rails app and ... 

Of course, to keep new users flowing into the list, you'll want to actually do that in a model callback. 

Choosing a CMBB Stack for My Startup (Corporate, Merchant, Billing, Banking)

EDIT: Before the ink was dry on this post I made some changes. After some research I decided to stick with BrainTree as my gateway/merchant provider–mainly because of their great service and data portability. This choice also forced me to change my billing system from Chargify to Recurly as Chargify doesn't yet support BrainTree's latest software version. 

So, I recently decided to pursue some SaaS ideas on the side this year. Since they are completely outside what I'm doing at BIG Folio, I needed my own corporation and new accounts for all the financial stuff. I'm calling it my CMBB stack–feel free to suggest an acronym that rolls off the tongue a little better. 

The great thing is, these days you can get almost all this done online with just a few hours of work. Here's what I did as well as some of the other options available. 
Corporate Structure

Most online businesses will be choosing between an LLC, an S Corporation, or a C Corporation (maybe a sole proprietorship too). I wont get too deep into this discussion because, frankly, I'm not an expert. You can find some good discussions on Hacker News here and here. BizFilings also has a handy LLC vs S-Corp breakdown here.
What I did: I choose an LLC (California based) because I'm already part-owner of another LLC and thus familiar with the tax process. Plus, I have no desire to deal with shares, officers, or investors. I used MyCorporation.com to file my LLC as they currently have some discounts available. All told, I spent about $400 with them to get the LLC filed. Most of that was express shipping fees and choosing the rush option for California (because I didn't want to wait months). As far as turnaround time goes, I filed on July 22 and my LLC was visible on the Secretary of State's search site on August 4.
Other options: If you're not sure which form your company should take, pay a lawyer to tell you. If you can't afford one, check the links above and make your best guess. There are plenty of options for filing your corporate entity online besides MyCorporation. I've heard good things about BizFilings
Merchant Account
If you're going to charge for your online service or sell products, you'll need a merchant account and payment gateway (unless you go the PayPal route). It can be a bit confusing when you try and understand who does what, but usually you can get both a merchant account and a gateway from a single service. 
What to look for: Make sure you're getting a decent rate and be sure of all the monthly fees. Expect somewhere between 2 and 2.5% per transaction plus an additional $20 to $75 per month in gateway and other fees. Besides fees, make sure the merchant/gateway option you choose works with the billing service you plan to use (see below) and make sure you can export your data should you move on later.
What I did: I got a merchant/gateway account from BrainTree Millenium Bankcard. I believe they are an affiliate of PowerPay and Authorize.net who will be providing the actual merchant account and gateway. My contact there was easy to work with and the fees were very competitive. 
Other options: Also check out Inspire Commerce. TransFS lets you actually compare different providers. 
A note about third-party payment aggregation: we do third-party payment aggregation at NextProof and I get emails from Hacker News users every month or so on how we do this. BrainTree allowed us to do this but our account had to be underwritten by a different company and at a slightly higher rate. Plus, this was 2+ years ago. What I've heard now is that few (or none) merchants are allowing TPPA. From what I hear, BrainTree is approving it on a case-by-case basis. 

Billing Services

It's a great time to build web-based subscription software because a handful of great recurring billing providers have emerged to make the process very painless. 
What to look for: I think it boils down to price and APIs. Most charge a monthly fee based on the number of subscriptions or transactions. Depending on the language/framework you're using, you might find one service has better APIs, libraries or sample code. 
What I did: I went with Recurly Chargify mainly because I'm using Rails and there's a decent gem available. Plus, they were very helpful when I had some questions. 
Other options: also check out CheddarGetter, Recurly, and Spreedly. If you're building a Rails app, also check out the Software as a Service Rails Kit. It has subscription billing built in along with some other cool features. 
Banking

You're stilling going to need a good ole fashioned business bank account to deposit your money in and pay your bills. 

Here's the catch: you need your bank account before you get your merchant account (they need the info) and you need your corporate paperwork and EIN number before you get your bank account. 
What to look for: maybe I'm wrong but I've come to the conclusion that bank accounts are just commodities and banks are either okay or terrible. Look for one with decent online banking, clear fees and no limits on electronic transfers (at BIG Folio we once got hit with some ridiculous fees because our account had a limit of 50 transfers per month). 
What I did: I got a business account at Chase (I affectionately refer to them as "ChaMu" since they gobbled up Washington Mutual). I already have my personal accounts there so I'm familiar with their online banking. Plus, I'm looking forward to using InDinero (a YC company) and Chase is one of the 8 banks they support at this time. 
Other options: you probably don't need my help finding banking options. 
Hope the above is helpful to some. If I missed any good options, leave a comment. 

Setting the Content-Type of OGV Files Stored on S3

I just launched BIG Folio TV this week. It's powered by Toto and runs on Heroku, which is quite awesome. Yesterday I ran into a problem with my video files. The site is HTML5 and uses only the <video> tag to display videos. Despite offering multiple versions of the file, FireFox still would not play my .ogv file. Initially, I thought it was a bad transcoding job (I used ffmpeg2theora), then I found this post on StackOverflow

Apparently, it was a content-type problem. But I'm serving the files from S3, not an apache web server. Transmit v3 doesn't allow me to change this when I upload (I'm not sure if Transmit 4 does). Ruby and aws-s3 to the rescue. I fired up IRB and this did the trick:

All good now. The videos all play great on Chrome, Safari, FF, and the iPad. Still not playing on the iPhone–I think I need to add another version.