HN user

edgeztv

228 karma

I'm the founder of typeracer.com

Gmail: edgeztv Blog: http://nighthacking.blogspot.com

Posts15
Comments84
View on HN

I'm the creator of Typeracer. When I launched it 5 years ago I had a similar UI - one line of scrolling text in a larger font, but based on user feedback ended up with the more natural UI of static text in a smaller font. Thanks for the compliment!

I prefer to stay anonymous on here, but I can be reached by this same username on Gmail if anyone wants to know more.

I'll just say that it's a very simple skill-based, text-based multiplayer race-against-others game (something like a multiplayer speed Scrabble). It has almost no graphics and uses AJAX.

how is it not earning a livable wage with 2 million users?

It's livable if you have very low expenses, but in my limited experience, 2 million users just aren't enough for a free website to make good money. Maybe I'm hugely under-monetizing the site somehow, but I don't really see a good source of revenue other than from ads.

There are two kinds of execution:

1) building a prototype (which, knowing Mark, I'd say took him at most 2 days)

and

2) sticking with it for several years and making it profitable, through the thick and thin, the emotional roller coaster, and all that.

It took me a year to complete stage (1) and I'm still on stage (2), three years later.

My web app (a casual MMO game) had the same wave of organic growth in the beginning that Mark's had, was mentioned on top blogs in the game industry, played by news anchors on live local TV news half a country away, etc., (this list goes on and on). Yet my site never got drooled over on Hacker News or Tech Crunch (possibly because I never submitted it to either), and I never had all these people telling me how great I am, how awesome my idea was, and sounding so sure that it will make me rich.

My site has 10x more users than threewords.me, been cloned by many developers in various countries around the globe, and still retains the top spot among those competitors. In fact, it seems that I actually invented a new genre of games with my idea (how many people get to say they invented Tetris, FPS, RTS, RPG, or MMO?)

All this, and yet I'm still barely making more from the site than I could be making from working at McDonald's. Yet I persist. It's been my full-time job for the past 3 years (the web app, not McDonalds :)), ever since I parted ways with my well-salaried software engineering job.

If anyone is tempted to call me stupid or lazy for not making millions from my idea, I'll be the first to admit that maybe I am. I didn't do any marketing or emailing Arrington, or any of the like. Instead I've been focused on building what my users want, developing features, fighting fires, and talking to users (many of whom constantly criticize me for not pushing out new feature fast enough).

Not a single real user ever said to me "Wow, this will make you rich," it's always more like "Wow, I LOVE your game! Please add features X, Y, and Z. They are super important! Hope to see X, Y, and Z working soon!"

Therefore, I sometimes think the startup community needs a dose of sanity. Not every tiny app is going to make millions. The web economy seems like a gold rush for many. If threewords.me makes any real money from this sale, it will be due to the exposure it's received to people participating in that gold rush.

In conclusion, I'd like to say that my comments are not intended just for criticism. If any of you think you know how you could make tons of money from threewords.me or from a casual MMO game (that doesn't have any virtual goods to sell), then I hope you can tell us how you would do it, rather than making assumptions that somehow anyone can get rich by building a free app and getting several hundred thousand people to sign up for it.

(P.S. Mark, I think you're a great guy and your app is very nice, so please don't take my comments the wrong way - I'm just trying to add some perspective to this discussion.)

[dead] 17 years ago

I disagree. First, you need both attraction and comfort. Comfort basically means showing a woman that you're interested in more than just sex. At the very least, this present does that. Furthermore, I think this particular present also creates attraction by demonstrating positive value attributes of the guy like intelligence, curiosity, playfulness, etc.

An easy way for Google to fix the problem:

Lemma: most users are subscribed to Google Groups with their Gmail addresses.

Algorithm: GG should broadcast a new message to the Gmail accounts first and wait. If Gmail flags it as spam for p% of the receiving accounts, it should notify GG. GG should then send the message to spam (e.g. hold it for moderation), and not broadcast it to the rest of the subscribers. If Gmail gives it a green light, let it through.

In my 2+ years hosting typeracer.com with Rimu, they have been absolutely outstanding. All my questions, no matter how complex, were answered within 10-30 minutes. Hundreds of times. Anything I've asked them they did. They installed all kinds of packages and performed configurations I requested, all for free and without hesitation. And I'm not a premium customer by any stretch. I only have 2 quarter-VPS instances with them for about $200 a month.

In the 2 years I only experienced 20 minutes of downtime recently due to a one-time network hardware upgrade (1 week's advance notice was given - a bit short but forgivable) and another 20 minutes due to a DDoS on their network about 6 months ago (which most likely prompted this recent hardware upgrade :).

I really hope people don't jump to conclusions from a single data point (aaronsw). I would recommend RimuHosting to everyone I know without hesitation.

(Edited)

To me the Holocaust is even more certain than evolution because I grew up with the stories of it from my grandparents. But if you don't have those stories in your family, you can also look at books, museums, photographs, eyewitness accounts. The sources for facts are endless.

Being concerned about revisionism, I would have thought the OP is worried about losing such facts, but then this thread turned into an outlet for your unwillingness to accept the holocaust.

If you weren't German, I'd simply call you an asshole, but one can imagine it being hard to believe that peers of your grandparents were responsible for killing millions of people for no reason other than race. Although coming from Germany, you should be much better informed than the average holocaust denier, from say, Iran.

Half of my grandmother's family was machine-gunned into a pit outside of Kiev called Babiy Yar with about 30 thousand other Jews by German SS during the first weeks of German occupation. The bodies, bullets, and cartridges are all still there. The executions at Babiy Yar went on for months until no more Jews could be found in the region, at which point the site was used to execute gypsies, prisoners, etc. These events were witnessed by thousands of residents of Kiev during the occupation by German forces, and you can read one such account in the book called Babiy Yar by Anatoliy Kuznecov.

Google image results:

http://images.google.com/images?hl=en&q=babi+yar&sou...

When you look at hundreds of individual mass execution events like this one, you get a more complete picture of the Holocaust.

My solution for multithreaded testing in Java. Been using this code for a couple of years. Can easily be generalized for any asynchronous task. The main concept is using a shared barrier construct.

  /**
   * Executes the task the given number of times in the given number of threads
   * @return All the unchecked exceptions thrown by the task during execution, or
   * an empty collection; never null.
   */
  public Collection<Throwable> run(Runnable task, int nThreads, final int iterationsPerThread) throws BrokenBarrierException, InterruptedException {
    // each thread will await upon the start barrier, then run the task, then await at the finish barrier (where the main thread will be waiting)
    final CyclicBarrier startBarrier = new CyclicBarrier(nThreads);
    final CyclicBarrier finishBarrier = new CyclicBarrier(nThreads + 1);  // +1 for the main thread
    // exceptions raised by threads will be logged and returned
    final Collection<Throwable> exceptions = new ConcurrentLinkedQueue<Throwable>();

    for (int i = 0; i < nThreads; i++) {
      new Thread("Thread " + i) {
        public void run() {
          awaitOnBarrier(startBarrier, 5);
          try {
            for (int j = 0; j < iterationsPerThread; j++) {
              task.run();
            }
          }
          catch (Throwable e) {
            e.printStackTrace();
            exceptions.add(e);
          }
          finally {
            awaitOnBarrier(finishBarrier, 60);
          }
        }
      }.start();
    }
    finishBarrier.await();
    return exceptions;
  }


  /** Calls barrier.await and supresses all its checked exceptions */
  private void awaitOnBarrier(CyclicBarrier barrier, int timeoutSeconds) {
    try {
      barrier.await(timeoutSeconds, TimeUnit.SECONDS);
    }
    catch (InterruptedException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
    catch (BrokenBarrierException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
    catch (TimeoutException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
  }

I second the IO issue - it's alarming to have the HDD always churning when I have Chrome open. Assuming SQLite is the culprit, that's a good reason to think twice about embedding it into an application.

This is terrible news. If every other windows application starts using their code, you can expect hundreds of megs of RAM flushed down the drain on your system (each google updater process takes up about 10 megs). I hate this process always reviving itself after I kill it. Having multiple instances of it will be a nightmare.

Who would have thought, a year ago, that any site with that number of users would be shutting down.

I too have seen ad revenues decrease 3-5x on my site. Are websites that don't sell a product no longer viable?

Lego Turing Machine 17 years ago

Interesting fact about TMs - while their computibility is equivalent to computers, the Big-O time for common algorithms is (possibly much) slower. Many O(n) tasks on computers with RAM are O(n^2) on a TM. The only commonality with computers in terms of time complexity is the Polynomial vs. Non-polynomial boundary.

The same is true for any model of computation.

Despite this equivalence, it's orders of magnitude harder to program a TM than the ugliest assembly language you've ever seen. This is one architecture that desperately needs a compiler :)

Yeah, unfortunately most of us here were turned down and most of those who got interviews will be turned down as well. That's just how the numbers are.

The more interesting question is how many of you expected to be turned down but applied anyway? I suspect a lot. It's funny that this round their application had a boolean question asking whether you were a single founder, non-technical group, full time jobs, etc. I even half joked to a friend that YC has an automated filter that queues up your rejection letter if the answer is "yes".

This time around I did not expect to get funded, as I don't have a co-founder yet. Funny thing is, this time I also believe in my idea much more strongly than both times I applied in the past (with co-founders) and got invited to an interview. I guess that's why I still went for it.

Actually, waiting until the last minute to apply for a summer internship is often a good idea. You'll be competing against fewer applicants if a new spot opens up at the company. It worked for me both times I applied late much better than applying early.

Using an example from a benchmarking suite to illustrate language conciseness doesn't make any sense. We all know that conciseness is inversely proportional to speed. Whoever wrote that Java code was trying to write the most performant, not the most concise code. He did a great job, by the way, since for that particular benchmark, Java outperforms Ruby by a factor of 20! (http://shootout.alioth.debian.org/gp4/benchmark.php?test=sum...)

Sorry for initially assuming that you wrote the code. I wasn't familiar with that site, so I didn't register your original allusion to it.

There are so many things wrong with your example! You basically wrote the ugliest Java code you could possibly think of for this simple program.

First, in order to get an objective comparison of code length you should at least use the same (length) variable names. You used "lineTokenizer" in your Java example and "l" in your Ruby example!

Second, you could have just written System.out.println(sum) in Java. The fact that you had to write System.out.println(Integer.toString(sum)) shows your lack of basic Java knowledge.

Lastly, the brackets around your one-line while loop in Java are unnecessary, unlike the brackets around your closure in Ruby.

Also, the Java main method declaration is irrelevant to your point, since it's written only once per program, and is automatically created by any IDE.

How about this equivalent Java code to match your Ruby example:

  int count = 0;
  Scanner s = new Scanner(System.in);
  while (s.hasNextInt())
    count += s.nextInt();
  System.out.println(count);
Not so different now, is it? You can write concise code in any language if you know how to use it.