March 2011 Archives

DuckDuckGo Twitter homepages

 

kanye.jpg

DuckDuckGo now has Twitter homepages, which allow you to use any twitter user or list to enhance your search homepage.

We automatically bring in the Twitter background of the featured user. The picture on the right is the homepage using Kanye West's twitter

It's a fun way to get some personalization while staying up to date with the headlines, your favorite celebrity or league.

Twitter lists work as well, so you can use someone else's curated list or your own list (as long as its public).

We're currently using the Publitweet Twitter widget, which is enhanced by embed.ly to provide in-line snippets when links are present. There is also a quick view link that opens the link in an in-line frame.

You can start from our Twitterfy page or look for Twitter in the settings (under Interface). You can also reach any page by hand just add the user or list to the end of http://duckduckgo.com/tw/, e.g. http://duckduckgo.com/tw/theonion or http://duckduckgo.com/tw/nytimes/staff (for a list). I currently have mine set to @jeffmiller's @newsyc150 feed.

I want to thank Jordan Kanarek for helping me put this new feature together and Robert Scoble for breaking the launch (check out his list). DuckDuckGo is transitioning from more of a one-man-show to a solidly group effort. While I am still the only full-time person, a number of people (including Jordan) have made significant contributions. A lot of this effort comes together on our forum (duck.co) and our IRC channel (#duckduckgo).

Working around Android's screen.width bug

 
This android bug has been causing me trouble lately. When fetching a cached version of a page, Android sometimes sets the screen width to the previous page instead of the page you are on. This has the annoying side effect of completely ignoring your media -max-device-width CSS.

So when people first go to DuckDuckGo on their Android phone, it formats fine via the media CSS block targeted at mobile devices. Then they click on a link and click back, and all of a sudden it is no longer mobile formatted. Or they bookmark the homepage and then open it again, and the homepage isn't mobile formatted. 

I made a small demo to see the bug in action. Just visit it on your Android phone. It prints the screen.width variable out at the top--should be under 700. Then click the wiki link and wait for wikipedia to fully load. Then click back to the page (might have to do it twice to go through their mobile redirect). Now the screen.width says something different. Ugh.

I've had been trying to find a workaround off and on for a while to no avail until @amonti came up with something that works. You can (currently) just target later versions of the Android browser via CSS through a -webkit-min-device-pixel-ratio:1.5 media block, e.g.

@media only screen and (-webkit-min-device-pixel-ratio:1.5) {

I say currently because presumably other browsers may implement this feature. But in the meantime (while we wait for an Android fix) this workaround actually seems to work.

Open Angel Forum Philly Recap

 
905870483.jpgLast week was the first Open Angel Forum Philly, organized by myself and Antonio Tedesco

We selected six companies to give five min demos (followed by five min of q/a). Antonio has a short write-up of each company on his blog, and here is even a shorter summary:

  1. Fancy Hands (NYC) - personal assistants for everyone.
  2. RezScore (Philly) - resume analytics.
  3. Row27 (Minneapolis) - official mobile apps for sports teams.
  4. SpeakerWiki (Austin) - marketplace for speakers.
  5. Sqoot (Chicago) - adsense for deals.
  6. Contently (Philly/NYC) - marketplace for high quality content.
If anyone wants an intro for any of these companies, please let me know. They all did a great job presenting and I hope they all get funded.

We chose these six out of about 80 applications. Of those 80, we did Skype demos with about 25. Obviously, we had to pass on some great companies. 

To get a view into our process, here are some groups of startups we passed on:
  • Hadn't launched.
  • No engaged uses after launch. 
  • Too high valuation. 
  • No software component.
  • Too far along in fundraising process.
  • Non-US.
We also had a great selection of angel investors in the room. In fact, the most surprising thing to me was that everyone (except one out-of-towner) showed up!

Antonio and I debriefed on Sat, and beyond some little things like having less tables next time, we aren't planning on changing too much next time around.  We hope to hold the next one at the end of the summer, probably mid-September.

If you have any questions, feel free to ask in the comments, and I'll do my best to answer.

Codified startup advice

 
I've been getting a lot of requests for startup advice lately, which is great because I like helping startup people as best I can. However, I've found myself giving a lot of the same advice, so I decided to try to codify it in the following flow-chart. Most investors and been-there-done-that entrepreneurs are very busy people, so I imagine this chart more generally applies for seeking startup advice. 

The best way to communicate with me is still by email or in person at a monthly Philly startup hackathon.


flowchart.png

The acqui-tail

 
Here's what I'm seeing (anecdotally): more Internet startups getting started and seed funded, but series A funding not increasing at the same pace (or at all). This led me to conclude there is an increasing risk for these startups to find follow-on financing.

But does that also mean all the startups and angels are largely going to end up with nothing? Not necessarily.

Dave McClure et al. seem to be betting on the rise of the small(ish) acquisitions that deliver fine exits to the entrepreneurs and angels. I'm not saying that is the only way to get liquidity, but it is the one I want to focus on in this post.

For this investment thesis to work, it seems there has to end up being a long tail of Internet startup acquirers. That is, the tech giants (Google, Microsoft, etc.) aren't going to acquire enough companies to make the numbers work. The concept of acquiring Internet startups must extend to M&A departments outside the tech sector.

One argument for why that might happen goes as follows. These large companies are spending more and more on digital stuff and so as it becomes more of what they do day to day, they're going to want to get into it more. One way to do that is acquisitions. And as one company in a given industry becomes good at Internet startup acquisitions, it then becomes a competitive advantage thing.

It would of course be great for Internet startups. The real money in acquisitions is in strategic buyers, but those buyers have to actually think you are strategic :).

Personally, I think it will happen. Maybe people have data that it is already starting to happen, but I haven't seen it yet. I was going to crunch some crunchbase data, but I'm a bit swamped. I might do it soon though if no one points out any existing data trends.

Multimedia emoticons

 
Recently on the #duckduckgo IRC channel (freenode), Getty had been using some links to pictures and videos as extended emoticons. They worked so well IMHO that I asked him to enumerate the ones he uses frequently in the following guest post. I realize that some of them cut across the Nerds, we need to have a talk message (which I completely agree with), but others are just useful (e.g. opinion, double face palm, Jeopardy). I figured others might have a similar list and would want to share.


This is a guest post by Torsten Raudssus (@raudssus), who is a software developer specialized for social media, high load websites and IRC.

Sometimes, it is hard to make a proper communication over the Internet. Sometimes, you need something more then just words to bring your emotions to the communication partner. For this case I use a specific set of pictures, which really covers all the cases you normally need! I keep them always in my Firefox Bookmarks Toolbar:

Images

  • opinion 

    319.jpg

    Yeah, well. The people have many opinions... they should stay to their opinions... sure ;)

  • invalid 

    463.jpg

    And of course arguments are not always valid. It's not easy to show someone that he is wrong, a kitten always helps!

  • turtle 

    6a0120a721c2d7970b0133f17599dd970b-800wi.jpg

    If your friend is again showing you not what you wanted to see, if a sad face is not enough, then... THEN you need the turtle! (Trust me, it works!)

  • facepalm 

    double_facepalm.jpg

    Ok, if it all already happened, and if it all failed, then its just the last option to give the facepalm!

  • orly? 

    O-RLY-YA-RLY.jpg

    Owl's are just cool :)

Videos

  • ualuealu



    This one is a very general one. You can use it after your customer has called you, you can use it to end any discussion and showing that the end of your brain capacity is reached, or just to show that your communication partner has not any of those capacity!

  • Jeopardy 



    Yes. Of course, you need the Jeopardy theme. Internet is waiting, Internet is always about waiting, and especially if you are software developer, waiting is our daily business. It is also helpful to play it while you wait on the phone, cause if the other side gets back to the phone, he will first listen to YOUR waiting music!

  • Warteschleife 



    If your communication partner is german, you could use this german version for the Jeopardy-effect :).


DuckDuckGo chat bot: im@ddg.gg

 

DuckDuckGo now has a chat bot at im@ddg.gg (or im@duckduckgo.com) that will respond to your instant messages with Zero-click Info, search results, and real time topic summaries.


The following is a guest post by Dhruv Matani (@dhruvbird), who is a software developer at Directi and who made the new DuckDuckGo chat bot.


What is a chat bot?

A chat bot is a like a friend on your roster (contact list) who is actually a computer and can respond to any messages you send it (or send messages of its own accord). Examples of chat bots include bots that:

  1. Periodically alert users of the score during a game of cricket (todays-special@appspot.com).
  2. Message the user whenever a commit is made (github).
  3. Post any message you send it to your twitter and facebook accounts (List of twitter bots).
  4. Try to answer your question by asking other users (aardvark).
  5. Can get the latest news (only pt_BR available).
  6. Perform web searches, bookmark pages, do calculations, etc... (clisearch).
  7. Show you the current weather (defunct).

You can find other XMPP bots on these pages.


What does this chat bot do?

im@ddg.gg is one such chat bot who can do DuckDuckGo searches for you on your chat account. Just send this bot your query and she will do a search and send the results back to you - all while you are using your favourite chat client. You will get not just the web results, but also the 0-click results and definitive answers to your questions (if any). This can be useful when you quickly want to lookup the meaning of a word, find some quick fact about a monument you don't know of, compute the md5 of a string, and so on...

The bot can also give you real time topic summaries for many broad keywords. These summaries are the result of going out to the top links in real time and looking for relevant paragraphs that match your particular search term.

Though the idea has been tried before, the proliferation of XMPP has made bots a lot more accessible and chat accounts more plentiful. That apart, the large set of data sources that DuckDuckGo looks at to provide answers provides a single window into a lot of searchable data.


Why did I even venture into it?

The reason I wrote this chat bot was because a few of my friends have Blackberry accounts with only mail and chat (no internet) enabled and they wanted to be able to just search the web. They said that it would be enough for them to see just the information that was returned in the result snippet as opposed to the result page. Being on a mobile also meant that they couldn't effectively scan complete web pages and a minification of information would definitely be better. As it turns out, a lot more people with such requirements exist. In fact, one of my friends mentioned that he used this bot to look up the definition of a word while he was watching a movie!

You can try it now by adding im@ddg.gg to your roster on any jabber network (jabber.org, pandion.im, livejournal.com, gmail.com, etc...)


Technical stuff

We used ejabberd to serve the ddg.gg domain over jabber. The im@ddg.gg bot itself is a standard jabber client written in javascript and runs on node.js.

Ejabberd was chosen because it is one of the best jabber servers out there, is highly configurable and is fairly easy to set up.

Node.js was chosen as the platform for the bot (as opposed to choosing Javascript as the language). The inclusion of Javascript was just a side effect of the former decision. I would like to mention here that even though I am a python fanboy, I chose node.js, not because of the language, but because it was just so well suited for the task at hand.

Node.js is ideal for such routing/switching based interactions where it takes data from one end, pumps it to the other and does the reverse. The whole idea of everything being asynchronous (across protocols - XMPP, HTTP, SMTP and others) appealed a lot to me and I literally had a working (no frills and did the job right) jabber bot (fully performant) in under 100 lines of code on node.js. I would like to thank astro for being helpful when I ran into issues with node-xmpp.

We had an option of either making the bot a jabber client or a jabber component and we went with the former only because of its simplicity. In case of a client, you are assured that you are one user whereas in case of a component, you need to be aware of which user you are pretending to be at that point in time. The obvious drawback with a client is that most external jabber servers place a limit on how much data the client can send/receive if the client directly connects to their network. I would think that such restrictions don't exist (or are very generous) for components - if the jabber server does in fact allow components to connect to it. However, since the bot connects to our own jabber server, we can always be generous with shaping traffic to it. Besides, for this use case, the roster size doesn't matter - since that is the most common argument I have read against a bot as a jabber client.


Server federation

We had a tough time figuring out the exact rules as far as google's XMPP server was concerned. Google runs a service called Google Apps which you can set up on your domain on this service and once you do that, you can chat with users on any other apps or gmail account. The catch here is that XMPP requires you to add an SRV record to every domain if you want the jabber servers serving those domain to talk to each other. However, since they (gmail and google hosted domains) are all served by the same jabber server (talk.google.com), it is not necessary for users on these domains to chat with each other. What happens as a result of this is that anyone who is served by talk.google.com can NOT chat with people on other servers (if they haven't set their XMPP SRV server record to talk.google.com - it is required for server federation).

Hence, we initially decided to run 2 bots, one on ddg.gg (ejabberd) and one on (talk.google.com), both serving the address (im@ddg.gg). However, even gmail accounts started talking to the bot hosted on talk.google.com (gmail seem to have some internal condition that detects that the target domain is apps hosted and they bypass SRV lookup - even if an XMPP SRV server record for that domain exists). This is undesirable since google has a limit on the amount of traffic that a single user can generate and the bot would most certainly cross that limit very easily (since it is a jabber client and not a jabber component). I'm not sure if talk.google.com allows jabber components (If anyone knows anything about whether this is possible, please do let me know). Hence, we got rid of the apps hosted bot and now there is just one bot serving im@ddg.gg (on the domain ddg.gg that is served by the ejabberd instance).

As of today, an apps account can talk to the bot ONLY if it has the XMPP SRV server record set to talk.google.com (for server federation).

Additionally, talk.google.com seems to disregard vCards that the bot sends to the server. The gmail browser client too doesn't show the image that the bot sets in its vCard.

Other jabber servers didn't give us too much grief since there wasn't anything non-standard about them (that we encountered).


Yegg was very helpful in this whole exercise so a big thanks to him!! :-). If you have any ideas for improvement, please include them in the comments below.

References: http://www.quora.com/What-is-the-best-way-to-build-a-fast-scalable-instant-messaging-IM-bot/

Browser market :: Search engine market

 
Here is a chart of the last six years of relatively believable browser share #s (from Net Applications via Wikipedia). In it you can clearly see multiple alternative browsers gain a foothold in the market. 

browsers2.png

Anecdotally this seems true as well. I know plenty of people who use each of these as their primary browsers, with the exception of Netscape (not sure what is going on there--AOL?). And more often than not, it seems people actually switched to these alternative browsers (as opposed to being forced on them by their OS, OEM, IT dept, etc.).

Is this an apt analogy for the future of the search engine market? 

I'm hesitant to quote any search engine share market #s currently because I frankly just don't believe them, or at least they don't seem to line up with anecdotal evidence at all. Google seems currently way more dominant than they sometimes get credit for.

Yet at the same time alternatives are arising. And more importantly wrt to the analogy, there are alternatives that in my opinion offer a different enough overall search experience to be preferable to some people, much like Web browsers.

About Me

RSS. Email.