Things about Web Images I Just Learned

 Comments
Bookmark and Share
I thought I knew everything you needed to know about Web images.  But, of course, I didn't. Here's what I just learned when launching the new icon bar on the homepage of Duck Duck Go. We wanted the it to function sort of like the Apple dashboard (and on the Web like Schmedley's bottom bar).

  • img{-ms-interpolation-mode:bicubic}. Short version: if you resize images dynamically, they will look bad on IE unless you put this in your CSS.

    Longer version:  We ended up using the YUI Animation Library to do the animation.  But no matter how we did it using 1 image, it always looked terrible on IE.  Even if we used an image exactly as big as the big size, and did the smaller image exactly half of the bigger size (which should be easy to resize), it still looked bad.

    So then we tried using two images, which sort-of worked, but had its own issues.  Sometimes it would slow down the animation. It used almost double the image size and requests (a big no-no), and the actual resizing still looked bad (as opposed to the endpoints)!

    This was unacceptable, so I decided to dig deeper on the Web about this issue.  It turns out modern browsers use Bicubic interpolation to resize images and make them look good in the process. For whatever reason, IE7+ has decided to turn it off by default. I'm guessing this is because it takes some processing power, but it renders resized images looking terrible so I personally don't think this is a good trade off.  Anyway, if you add that above CSS to your page, IE7+ will use this method and your images will look good. I suppose I never hit this before because usually you shouldn't be resizing images dynamically. But there are cases where you want to do it...

    Unfortunately, it still doesn't work for IE6, on which you need to use the good ol' AlphaImageLoader (sizingMethod='scale') if you want to support that browser.

  • Photoshop/Illustrator's 'Save for Web...' does not fully optimize. Perhaps my versions of Photoshop and Illustrator are too old, but I suspect this is still the case with the newer versions. I pretty much used these blind, assuming they were optimizing correctly. And don't get me wrong, it does a decent job, but its just not the best. Instead, run your images through Yahoo!'s smush.it site.

  • If you really do not need PNG-24, use PNG-8. PNG-8 is really a better GIF. But it is limited in color palette and transparency with respect to PNG-24. That being said, often you don't need the difference, especially for things like icons. When you can, use PNG-8 because you'll get much smaller file sizes.

    That being said, you might think you need PNG-24 when you really don't. I did. I had these icons made that had full transparency. I knew, however, they were going to be on a white background, so I really didn't need all the transparency. Yet when I tried to save it as PNG-8, it just looked bad. The colors were all off. So it made me think that I needed PNG-24, but in reality it was Photoshop's optimization stuff that was being poor. In their defense, I wasn't helping them out by setting the white background ahead of time, which leads me to:

  • If you want to save a PNG-24 image as PNG-8, put in the background first. Once I made a white background layer, Photoshop then did a great job of saving it as PNG-8. And in fact, I could reduced the file size even more by using even less than 256 colors. Of course, I still had to run it through smush.it.

  • CSS sprites may reduce your page load (and image size further). CSS sprites are a way to group your images into one big file and then split them into separate files via CSS. There is a useful Web site to help you make them at csssprites.com. I couldn't figure out how to use it with my resizing requirements, but in the general case it should be at least tried, especially for icons where the color palette for your icons are similar. You get a win in image size. But you get a bigger win in reducing HTTP requests.

  • Custom icons are not that expensive. We got $40 custom icons and $10 recolored icons from iconshock.com. We talked to other icon designer firms as well, and prices were similar. Full disclosure: we created more than 3 icons (7), so we got a bit of a bulk discount. I did have a bad experience with iconeden.com, however. So I'd stay away from them.
For more image optimization tips, check out Yahoo!'s presentation.

Update: additional comments can be found here.

A Harsh CSS Environment for Testing Widgets

 Comments
Bookmark and Share
Embedded widgets can face harsh CSS environments, but usually not this harsh:

#harsh * {
border: thin dotted #00FF00 !important;
display: block !important;
margin: 20 !important;
outline: 1px dotted red !important;
padding: 20 !important;

background: #00ff00 !important;
cursor: move !important;

clear: both !important;
float: left !important;
height: 0 !important;
max-height: 0 !important;
max-width: 0 !important;
min-height: 100px !important;
min-width: 100px !important;
visibility: hidden !important;
width: 0 !important;

bottom: 100px !important;
clip: rect(100px, 50px, 100px, 50px) !important;
left: 100px !important;
overflow: visible !important;
position: absolute !important;
right: 100px !important;
top: 100px !important;
vertical-align: sub !important;
z-index: 100 !important;

color: red !important;
direction: rtl !important;
font: oblique small-caps 900 20px/50px arial !important;
font-size-adjust: .01 !important;
font-stretch: ultra-expanded !important;
letter-spacing: 20px !important;
list-style: decimal inside !important;
text-align: right !important;
text-decoration: blink !important;
text-indent: 100px !important;
text-shadow: #000 30px !important;
text-transform: uppercase !important;
unicode-bidi: embed;
white-space: pre !important;
word-spacing: 20px !important;

border-collapse: separate !important;
border-spacing: 30px !important;
caption-side: bottom !important;
empty-cells: show !important;
table-layout: fixed !important;
}

If your widget looks OK inside <div id="harsh"></div>, then it will probably look OK anywhere.  I made this HTML example (view source) for easy testing.

Why does this matter? Suppose a site has a black background and white text, but your widget has a white background but no text color set--none of your text would show.

To deal with a harsh environment, you need some armor:

<style type="text/css">
#armor, #armor * {
border: none !important;
display: block !important;
margin: 0 !important;
outline: none !important;
padding: 0 !important;

background: #fff !important;
cursor: auto !important;

clear: none !important;
float: none !important;
height: auto !important;
max-height: none !important;
max-width: none !important;
min-height: 0 !important;
min-width: 0 !important;
visibility: visible !important;
width: auto !important;

bottom: auto !important;
clip: auto !important;
left: auto !important;
overflow: auto !important;
position: relative !important;
right: auto !important;
top: auto !important;
vertical-align: top !important;
z-index: 1 !important;

color: #000 !important;
direction: ltr !important;
font: normal normal normal 11px/14px tahoma,sans-serif !important;
font-size-adjust: none !important;
font-stretch: normal !important;
letter-spacing: normal !important;
list-style: none !important;
text-align: left !important;
text-decoration: none !important;
text-indent: 0 !important;
text-shadow: none !important;
text-transform: none !important;
unicode-bidi: normal;
white-space: normal !important;
word-spacing: normal !important;

border-collapse: collapse !important;
border-spacing: 0 !important;
caption-side: left !important;
empty-cells: hide !important;
table-layout: auto !important;
}

If you wrap your widget in <div id="armor"></div>, it should work OK. I made another HTML example (view source) for testing this armor.

I tested #armor cross browser using my test systems and browsershots.org. Of course, there are most likely still bugs, so please tell me about them!

To develop #harsh, I used the w3schools CSS Reference, which you can also use to figure out if you want to change the properties in #armor, or apply more thereafter. 

To apply additional styling after #armor, use ids instead of classes, e.g. id=""/# and not class=""/. because a particularly harsh use of #id * will override your classes. Of course, if you aren't that paranoid, you could back off the * in #armor and use classes instead.

You could also just use inline styling, i.e. style="". There may also be a better way to do it that I just haven't thought of yet. If you know of one, do tell...

Introducing the Duck Duck Go Blog

 Comments
Bookmark and Share
Today I started the official blog for Duck Duck Go, aptly named Duck Duck Blog.  The inaugural post is What People Search First at Duck Duck Go.  The general blog feed is here.

The idea for the new blog is to give you a unique view on search from inside a search engine.  In particular, I hope the posts will be on things that you won't find elsewhere and will have a propensity towards data and technical stuff. So add it your blog reader!

I'm still going to post about Duck Duck Go here (on this blog), but will stick to non-search specific things like Perl code and CSS/JS hacks. 

Duck Duck Go on CNN Home Page!

 Comments
Bookmark and Share
Duck Duck Go is on the top of the CNN home page!  Well, our logo is :). Sadly, there is no link to us in the story, but I'm not complaining at all.  Seriously.  

I couldn't be more happy and proud.None of my projects have ever been on CNN, let alone in the lead featured article.I'm even more proud because the other 5 companies pictured all have ridiculous funding. While they have over $150M in combined funding, we are bootstrapped.

Believe it or not, even without the link, we're still getting a decent amount of traffic though. t's funny--the Go of Duck Duck Go is not in the picture so we're getting a lot of requests from people searching "duck duck" in Google and CNN.

Anyway here's the story link for when it is off the home page. And here's a snapshot that documents this was real!

Really Disappointed with MIT Cutting Sports

 Comments
Bookmark and Share
Today I am really really disappointed in MIT, my alma mater.  Yesterday they officially announced that they are cutting eight varsity sports.  No longer will we be able to say we offer "the most varsity sports of any university."

The stupidest part about it is the reason: "the severity of the economic downturn." Cutting these sports will apparently save $485,000.  Compare that to MIT's endowment of $10B (yes, that is billion). And MIT's endowment actually rose in fiscal year 2008 by 3.2%, or $88M!

So let me get this straight. MIT has $10B and recently made $88M on it, and is cutting something dear to the MIT community that costs a meager $485K. That is pure insanity. What is the endowment for if not to protect things in uncertain times that people care deeply about?  Adding insult to injury, it was only a few years ago that MIT spent over $50M on a new athletic center. So you spend all that money and then cut sports at a small fraction of that cost?

Not only that, look at what they are cutting. Among the sports is MIT's pistol team, which has historically been one of the best performing MIT sports. In 2007, they won the national championship, beating out Army and Navy! And that is not the first time. Yes, you read that right--Army and Navy...

To some, perhaps most, this may not seem like a big deal.  MIT students don't play sports, right? Wrong! MIT has long prided itself with it's sports offerings and participation. It is also used as a recruiting tool. I've been interviewing students for admission for several years now, and it pretty much comes up in every interview.  That stat about our breadth of sports quickly puts to rest any doubts that MIT students do nothing more than academics. Believe it or not, this is paramount on most prospective students' minds.

I guess the bottom line is I just don't get it. It is a trivial amount of money compared to the MIT endowment. I can understand that bureaucracy may have created this problem. That is, the administration asks every department to cut 15%, and this is what the athletic department came up with. But then the administration should step in and revoke this short-sighted idea. 

MIT is almost a 150-year-old institution and they are managing it like a public company who are slaves to quarterly earnings. The endowment has been growing steadily for decades. Yes, this might be a bad year. But there will be good ones again soon. Just the same as you shouldn't over-spend in the good years, you shouldn't under-spend in the bad ones. MIT should take a long-term view and consistently maintain the average MIT experience and culture. Why would anyone want to donate to an institution that is managing their endowment so poorly?

How Twitter Helps Me (Specific Use Cases)

 Comments
Bookmark and Share
The recent surge in twitter press is amazing. A lot of my less technical friends and family have been asking me about it, usually with skeptical tones.  Why would you do that?  You use it--really?

At first, I too was skeptical.  It took me a while to adopt and then even longer to make regular updates.  Even now I've only made 322 of them.  

Recently I had a long discussion over email about the value of this type of technology.  The short version is, upon reflection, I've really come around to its usefulness.  So I thought I'd enumerate the use cases where I've found twitter particularly helpful, both personally and professionally.

  1. It keeps an eye out for me.  The very first day I started using twitter, I was at the right place at the wrong time.  I had showed up 8 hours early for one of our monthly hackathons.  I had twittered where I was and my friend almost immediately informed me of my mistake.

  2. It's an extension of my Facebook status.  If you use the Facebook status update feature, then you might as well use twitter too.  In fact, when I update my twitter feed, it updates my Facebook status automatically (via the Twitter Facebook app).  

    My set of twitter followers and Facebook friends has a decent amount of overlap, but by no means all.  Because they are different sites and different technologies they tend to accumulate slightly different types of associations.  In particular, it's common to get Twitter followers who you've never met.  But you also get friends who for whatever reason aren't your Facebook friends (at least not yet).  By syncing the updates you are reaching more of your friends with your personal updates.  I like that because I suck at keeping in touch on a one-to-one basis.

  3. It keeps me closer to customers.  I monitor twitter search for mentions of Duck Duck Go (my startup).  It is really interesting to see what people say "in the wild" and because of twitter's ease of use you get more (and different) commenting than you find on blogs.

  4. It allows for more (and different) customer communication.  I follow the users I find in #3 using my company's twitter feed.  I also send out updates about things going on with the site.  It turns out that this method of two-way communication generates different feedback than our other methods to connect with customers, e.g. this blog, our feedback page, Facebook, etc.  I've even gotten unsolicited bug reports!

  5. It helps me meet more people (in person).  I'm an INTJ and have historically been terrible at meeting new people.  Twitter really eases that burden for me.  As pointed out by another friend, it gives you great ice-breakers when you meet people for the first time (who you've previously connected with on Twitter). For example, I follow a lot of people in the Philly startup community, but have not yet met all of them in person.  

  6. It makes me feel more connected.  I work from home, by myself.  Twitter helps me get to a semblance of a multi-person office.

  7. It helps me spread news/links.  You need a decent amount of followers for this one.  I don't really have that many, but with the amount I do have it is enough to get benefit when spreading news and links about my company or otherwise.  Often people will re-tweet exciting news (re-send my message to their followers). 

  8. It helps me keep abreast of news/links.  Similar to #7, but from the other side, I often get news/links from people I follow.  These are usually things I would have never seen, e.g. info about other startups, local events, etc.Useful enough for you? 

How I Got Skype High Quality Video Working

 Comments
Bookmark and Share
Ever since Eli was born, we've been skyping with my parents regularly.  My parents supposedly bought a high quality webcam, but we weren't seeing them great.  And I know my built-in laptop cam wasn't up to par, so a few days ago I set out to make it all work.

Skype says this is what you need to make it work: 
I'm not sure if Skype actually checks the drivers to make sure you have one of these webcams, but my parents actually did have one and so I bought one too.  I actually bought this one, which has auto face-tracking that I figure would be good fit when Eli gets a bit older.  However, once I set it all up, neither direction was what you would call high quality. Mine was certainly better than before, but that was mainly due to the lighting adjustments in the software that came with the webcam.

Anyway, after a lot of messing around, I did get it to work as much as I think possible.  Here's how:

  1. Know that Skype "ramps up" to high quality.  This wasn't obvious to me initially and caused a lot of time wasting.  In particular, Skype apparently does a lot of internal calculations to see what it can send over time.  It starts off lower, and then slowly increases the video quality, and in turn, CPU & bandwidth used.  So just know that if you don't see it right away, give it a minute or so and see if it improves.

  2. Turn on "technical info". On windows this is under Tools->Opotions->Advanced->Advanced Settings.  Once you do this, initiate a video call and then mouse over the incoming video window.  A pop-up should appear with all sorts of debugging info that will help you diagnose what is between you and the high quality video.  I'm not sure what it all means, but I think you want to concentrate on a few things.

    First, look on the bottom where it says "problems" and then gives you some codes.  The goal is to get rid of all of these codes.  BW stands for BandWidth, and on mine it was critical, i.e. BW_Critical.  

    The next thing to look for is the video sent and video recv lines.  You want to send and receive at 640x480 at a decent frames per sec (FPS>=15).  It turns out my parents were sending at 320x240 and both of our FPS were low.

    Finally, look for Relays.  You want this to be 0.  When it is not, you do not have a direct connection with your video partner.  Instead, your connection is routed through other computers.  I did not have a direct connection, and this turned out to be causing the BW_Critical.

  3. Force 640x480.  I was sending at 640x480, but as I said, my parents were not.  Turns out while they have a decently fast computer, their processor isn't enough for Skype to trigger the attempt to send video in high quality. After a lot of searching and messing around, I found the solution.  You want to put this in your config.xml file:

    <CaptureHeight>480</CaptureHeight>
    <CaptureWidth>640</CaptureWidth>
    <Fps>30</Fps>

    On Windows XP, this file lives in Documents and Settings/Login Name/Application Data/Skype/Profile Name/. In general on Windows, you want to find your Application Data folder (on Vista I think replace Documents and Settings with Users) and then follow the same skype path.

    After I did this, my parents were sending at 640x480. It turns out their processor was fast enough, and we monitored the CPU usage via the technical call info I talked about above.  (You could also do this with the task manager.)

  4. Open the incoming port on your firewall.  Go back to Tools->Options->Advanced, but this time select Connection.  There is a port # at the top.  I opened this port on my firewall and forwarded it to that machine.  I also unchecked the box "Use port 80 and 443..." to make sure it was working. Also, if you check "Enable uPnP" you might get this port forwarding set up automatically.  Also be aware of any software firewalls you have, and to make exceptions for skype within them.  Once I did all that, Relays were now 0, i.e. we had a direct connection.

  5. Plug the webcam directly into the computer.  I was using a USB hub. Apparently the newer high quality webcams can transfer a lot of stuff and a shared USB hub can become the limiting factor. Similarly, if you have a lot of USB devices in use, even directly connected to the computer, try unconnecting some of them.  You might be being limited by your comptuer's USB bus.

  6. Check your bandwidth speed.  You can do so here.  I have a great connection due to Verizon FIOS.  My parents, less so.  Turns out, after all the above, I started sending awesome video, and it was transferring at about 500Kbits/sec!  My parents increased their quality as well, but their broadband connection caps at about 150Kbits/sec, and so that became the limiting factor.  This showed up in the technical call info problems as BW_Low.  They are now looking to upgrade their connection.  But if you notice quality does get better, but it is still sort of blurry, check your bandwidth.  You can see how much bandwidth skype is currently using by again looking at that technical call info.  Again, mine capped around 500Kbits/sec, so I suspect you should expect something similar.

Well, that's it.  It was definitely worth it.  My parents can now see Eli probably 10 times better, and soon he will be able to see them the same.

Search Engine Optimization (SEO) Tips

 Comments
Bookmark and Share
I often get asked about Search Engine Optimization (SEO) because I run a search engine.  The following is currently my best advice with regards to SEO.  Just to be clear, I'm talking about Google here (and by extension Yahoo, Live, etc.) and not Duck Duck Go (my search engine), which has different optimization parameters.

I assume you already know the basics, e.g. don't have duplicate content, have good looking URLs and page titles, etc.  If you don't know the basics, read Google's SEO Starter Guide first.

  1. External link (anchor) text is the most important factor.  Google often repeats that they use more than 200 ranking factors.  I'm not disputing that :).  I think they repeat this, however, so that people won't concentrate on the few factors that really matter more than all the others.  In my experience, external link text matters way more than anything else.  That is, the actual words in the links back to your sites and pages.  

  2. If you get link text right, link back sites' pagerank matter way less.  Usual SEO advice is to contentrate on link backs from high pagerank sources.  If you want to improve your overall rankings I think this is good general advice because pageank is logarithmic, such that a link from a higher pagerank site will have more of an effect than one from a lower pagerank site than you might otherwise think.  

    However, higher pagerank links are much harder to get than lower pagerank links.  And what is often missed is that if you can get even a few lower pageank sites to link back to you using the key phrases you want to rank for, you can rank highly on those search terms even with little or no high pagerank link backs.  

  3. Widgets are great strategies.  As a result of the above, widgets are great strategies because they help you get link-acks from a variety of sites, often on their front pages and often on multiple pages within the sites.  That is, it doesn't matter if they are all low pagerank sites because you can control the link text.  But be careful.  Google is all over so-called "widget bait."  

    If you do a widget, don't forget you need that static link in it.  That is, it can't all be JavaScript.

  4. Don't guess search term volume.  Use Google's Keyword & Trends tools.  

  5. Select terms that convert.  Ideally, don't guess here either.  Use Adwords or another PPC service to test out which terms convert best, and then try to get rankings for them.

  6. Don't bother if you can't get in the top 10.  People usually revise their search terms instead of clicking to page 2.  So if you don't think you can get in the top 10, try something else, ideally something more specific that would convert better anyway.  A good thing to do is to add one more word to the general term, so if you end up ranking well for the specific term you are helping your rankings for the more general one as well.  Then if it turns out the specific one was easy (you quickly become #1), you've already gone part way on the general one.

  7. Don't pay any for any general SEO service.  Not only do you not need to (because it isn't that hard) but you don't really know what you're getting and as a result you will risk getting blacklisted.  The worst is signing up for paid link services.  Note I'm not saying don't pay anyone for SEO, because if you need basic help, a consult from someone in the know might be helpful to, for example, tell you how to re-layout your site and to explain this post to you :).

  8. Beware of nofollow links.  Nofollow links are links with a special attribute that tell search engines to ignore them.  To check a link, view the source of that page in your Web browser and look for rel=nofollow in it.  You don't want to waste time getting links on sites that use this attribute.  The canonical examples are popular blogs and Wikipedia.  Don't waste your time submitting comments and editing Wikipedia articles with your links because it won't help you.

  9. Don't waste your time with Google Sitemaps.  Google encourages you to submit sitemaps of your sites.  In theory this seems great because you can specify site priority and refresh time.  In practice, I've done this repeatedly and seen no change in rankings.

  10. Don't ignore the long-tail. People often concentrate on getting rankings for specific keywords.  But I've been just as successful building lots of pages with unique content that end up ranking high on the most random things.  Often such pages will be the only things that come up.  

    How do you do this? First, make sure you have a static site.  Sometimes startups don't.  Second, look at all the content you can produce or have produced.  Can you combine it in interesting ways that people would find useful?  For example, at Duck Duck Go we have category pages

  11. Make as flat a site hierarchy as possible.  Pagerank seems to flow logarithmicly from a homepage to its internal pages.  So if you have pages you want ranked highly, either you need links back to them directly or have them linked directly from your homepage.  And if you take my long-tail advice and make a lot of pages, make a directory of them as flat as possible.  For example, if you have 10,000 pages, make 100 pages with 100 links and link to those 100 right off your homepage.  Ideally those 100 links would make sense, e.g. categories or alphabetical or something (and not just random).

  12. Use directories instead of subdomains.  For example, domain/blog instead of blog.domain.

  13. Less is more.  Ranking is distributed across your site, so less pages, less links on them, and less text on them will concentrate your ranking potential on what is left.

  14. Don't do anything black hat.  You will get caught, you will not pass go, etc.

Update: additional comments can be found here.

Fast and the Furious Twitter Hilarity

 Comments
Bookmark and Share
Last night I sent this tweet: "Finally watching The Fast and the Furious: Tokyo Drift."  Literally within a minute or two TokyoDriftMovie starts following me on twitter.  His bio says:

I'm looking for other people who enjoy The Fast and The Furious: Tokyo Drift Movie as much as I do, maybe that's asking too much. You at least have to enjoy it.

So does he (Rob Jones) have a bot set up that follows anyone who mentions the movie?  His profile links to an amazon store page where you can buy the movie.  Is he doing this for many movies?  If so, he takes really great pride in the details of his work--just check out his twitter stream, e.g. "I stopped keeping track after seeing Tokyo Drift 100 times..."

Duck Duck Go Architecture

 Comments
Bookmark and Share
I often get asked what Duck Duck Go "runs on."  This post basically answers that question by outlining the major moving parts that serve queries, i.e. its architecture.  I'll detail in another post what, in particular, makes it fast, i.e. tunables and other specifics.

Caveat: this architecture was designed for maximum query speed for our initial soft launch.  While also somewhat designed for eventual scalability, we don't have that much traffic yet (though we are growing at a nice clip).  So don't take this as advice like you might get at High Scalability.  It's really just for your amusement.  However, my last startup did have some scale (relatively speaking of course) so I know a bit about what I'm doing...

  1. DNS served by DNS Made Easy.  I used to serve it myself via djbdns, but DNS Made Easy is faster, makes it easier for me to deal with fail-over, and cheap.

  2. All requests come into nginx. I used to use two instances of Apache, one for dynamic requests and one for static files.  But nginx is faster, uses less memory, and is more stable.

  3. If a static file, nginx serves it directly, e.g. the home page.  It's really good at that.

  4. Otherwise, nginx checks my memcached store.  I hadn't used memcached before this, and find it a big win.

  5. If not in memcached store, nginx proxies to FastCGI processes that are running in the background.  I hadn't used FastCGI before this, as I always had used mod_perl with Apache. 

  6. The FastCGI processes are managed by daemontools (as is memcached).  At first I was worried about stability in these processes, but it hasn't proved to be an issue yet.

  7. Internally, the FastCGI scripts are written in Perl and run by the FCGI::Engine Perl module.

  8. The Perl scripts access a PostgreSQL database (when needed) to retrieve our zero-click information, among other things.

  9. The whole thing runs on FreeBSD.

  10. For fail-over and scalability purposes, I have EC2 images that replicate the above except that they run on Ubuntu (since, at the time, FreeBSD wasn't available).

  11. All of our site icons and zero-click info images are hosted on S3.

  12. We also reference some external YUI JS files.

Any questions?  

Also, I'd love any feedback on this architecture.  I'm always looking for ways to speed it up!

Update: additional comments can be found here.

Twitter: Please Charge me for Biz Tweets instead of Suspending my Account!

 Comments
Bookmark and Share

Short version: I violated twitter TOS, so my account was suspended (as it should have been).  However, I think what I was doing was worthwhile.  So what I suggest is a new, paid tweets section (akin to direct messages in functionality, but you pay to send them).  So if the receivers never wants to see them, they don't have to.  But if they do, the paid tweets are one-click away...  

***

Last night the Duck Duck Go twitter account was suspended. I was sleep deprived from the birth of my son, but yet still awake being a human baby monitor. So I quietly used the computer to pass the time (like I'm doing now!).

Lacking SSH access (hospital wifi blocks port 22 for some reason) I was essentially blocked from doing any real work. So I decided to mess around with twitter's search feature, which everyone seems to be talking about lately.

It really is cool. There were a ton of people talking about very specific things I'm really interested in, new search engines being one of them. So of course, I wanted to communicate with them.

So what did I do? Naturally, I found the relevant tweets, and replied to them. I'm still not sure if you can actually reply to a particular tweet, but I did click the reply link from each tweet's individual page. They were all tweets about checking out new search engines.

My reply said something like "@username here's another new search engine, which is live now: http://duckduckgo.com. What do you think? Yes, it's ours :)". Some people replied very quickly with feedback, so I know my tweets at least were somewhat relevant. I'm guessing others would have replied too, but I can't tell for sure because my account was suspended shortly afterwards.

So I naturally went to the twitter support page on account suspensions. It does look like I violated this term: "updates consist of duplicate or repeating links and/or text." That's exactly what I did. OK, fine. I sent an apology to them so hopefully my account will be reinstated soon.

To the bigger question though: what should I have done? Not sent the tweets of course...but is there some way to have the same effect without getting my account suspended? For example, should I have just changed up the message each time? Probably wouldn't have mattered. Sent to less people? But all those people seemed to express equal interest.

Thinking about it some more, I don't really see any way in the current twitter scheme to send tweets like this without risking suspension. And yet, there is value here (on both sides). I clearly want the right people to check out the search engine. And people who post tweets about checking out new search engines, presumably, on average, want to check out a new one!

So here's what I suggest, which I'm sure has been suggested before but I'm too lazy to find out where. (And one more nudge won't hurt anyone...):

Twitter should charge me to send tweets like these, i.e. unsolicited business related tweets. The charging part both would cut down on spam and make them money. But wait, isn't it still some form of spam? Agreed, and, as such, it both messes up the twitter user experience for those receiving them (their reply screen) and those people following our twitter stream, which is annoying.

To fix this issue, twitter should also make a new type of message (like DMs) for this stuff. Instead of 'd ' make it 'p '. Each time I make a paid tweet, charge me $0.05. And on the receiver end, put them in their own window so they don't clutter up anything else. That way only the receiver sees them, and only when they want to.

Update: additional comments can be found here.

If You're Into It

 Comments
Bookmark and Share

Thoughts on Yahoo! BOSS Monetization Announcement

 Comments
Bookmark and Share
Yesterday Yahoo! announced upcoming usage fees for its BOSS API.  The announcement has caused quite a stir on the official discussion group and elsewhere.  As the founder of a new search engine that uses BOSS, this news clearly effects me.  Here are my initial thoughts on the matter...


  1. It's likely good for me (Duck Duck Go).  General search engines should end up monetizing at $10+ CPM.  At a cost of about $1 CPM, I'd most likely make more profit in this scheme than in a revenue share, which would probably be >10%.


  2. It does feel like bait and switch.  Yahoo! says it isn't because they said monetization was always coming at some point.  And that's true.  However, the expectation from anyone I've ever talked to about it (and mine) was that it would be a revenue share.

    That's not a coincidence.  The BOSS terms previously disallowed any third party ads.  And whenever anyone asked about it, Yahoo! said its ads are currently being tested on some sites, and are coming soon.  My guess is they did try to test it with some sites and either got caught up in cross-group bureaucracy rolling it out or it didn't monetize as well as they had initially hoped (or both...).


  3. It's likely not good for a lot of services.  Developers can get screwed here on both the cost and revenue side.  I use BOSS as an add-on of sorts, and so I generally fall into the cheapest queries in their system.  But others using BOSS are doing things like grabbing the first 1000 results (or 10 results using 10 parallel queries) and then deciding which are the best x to show.  Innovative ideas like these cost a lot more in their scheme and may easily push these services' costs above the break even point.

    On the revenue side, general search may monetize relatively well, but plenty of other things don't.  Facebook gets something like $0.20 CPM.  Not everyone using BOSS is building traditional-looking search engines...


  4. It's short-sighted.  The second sentence on the BOSS Web site is still "The goal of BOSS is simple: to foster innovation in the search industry."  This new scheme is contrary to that goal.  Truly innovative search ideas may take a long time to figure out monetization that works.  And in the mean time their costs may be significantly higher than their revenue in the proposed scheme.

    Fundamentally, as pointed out on the discussion group, this pricing may be completely disconnected from how a particular site makes money, e.g. (from the linked message):

    "The amount of $$ I make from my site is not based on the number of results I request (what you are charging me for), but is instead based upon the number of ads that my users click on."


  5. Yahoo should make money on BOSS.  I don't think anyone is really disputing this goal.  Making money on BOSS would be great for the developers, guaranteeing its longevity and quality of service.


  6. Yahoo should offer revenue sharing as an alternative.  Yahoo should offer developers a choice of how they want to pay for BOSS, either this usage pricing or a revenue share from serving Yahoo! ads.


  7. Yahoo should offer both options to all developers.  People are talking about grandfathering in current BOSS developers (to what exactly, I'm not completely sure but I suppose it is rev share).  I think that would be great, but I think they should offer the rev share alternative to all developers if the true goal is innovation.  This will let truly innovative services (with questionable initial monetization) get started.  If the developers see fit, they could then switch to the usage pricing.


  8. Revenue sharing could be great for Yahoo's overall CPM.  As I said in #1, revenue might make more money in many cases anyway.  But beyond that there is potentially a more important network effect at play.  The proposed Yahoo/Google deal (that fell through) exposed Yahoo's lower CPM rates.  Part of the problem here is they don't have enough advertiser competition on their network, which is a symptom of not enough ads.  

    Yahoo claims BOSS is serving 10M queries a day, and growing steadily.  That's a lot of potential ads, which should improve Yahoo's overall CPM over time.  That effect alone, could end up making up whatever differential Yahoo currently sees between the two pricing schemes.


  9. Marginal costs are certainly way below the proposed prices.  Yes, Yahoo should make money.  And yes, their differential pricing does make sense in the context that those queries they are charging more for do probably cost them more to serve up.  But I'd guess that the marginal cost of serving those API calls are orders of magnitude less than the proposed pricing.  Think about all caching they can do...


  10. Microsoft, where are you?  I've been asking this question in a lot of contexts for years (here's one).  There is a great opportunity for Microsoft (and Ask for that matter) to jump in here at a much lower price point given the marginal costs.

Jump On It

 Comments
Bookmark and Share


And if you like that...check out these.

Old Glory Insurance

 Comments
Bookmark and Share

I'm starting a new category of posts today for TV and movie clips that I find absolutely funny.  I've wanted to edit together a long video of all these clips, and I see this as a starting point.  So without further ado...


LWP::Useragent Silent Fatal Error

 Comments
Bookmark and Share
I was just debugging my crawler again for the Parked Domains Project.  Every now and then it still dies despite appropriate eval wraps around areas that could die.

For a super weird example, try this (it's in Perl):

use LWP::UserAgent;
my $ua = new LWP::UserAgent();
my $response = '';
eval {
    local $SIG{ALRM} = sub { die "alarm\n" };
    alarm(10);
    my $request = HTTP::Request->new('GET','https://www.whatsyourriskscore.info/');
    $response = $ua->request($request);
    alarm(0);
};
print "TEST!\n";

The print statement never executes!  I'm not really sure as to why, though I traced it pretty far as is explained in the bug report I just filed.  It seems to have something to do with line 208 of LWP/Protocol/http.pm:

# Since this just writes out the header block it should almost
# always succeed to send the whole buffer in a single write all.
my $n = $socket->syswrite($req_buf, length($req_buf));

This, in turn, has something to do with this line in IO/Socket/SSL.pm:

$written = Net::SSLeay::write_partial( $ssl,$offset,$length,$$buffer );

Exactly what, I'm not sure, and am not inclined to dig deeper and find out until I hear back about my bug report.  If you have any ideas, please let me know.  Otherwise I'll put an update in the comments when I find out more.

Announcing the Duck Duck Go iPhone Application

 Comments
Bookmark and Share
V1 of the Duck Duck Go iPhone application was released late last night.  You can read more about it, see screen shots, and download it here.

In short, it's Duck Duck Go optimized for the iPhone/iPod Touch.  It has simpler (and faster!) results than you can get through other means. And it has related topics built into the interface.  There will be more to come in later versions...

A big thanks to Chris Heimark for developing this application.

Very Confused w/ Perl Net::DNS eval Wrap

 Comments
Bookmark and Share
I was just debugging my crawler for the Parked Domains Project.  Every now and then it dies when doing a DNS query. 

After some Web research, I found out there are some known issues with the perl Net::DNS module--it's parsing code can croak on various malformed DNS entries.  So I wrapped the call in an eval.  It went from

my $query = $res->query($host . '.');
to

my $query = '';
eval {
            local $SIG{ALRM} = sub { die "alarm\n" };
            alarm(10);
            $query = $res->query($host . '.');
            alarm(0);
        };

I had already defined a timeout of 10 at the top of the code, i.e.

my $res = Net::DNS::Resolver->new;
$res->tcp_timeout(10);
$res->udp_timeout(10);

Anyway, here is the weird part.  After adding this eval, my code used about 200% less CPU and my crawler speed increased significantly.  That's great and all, but I can't figure out why!

I haven't spent too much time on this yet, but I've verified the code is actually working, and that the only local die messages (from the eval) seem to be the alarm.  Any ideas?

Keswick Theatre Refund Policy Lame

 Comments
Bookmark and Share
The Keswick Theatre canceled a show I had bought tickets for.  They then sent a letter insisting that tickets be sent back to them before they will issue a refund.

I purchased my tickets over the Internet and live far away from the box office.  I shouldn't have to pay money (buy stamps) and put in significant time (mail them the tickets) just to get the proper refund to which I am entitled.

I took this up with the box office and they said mailing back the tickets is their policy despite the facts that a) the last canceled show they refunded my credit card without the tickets and b) they never disclosed this policy.  The box office acknowledged the tickets are now worthless (since there is no show) and that there is no real point for them to have them in hand, but they nevertheless refused to give me my refund.  I gave them all the information they should need to do so, including my confirmation #, credit card # & personal other details to verify my purchase, including my credit card authorization code.

This is the second show they have canceled in the 4 times I have bought tickets from them.  I not saying they are doing this on purpose, but the end result is a nice scam to keep money on canceled shows.  

Perhaps many people won't bother with their (new?) policy's intrinsic hassle (mailing back tickets), and might even throw out their notice (thinking it promotional junk mail).  And what if the tickets were never received, e.g. lost in the mail?

I just want a refund on my credit card for the amount paid.  Filing complaints with the FTC, BBB, PA AG's office and various online sites made me feel a little better though.  The irony of spending time on that (and this blog post) is not lost on me.  But I want this post and the complaints to be indexed so that people searching for Keswick will be aware of their policy and bad customer service.

FreeBSD One-liner to Group Referrers

 Comments
Bookmark and Share
A couple days ago I released two widgets, and since then I've wanted to keep an eye on installations for bug detection and vanity purposes.  Tailing the logs for this purpose was becoming cumbersome, so I whipped up this one-liner to tell me what is going on.

grep [kp].js /var/log/nginx/nginx-access.log | awk '{print $10}' | perl -pe 's/^\"http:\/\/([^\/]+).*\"$/$1/' | sort | uniq -c | sort -n

I'm posting it here to remember it and because it might be useful to you.  Here's what it does.

  1. Greps for the Web log lines desired.  In my case, I'm looking for two JS files in a nginx log.  In your case, you'll probably want to change everything but the grep.

  2. Awks out the referrer line.  In my nginx log this is the 10th field.  In your case, it might be a slightly different #.

  3. Perls out the domain.  You could skip this step if you want to count each different referring URL differently.  In my case, the widget is deployed on blogs, and so each post shows up as a different referring URL, and that creates noise, so I grouped them.

  4. Sorts the domains, so that 5 works.

  5. Uniqs the domains, i.e. groups & counts them (the -c).  

  6. Sorts the grouped domains by the count, numerically (-n).

Enjoy! 

Announcing Karma & Profiles Widgets

 Comments
Bookmark and Share
You are not your job.  You are not your online profiles.  You are not the sum of your reddit and news.yc karma.  But hey, that shouldn't stop you from linking & displaying them on your sites.

That's why I created these new Karma & Profiles widgets.  There's a live example (on my homepage): http://www.gabrielweinberg.com

Enjoy!

Turning off Logging in daemontools (djbdns' dnscache)

 Comments
Bookmark and Share
After optimizing my Web crawler for the Parked Domains Project, I started crawling so fast that the log process for my DNS server was eating up 20% of one of the CPUs (and wasting a lot of I/O as well).

I run a local dns cache using djbdns on each crawling server, which also runs all local dns queries. My dnscache is run by daemontools, and if you are familiar with this world, you already know I was using multilog for logging.

The logging for dnscache is basically useless when you are not debugging, and it is very extensive.  So it makes perfect sense why it was taking up so much CPU and I/O.  

I'm writing this post to correct the Internet.  When searching for turning off logging for dnscache or multilog, you get a lot of instructions telling you to do replace your log/run file with this:

exec setuidgid daemon multilog -*

That will free up the I/O, but only about half of the CPU utilization (at least in my case).  The problem is your system is still piping the log from the main process to multilog--multilog just isn't writing it anywhere. 

What you really want to do is stop the logging at its source.  To do so, don't mess with your log/run file at all.  Instead, change your actual run file from

exec 2>&1

to

exec 1>/dev/null 2>&1

Now nothing will go to multilog at all.  Of course, you need to restart or HUP the log and run processes 

Speeding up Perl Regular Expressions using Regexp::List

 Comments
Bookmark and Share
I spent the last 24 hours optimizing the Web crawler for the Parked Domains Project.  The previous bottleneck was obviously CPU.  After a bunch of profiling and benchmarking, I determined that a particular block of Perl regexp was causing most of the problem.

I was already compiling what I could (using /o and qr//).  I was also already trying to run things I thought would match more and faster first, as well as trying to anchor as much as possible (i.e. using /^ and $/ and just using long literal strings).  And I always use clustering (?: instead of capturing (, where appropriate.

What I didn't do, however, was mess with alternations, e.g. cat|dog|bird.  Disclaimer: there isn't a be all and end all to regexp optimizations, and what works in one situation may not work for another--it totally depends on your regexp and what you are throwing at it.  

Alternation is usually slow in Perl because the engine has to backtrack when trying each alternative.  It's much faster to give perl a character sieve up front, e.g. (?=cdb) and then factor out common prefixes and suffixes.  The problem is that when you have a ton of alternatives, doing all this is a pain and it decreases readability to almost zero.  Which is why I had avoided it to date...

Enter Regexp::List.  I've used this module before, but never as extensively and I never benchmarked it either.  It does all of this stuff automatically.  Not only did my regexp speed increase by about 5x, but my readability increased as well!  

I really didn't think that such a simple change would make such a difference.  The reason for the readability increase, btw, is that I now put all the alternatives in an array and then give that to the module, e.g.:

my @regexp = (
  'cat',
  'dog',
  'bird',
 );

use Regexp::List;
my $regexp  = Regexp::List->new;
my $qr = $regexp->set(modifiers=>'i')->list2re(@regexp);


Compete.com #s are Way Off on Low Traffic

 Comments
Bookmark and Share
Like many entrepreneurs, I check the compete.com #s for my Web sites.  I've found that they are way off for relatively low traffic sites.  Take my recently launched startup, Duck Duck Go.

The compete stats for Duck Duck Go show about 14K unique visitors in Sep. and then 3.1K in Oct.  In reality (according to awstats), the real #s were 8.3K in Sep. and then 6.2K in Oct.

To most people in the know about this stuff, I suppose this isn't a big shocker.  Me included.  However, I haven't looked at this in a while, and I was still somewhat surprised how far off it was.

Granted, it must be difficult to extrapolate on the low end.  And this case may be even more difficult.  I launched Duck Duck Go on Sep. 25 on Hacker News, and that site and Reddit generated most of the traffic in Sep. over those last few days.  

So maybe that audience has more compete toolbars installed than then the Oct. cohort or something.  I don't know.  But I do know it is way off.  It will be interesting to see if it gets better at higher traffic.  Of course to test that theory, I'd have to get some higher traffic!

I guess I am annoyed about it because I think people evaluating your company do look at these things. I know I do. For instance, it's right there front and center on our crunchbase page.  And the immediate effect I think people get from looking at that is that we kind of suck.  But if the #s were accurate, perhaps they wouldn't get that immediate first impression.

Why Doesn't Google Remove Malware Pages?

 Comments
Bookmark and Share
Google recently started pointing out pages with malware in their search results by placing "This site may harm your computer" next to such links and putting intermediary warning pages in between you and the sites.  

I'm all for reducing spam and malware from search results, but I just don't get this move.  Why not just remove the pages altogether?  In their post about it, Google explains why they can't give advance warning to webmasters:

But, look at the situation from the user's point of view. As a user, I'd be pretty annoyed if Google sent me to a site it knew was dangerous. Even a short delay would expose some users to that risk, and it doesn't seem justified. 

As any student of user behavior knows, users often ignore warnings.  By keeping the links and putting warnings next to them, you might give some users pause, but others will click right through and infect their computers.

In other words, their argument against webmaster early warnings seems to me to logically carry through to not including the links at all.  That is, it could be rewritten like this:

But, look at the situation from the user's point of view. As a user, I'd be pretty annoyed if Google sent me to a site it knew was dangerous. Even a short delay Keeping the link would expose some users to that risk, and it doesn't seem justified. 

Google must see a significant line between keeping the link with warnings and disabling it that I don't see.  Perhaps you see it their way.  If so, I'd be interested to know more...

Duck Duck Go

 Comments
Bookmark and Share
A few days ago, I finally shared what I've been working on this past year with the general public: a new general purpose search engine called Duck Duck Go.  (For more info, see this about page.)  It hasn't yet received any press, and I didn't expect any.  Who's going to be first? :)

I was pleasantly surprised, however, that the announcement did reach the top of Hacker News, and stayed there for quite a while based upon all the up-votes it received.  So first of all, I want to say thank you to all those people who up-voted the post.  

I also want to thank all the people (most of which are probably the same) who provided all sorts of useful feedback, which was my motivation for posting in the first place.  You never know what you're going to get, and a lot of the feedback was quite surprising and eye-opening to me.  There was even some humbling praise from random people like @meredydd, @bitbuckt, and @kerendg.  Thanks!

Equally surprising, was that someone submitted Duck Duck Go to reddit, and it stayed near the top of their most controversial page for as long as it could.  I really didn't expect it to be controversial at all!  Nevertheless, I can see where this community is coming from, although I think a lot of the people may have jumped to conclusions about the underlying technology.

All told, the spots on these two social news sites yielded about 8,000 unique visitors (according to awstats).  Needless to say, I am grateful so many people were able to interact with the site this quickly.  I'm pretty certain that these tech-savvy people are not the target market, at least for the site in its current incarnation.  Though, in any case, I am again very thankful for all the insightful feedback.

I'm also pretty sure the traffic will drop back to close to zero tomorrow.  So with all that excitement out of the way, its now time to get back to work!  After all, tis is only the very beginning...

Why is Google Discontiuing my Favorite Google Product?

 Comments
Bookmark and Share
Google Browser Sync was my favorite Google product.  It syncs browser data between your computers.  In my case, I use it to move between my main Desktop and laptop seamlessly.  My bookmarks, passwords, history, and even my most recently opened tabs were just right there.

I've used online bookmark services in the past all the way back to backflip (remember them?), but Google Browser Sync really took it to a new level for me.  It syncs much more than bookmarks and even more importantly I didn't have to go anywhere--it just worked.  And it worked fast and well.

I recently delayed upgrading to FireFox 3 because it kept saying that Google Browser Sync wasn't updated for it yet.  So I finally searched for why, and found this post from Google saying they are discontinuing my favorite Google product!

Yes, I get there are alternatives.  Yes, I get Google is a private company and can do whatever they want.  Yes, they are releasing code.  But I still just don't get it.  Why?  Why, Google, why?

How much resources does it really take to continue supporting Google Browser Sync?  Why does Mozilla think this is a huge opportunity and you don't?  And even if you don't think it is *as huge*, you can't make a bet on it with one FTE or even a partial FTE out of your 19K+ employees?  What about just to enable its use for FireFox 3?

And how much of a chance did you really give it anyway?  I didn't notice any real promotion, and everyone I've explained it to (yes, non-tech people too) love it, just like me.  Is there anything I can do to change your mind?

Lame! (cut from South Park's AWESOM-O)

Hacker WatrCoolr

 Comments
Bookmark and Share
After encouraging feedback about WatrCoolr on Hacker News and Proggit, I created Hacker WatrCoolr, which is a hacker oriented version of the original site.

What does that mean?  A lot of little tweaks to make the site more amenable to hackers.  And one big change: the general interest feeds are replaced with hacker interest feeds on Hacker WatrCoolr.  Here are the current ones:
  • Hacker News of course (stories that reach the top)
  • Techmeme (stories that reach the top)
  • RSSmeme, English 12 hours (stories that reach the top)
  • reddit, programming (stories that reach the top)
  • Digg popular: software, programming, design, tech news & gadgets, aggregated
  • Slashdot: developers, books, ask, bsd & it, aggregated
  • Yahoo! Technology News Most Emailed (stories that reach the top)
  • del.icio.us popular: programming, webdesign, startups, design, tools, software, web2.0, css, reference & development, aggregated
  • ReadBurner (stories that reach the top)
(And no xkcd.)

These feeds are subject to change based on their continued usefulness and your feedback.  I've been tweaking them for a week or so (as you may guess from reading them).

The Dumbest Thing I've Heard Warren Buffett Say

 Comments
Bookmark and Share
Everybody says dumb things, and I highly respect Warren Buffett's opinion (how could you not?), but I was astounded when I read this Forbes article yesterday.  The article summarizes highlights from Buffett's latest annual shareholder letter.  Not off-hand comments mind you...this was apparently from his annual letter--his ivory tower!

Here's the real downer. You're unlikely to make anything like 5.3% for the next 92 years. Swallow hard and read on. To achieve 5.3% this century would mean a Dow climbing from roughly 13,000 today to (gulp!) 2 million. As Warren opines: "We are now eight years into this century, and we have racked up less than 2,000 of the 1,988,000 Dow points the market needed to travel in this hundred years to equal the 5.3% of the last." Don't expect 5.3% in the 21st century. That's the bottom line.
I was so incredulous that I went straight to the source.  The following is from page 19 in the 2007 letter.

Let's revisit some data I mentioned two years ago: During the 20th Century, the Dow advanced from 66 to 11,497. This gain, though it appears huge, shrinks to 5.3% when compounded annually...Think now about this century. For investors to merely match that 5.3% market-value gain, the Dow - recently below 13,000 - would need to close at about 2,000,000 on December 31, 2099. We are now eight years into this century, and we have racked up less than 2,000 of the 1,988,000 Dow points the market needed to travel in this hundred years to equal the 5.3% of the last.

It's amusing that commentators regularly hyperventilate at the prospect of the Dow crossing an even number of thousands, such as 14,000 or 15,000. If they keep reacting that way, a 5.3% annual gain for the century will mean they experience at least 1,986 seizures during the next 92 years. While anything is possible, does anyone really believe this is the most likely outcome?


I should mention that people who expect to earn 10% annually from equities during this century - envisioning that 2% of that will come from dividends and 8% from price appreciation - are implicitly forecasting a level of about 24,000,000 on the Dow by 2100. If your adviser talks to you about double digit returns from equities, explain this math to him - not that it will faze him. Many helpers are apparently direct descendants of the queen in Alice in Wonderland, who said: "Why, sometimes I've believed as many as six impossible things before breakfast." Beware the glib helper who fills your head with fantasies while he fills his pockets with fees.
Now there may be reasons not to expect similar returns in this century as compared to the last, but this is certainly not one of them.  I think this is a completely nonsensical (or at best a circular) argument.  Let's parse it.

The argument seems to go like this:
  1. Suppose we had similar 5.3% price appreciation in this century like the last.
  2. Then the Dow would have to close at 2M by end century.
  3. This number is too high to believe.
  4. Therefore, there can not be 5.3% price appreciation in this century.
  5. And if you believe in even higher returns, the 2M is even higher, so your belief is even crazier.
Yet, he opens the whole argument with this: "During the 20th Century, the Dow advanced from 66 to 11,497. This gain, though it appears huge, shrinks to 5.3% when compounded annually."

Now fast forward to 2107.  Buffett's descendant writes "During the 21th Century, the Dow advanced from 11,497 to 2,000,000. This gain, though it appears huge, shrinks to 5.3% when compounded annually."

Don't you think that 11,497 seemed as crazy to the people in 1900 who were looking at a 66 point Dow as a 2M point Dow now seems to us?  You should because it is the same % growth!  The absolute #s are meaningless, and if people have a problem with the index # getting too high, they can reset it.  Problem solved.

This is not a discussion about whether we are actually in for similar, higher, or lower returns.  Let's leave that for another day.  This is just to say that this argument for lower returns is ridiculous!

Lame! (cut from South Park's AWESOM-O)

Update: additional comments can be found here.

There Is No One Right Way to Start a Startup

 Comments
Bookmark and Share
The current debate on Hacker News seems a little too black and white to me.  In my opinion, there is no right way to start a startup (or a business).  How you should start your startup depends on your definition of startup success.  In particular, I believe you should:

  1. Define what startup success means to you right now.
  2. Make decisions that have the highest probability of achieving that success.
  3. Every so often, GOTO 1.
Different people will have different definitions of startup success depending on a number of highly personal attributes, including current monetary wealth, desired monetary wealth, desired lifestyle, what one wants to work on, how much one wants to manage people, how much one wants to impact the world, etc, etc.

Consider the following (knowingly grossly simplified) personal situations:
  • An independently wealthy person doing what they love with an indefinite (5Y+) time horizon.
  • Someone at a high salaried consulting job who wants to quit to start a startup, but not change his/her lifestyle.
  • Someone living in a developing country who just wants enough money to not work.
  • Someone who wants to quit their job to do a startup, but has a family and so needs $x/month relatively soon to do so.
I posit that these people will (probably) have vastly different definitions of startup success, and thus should be starting their startups in different manners. 

A poll I created the other day I believe exemplifies this point.  I was surprised how many people would sell their startup for under $100K (the highest answer).  Clearly this poll has issues--for one, it would be better statistically if it were worded slightly differently and then given to startup founders right when they are starting out.  But I think the core exemplification still shines through.  If your monetary end goal is $5M vs. $100K, you should probably be doing things a bit differently.

Btw, this comment inspired me to write this post...so thanks for that hugh.

About

Gabriel Weinberg is a serial Internet entrepreneur based out of Valley Forge, PA. He is currently the Founder and CEO of Duck Duck Go, a new search engine.

Suggestion Box

Online Karma

Online Profiles