I'm fascinated by the google knowledge graph. Although i'm actually not sure whether or not this thing is real or just a publicity stunt, but it sure sounds like the future of search.
Now you've probably noticed how much knowledge exists on the web in an unstructured, ad-hoc way, mostly on forums, blogs, and wikis. If you're also addicted to stackoverflow and ubuntuforums you know what i'm talking about.
Here's what I'm suggesting: to introduce a way of structuring knowledge (technical knowledge for now), represented in questions and answers on forums, let's start with computing forums. What I want is a flexible framework that allows the users to ask questions on properties of objects. for example, take this stackoverflow question here:
I have 2 unrelated questions.
1. how many posts does facebook allow you to get with an api?
2. using facepy, facebook, or any other api, how do I get the number of friends a user has (the user is not my friend). The user id is provided.
This is how I get the number of my friends with facebook api:
If i try this:
I get this error:
My proposed framework would allow the question poster to use a structured system that relies on an extensive tag library to say something like this:
Q1:
facebook.api.posts.size() = ?
facebook.api.posts.size() = ?
Q2:
using x where x.type = API
var FRIEND y where y is not in facebook.api.friends_list(me)
y.friends.size() = ?
Then we can could some similar way of posting the code snippet and indicating that it gives a certain error.
Of course my example script is still a little basic, but I hope it gives the sort of idea I have. You can think of so many extensions to this, including a translation from the official APIs of each source code, and using this to automatically answer such basic questions. Maybe also using the automated doxygen documentation body to answer questions, or at least automatically tag them correctly.
The purpose of such technology would be to provide one more step that further closes the gap between human language and computer language, and enable a more seemless interaction between the two.
The purpose of such technology would be to provide one more step that further closes the gap between human language and computer language, and enable a more seemless interaction between the two.

