It’s occurred to me that a logical next step for coding would be to have all data available instantly whilst I’m programming. Imagine having intellisense for any data built right into your eclipse IDE or Visual Basic or whatever software your using to program. Now to understand this better consider the following example, Lets imagine I want to know the colour of a specific fruit.
So why can I not do this directly within Eclipse no matter what language I’m programming with…
allDataAPI.banana.color
not only have that return me result in my application, but also have the IDE autocomplete my the word color as I type. You get autocompletion in google with search terms, in fact google is so good at finishing my sentences its scary sometimes. So for static data we know to be true it should be so for the worlds knowledge whilst I program.
Now you may think that a service like this is too far away, but I think it isn’t that big a leap of the imagination. I also think this could be available to all languages within a few years. It will most likely come derived from xml schemas with compilers creating classes or ‘value objects’ for the data. As well as using xml for hierarchy relationships but also using patterns/algorithms to determine probabilistic properties for objects your trying to create. However when you actually use them within your application it then imports the relevant classes.
The more I think about this, the more simple it actually sounds to achieve, and it would do amazing things for how we code front end applications and for data in general. How many times have I sat preparing or generating data, coming up with a schema and thinking to myself someone must have bloody done this before. However with an allDataAPI as open source / moderated service developers would be tempted to create all the data for this service as and when it was required, leaving it there for others to use in the future. It would grow fast, like Wikipedia.
So there’s different types of data concerned here and to begin with static data that wont change is immediately applicable. Sports results from history, American presidents to flora and fauna. This data is already defined and should be available.
Expanding the concept the API would be able to plug into general data, and realtime data also.Consider using this kinds of system within a social network application. An allDataAPI would know I was logged in therefore know what ‘my’ was referring to…
allDataAPI.my.brothers.birthday
or
allDataAPI.my.brothers.girlfriends.surname
For this to be more powerful classes and packages would need to have multiple reference names…
So just as as I could say…
allDataAPI.my.cellphone.number
I might want to say…
allDataAPI.mobile.number.mine
to do this the system would need meta relationships on classes and packages so they would not be fixed types.
This could be an easy thing to set up, with chief engineers defining abstract/relational schemas and others doing data input. You could potentially even mechanical turk the data input part. I’ve been playing with the concept loosely in actionscript, but honestly think you would have xml schemas that specifically outline data in a way that any language could pick up and make value objects from.
Errors would be easy to catch and feedback in for new decisions as they would be data typed and also carry the sequence or hierarchy from within which they were determined. You could poll the service to verify data by tracing properties at runtime. So as well as a local storage version of the system, you could choose to have the classes served by the cloud. Importantly all data becomes and object so you can easily check that for new relationships as they come available.
Additional tiers could be written for an allDataAPI that could plug into your platform or operating system, for example…
allDataAPI.current.time would be retrieved from your system clock and not from static xml constructs.
public services another potential candidate…
allDataAPI.train.times.from.manningtree.towards.liverpoolst.today
you could request forms forms…
allDataAPI.tendring.counciltax.forms
or
allDataAPI.tv.licence.forms
amazon or ebay even…
allDataAPI.ebay.search.shoes
To begin with, it would be good to just get working off flat xml, then as I say have compilers that turn those xml files into useable VO’s for use in any language, Java, Javascript, Actionscript, C++ , PHP etc…
To be honest this should be a wikipedia service and called the wikiAPI, it would be easier to build, maintain and update STATIC content things that will not change. i.e. football results from the past. This is how the service should really begin its life, by taking all the static content in the world we know that will not change and making it available to programmers immediately within their platform IDE.
but It would be great to be able to literally know everything about the world as it changes…
allDataAPI.carlsberg.bottle.color
allDataAPI.phone.countrycode.england
It should also be able to pick up on slang, colloquialisms and be multinational, hence the need for dynamic class and package names or have that built in as meta and just build more xml relationships to various classes.
so crazy idea?.. I think its the future of programming.
If the data your are looking for is not available in the allDataAPI, it would make sense for developers to build it for others to use. This in turn creating an ultimate database of useable data for all languages.
you could see what was on telly…
allDataAPI.tv.channel1.now
an example of usage within an application…
var trainTime = allDataAPI.my.train.time;
if( trainTime< allDataAPI.distance.trainstation.from.home )
{
allDataAPI.book.tickets
}
Booking tickets would work if you were logged into a system (ie. Facebook). Yes I’m blue sky thinking here, yet to a degree what I’m talking about is defiantly possible.
Imagine being able to know about anything…
allDataAPI.book.tokillamockingbird.authors.surname
or as below with spelling errors, it would be able to assume what to do or be able to math.round( logic not just numbers )
allDataAPI.book.tokillamocingbrd.authors.surname
obviously this would mean the service would require settings, so you would create an instance within your app…
var allDataAPI = new allDataAPI.settings;
allDataAPI.settings.setAssumptionLevels = 70%;
allDataAPI.settings.setUser = FacebookLoginDetials
allDataAPI.settings.data = importClasses
or
allDataAPI.settings.data = useCloud
The list of settings and services could go on forever but I think I’ve just about got my point across so throwing it out there now.
Initially Wikipedia is an obvious target for this, it has so much static content already stored with simple nested relationships that can be derived. That’s lots and lots of data from history of humanity to the radius of atoms that could be immediately used within your application. It would be seriously cool to have intellisense, autocompletion and a service to do this. Obviously you would only compile into your project the required classes and you would not experience any bloat. Also you could choose whether to hit the service at runtime for these value objects meaning no bloat at all in your app.
I haven’t even gone into generating dynamic queries to this service at runtime from the cloud, but the potential is huge.
O.K so I’ve discussed all the benefits of such a system but not really looked at the cons.. and to be honest there are loads. But that should not put people off trying to achieve such as system.
where do you store the data?
what about images / sounds / video etc?..
do you rely on the internet and pull content dynamically?, this would cause broken links.
Lots and lots to think about as its a huge proposal, but the potential power it would give us all is vast. I also like the concept of a uniformed API available in any language bridging the comprehension between developers or even how the API is used.
another example from top of my head searching brands or brand data…
allDataAPI.pepsi.logo
once you have an all data API you needn’t even program with words, you can program with sounds, pictures etc… As you build up relationships and let the service take care of the assumptions on what kind of data you are looking for based on the way you have organized your media relationships.
I really do think this concept has legs and a lot more thinking required to bring it to life as a full service. To be honest just as there are multiple services for lots of other things out there its highly likely we will see a whole heap of these popping up. Global services to obtain any kind of data like google for code. Google and Microsoft probably already working on something like this. I hope to see us all being able to tap into the worlds knowledge from within our applications whether like this or a similar idea in the future. It would breath a lot of life into what we do.
So what do you think? lets actually do something with that data we have been collecting for the last 15 years!
Below I’m going to pretend the service exists and write some use cases, if you get bored you can stop reading as I’m just ranting now…
someTextfield.text = allDataAPI.newspaper.sun.headline.today
yesterday_txt.text = allDataAPI.newspaper.guardian.headline.yesterday
someSprite.drawCircle( 0,0, allDataAPI.atom.mercury.atomicRadius );
for each( var atom:Atom in allDataAPI.atoms )
{
trace( atom.name )
}
if( allDataAPI.manchesterunited.manager == “alex ferguson” )
{
trace( “cool” );
}
this example shows us how powerful this idea is, as your feeds could display news as it occurs. You can effectively program for the future
if( allDataAPI.manchesterunited.striker !== “wayne rooney” )
{
trace( “wayne rooney has left manchester united” );
}
if( !allDataAPI.local.tesco.chicken )
{
allDataAPI.text.me.nochickenatescoshopsomewhereelse // lol.. if no object the service could simple return you a string
}
plugging into hardware…
function turnOffTv():void
{
if( allDataAPI.michael.standsup && allDataAPI.currentTime>12 ) // hooked into my kinect in my living room
{
allDataAPI.ACTION.tv.turn.off;
}
}
I could go on for hours, so will stop, please do comment if you think its a cool idea.