One of my favorite web apps for finding news is TailRank. TailRank indexes thousands of blogs, and shows news that is that is being discussed by lots of legitimate bloggers. On their page, there are a bunch of stories, each with one main blog and a sampling of other blogs that reference the story. If you click on a link, it shows all of the articles that were grouped with that story. Usually, on pages that make the front page, there’s somewhere between 5 and 50 links to blog entries per story. Things that lots of bloggers comment on tend to be interesting. For example, today I found the following articles:

Each of these has links to a bunch of blog entries where different bloggers weigh in about the stories. Some of the stories attract blog posts where arguments are made. Others attract blog posts where people uncover different tidbits of information. Most are a little of both.

There are other things to like about TailRank — it has a great UI and is based on great technology. There’s a lot of information to be had on the front page. This is made possible because TailRank is well-cached. It’s very smart about which posts it lets into the system, and it keeps out many poorly-written and spammy blog posts. The UI is beautiful, from an aesthetic standpoint. The colors are great and it’s uncluttered. There are visual snapshots of each post. All around it’s an amazingly neat product. For what it does, it does a great job.

The founder has done a very good job of setting up infrastructure and putting together a programming team with a minimal investment. At first, according to him in a podcast he did (which also contains information on the caching), it was just him and he did some outsourcing. Now, according to an article linked to on the TailRank blog, he’s got one developer working with him in person in San Francisco. They’ve just released an API for using their blog search engine (short article).

Since I’ve been spending too much time on reddit, I have started using TailRank more, because a higher percentage of its articles are interesting. I think this is because reddit lets people frivolously increase the ranking of stories that they agree with, even if they aren’t interesting. To write a decent blog post about a subject takes time.

Another nice thing from a productivity standpoint is that it lacks comments in the reddit/Digg sense. It is in itself, focused on comments, though. It is a bit more difficult to write comments. You have to have a blog with interesting content and get it recognized by the search engines.

In my opinion it’s the best way to write comments, though. The person on whose site you’re commenting can’t delete your comment, since it’s on your on blog. They can delete a trackback, but they can’t delete it on TailRank. It also makes it easy for other people to find what you’ve written. And, of course, it’s better for marketing, since it brings people to your website.

I just read an article calling for a way to get an AST for Ruby code from within Ruby. I think it’s a great idea, and I think static analysis, code manipulation/refactoring are great reasons to support such a thing. Another consequence would be macros, which are a more controversial feature. The only downside I can think of is that it could be misused, and to leave out a feature for that reason would go against the Ruby philosophy, in my opinion. One of the regulars at the Phoenix Ruby Users’ Group argued against using a dumbed-down “teaching language”, saying that when you suggest using a language you don’t want to use yourself, you’re talking down to the learner. I agree. I think the best way to keep people from misusing features is not to remove the features, but to educate them. People in the Ruby community have always done a good job of making sure there’s lots of good example code out there, and giving constructive criticism when someone posts a bad example.

While the reasons in the article are enough, I can think of another good reason for having AST support — having the ability to constrain code to a certain set of features. There would be two different uses for this:

  • Running code from an untrusted source – This could include web template designers, or even users. Ning is an example of a site that lets users run their own code — but there is a huge overhead to facilitate this and to sandbox everything. If it could be verified that code doesn’t do anything dangerous, I think a new type of Web app plug-ins would emerge. Instead of having to set up an app on a separate site and use REST or SOAP to communicate, people could just throw together a little script in a domain-specific language. One idea I have for this sort of technology would be a Flickr for html and image generators (like ajaxload.info).
  • Enforcing decoupling – When managing a large software project, I think it would nice to specify which classes do what, and have it enforced. Maybe there is some class that’s supposed to be all about math, but that goes in an application that gives output to users. To keep math programmers from putting presentation logic in mathematical code, you could constrain them to a DSL that doesn’t have strings. Or, you could keep template programmers from doing networking code. The check could be done at runtime, or commit time, with plug-ins to the version control system.

There is a Perl library that parses Perl, but it would be nice to have one for Ruby that’s written in C and optimized for speed, and that with certainty matches up to what the interpreter understands.

I think that once an AST implementation was built, something like RSpec could be created which does compile-time or commit-time analysis. That would be cool.