fluidinfo in a nutshell
DESCRIPTION
Introducing key concepts and use cases for Fluidinfo.TRANSCRIPT
http://www.flickr.com/photos/max78/104677840/
Fluidinfoin a
Nutshell
Fluidinfo is an openly writeable hosted service for
storing, sharing, searching and annotating data.
While this is accurate, it’s not the whole story...
•Simple & easy•Openly writeable• Intuitively searchable •No pre-defined schema•Maintain ownership & control
Fluidinfo aims:
So what motivates us..?
Key Concepts• Objects - represent things*
• Tags - define objects’ attributes
• Namespaces - organise tags
• Permissions - control access
* Not in the object oriented sense of “object”.
Objects are tagged with information
http://ntoll.org/images/93.jpg
Namespaces/tags
ntoll/ratingterrycojones/books/reviewamazon.com/book/titleamazon.com/book/authoramazon.com/book/isbnesteve/books/covertimoreilly/has_read
Tags must be defined before being attached to objects. Every user, application or client starts with their own top-level namespace. Every namespace and tag is itself represented by an object (facilitating meta-tagging).
Namespaces/tags
ntoll/ratingterrycojones/books/reviewamazon.com/book/titleamazon.com/book/authoramazon.com/book/isbnesteve/books/covertimoreilly/has_read
Trusted domain
Good reputation
Namespaces link domains to data and create trust. Users whose username is a domain name must own the domain in question (so only Amazon could use the namespace amazon.com).
Namespaces/tags
ntoll/ratingterrycojones/books/reviewamazon.com/book/titleamazon.com/book/authoramazon.com/book/isbnesteve/books/covertimoreilly/has_read
Who the hell..?
Seems like a nice guy
Dodgy geezer
Domains on data allow you to make a judgement on reliability.
An object
about = “book: Dune”
id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”
Objects (in Fluidinfo) represent things
Every object has a unique ID
The unique “about” tag is optional and used to identify what the object represents
A conceptual view of an object. Remember the “about” tag is special, optional and unique.
An object
about = “book:Dune”
ntoll/rating = 5ter
rycojones/
books/rev
iew =
“I love
sandworm
s”
amazon.com/books/title =
“Dune”
amaz
on.co
m/b
ooks
/aut
hor =
“Fra
nk H
erbe
rt”
amazon.com/books/isbn =
“87-418-7517-6”
timoreilly/has_read =
1973/08/19
estev
e/boo
ks/co
ver =
id =“e127475b-eb93-48e1-a24f-
Different users tag data to the object. Their data is given a context by being attached to the same object identified by the about tag value.
An object
about = “book:Dune”
ntoll/rating = 5ter
rycojones/
books/rev
iew =
“I love
sandworm
s”
amazon.com/books/title =
“Dune”
amaz
on.co
m/b
ooks
/aut
hor =
“Fra
nk H
erbe
rt”
amazon.com/books/isbn =
8741875176
timoreilly/has_read =
1973/08/19
estev
e/boo
ks/co
ver =
id =“e127475b-eb93-48e1-a24f-
Images
Numbers
Text Date/Time
The values can be of a primitive (searchable) type: numbers, text, booleans etc... OR an opaque type: images, audio, video or any other sort of data.
primitive = JSON
Simple
image/png
Really simple.
An object
about = “book:Dune”
ntoll/rating = 5ter
rycojones/
books/rev
iew =
“I love
sandworm
s”
amazon.com/books/title =
“Dune”
amaz
on.co
m/b
ooks
/aut
hor =
“Fra
nk H
erbe
rt”
amazon.com/books/isbn =
“87-418-7517-6”
timoreilly/has_read =
1973/08/19
estev
e/boo
ks/co
ver =
id =“e127475b-eb93-48e1-a24f-
What about data control/privacy..? Permissions are usually applied to the “thing” of interest. But we want to make Fluidinfo openly writeable. So we do something different...
An object
about = “book:Dune”
ntoll/rating = 5ter
rycojones/
books/rev
iew =
“I love
sandworm
s”
amazon.com/books/title =
“Dune”
amaz
on.co
m/b
ooks
/aut
hor =
“Fra
nk H
erbe
rt”
amazon.com/books/isbn =
“87-418-7517-6”
timoreilly/has_read =
1973/08/19
estev
e/boo
ks/co
ver =
id =“e127475b-eb93-48e1-a24f-
...we move the location of the permissions.
Permissions apply to namespaces, tags and values. Users retain control of their data.
Fluidinfo stays writeable.
Anyone can tag any sort of data to any object. However, users define who can read, create and change their namespaces, tags and data.
Fluidinfo is the database with the heart
of a wiki
Nivi http://venturehacks.com/
Sort of... :-) A wiki is openly writable just like Fluidinfo.
As Wikipedia is to traditional encyclopaedias so Fluidinfo is to traditional databases.
But a wiki doesn’t have permissions to facilitate privacy and ownership, a query language like a database, nor does it provide an instant API for data.
An instant API for data..? A simple way to share and re-use data..?
https://fluiddb.fluidinfo.com/objects/OBJECT_ID/NAMESPACE(s)/TAG
HTTP ‘GET’ returns the value, HTTP ‘PUT’ adds/updates it etc...
Full API: http://api.fluidinfo.com/
A RESTful API
Fluidinfo has an simple and consistent API for application developers. End users create an account on Fluidindo but use applications to access, update, search and annotate Fluidinfo.
Simply by importing data various organisations and cultural artefacts (The Bible) now have an API.
Fluidinfo’s Query Language• Equality & Inequality: To find objects based on the numeric values or
exact textual values, e.g., tim/rating > 5, or geo/name = "Llandefalle".
• Textual: To find objects based on text matching their tag values, for example, sally/opinion matches “fantastic”.
• Presence: Use has to request objects that have a given tag. For example, has sally/opinion.
• Set contents: The contains operator can be used to select objects with a matching value in a set of strings. The query mary/product-reviews/keywords contains "kids" would match the object with a tag called /mary/product-reviews/keywords and value ["cool", "kids", "adventure" ].
• Exclusion: Exclude objects with the except keyword. For example has nytimes.com/appeared except has james/seen. The except operator performs a set difference.
• Logic: Query components can be combined with and and or. For example, has sara/rating and tim/rating > 5.
• Grouping: Parentheses can be used to group query components. For example, has sara/rating and (tim/rating > 5 or mike/rating > 7).
Fluidinfo has a simple yet powerful query language (so simple, it fits on this slide) that can be used to extract data.
has boingboing.net/authors/markfrauenfelder and boingboing.net/year=2010
A BoingBoing.net example. All the articles Mark wrote in 2010.
>>> headers, body = fluidinfo.call('GET', '/values', tags=['boingboing.net/title', 'boingboing.net/created_on','boingboing.net/categories'], query="has boingboing.net/authors/markfrauenfelder and boingboing.net/year=2010")
Using a Python based client library (notice how I specify which tag values to return)
https://fluiddb.fluidinfo.com/values?query=has+boingboing.net%2Fauthors%2Fmarkfrauenfelder+and+boingboing.net%2Fyear%3D2010&tag=boingboing.net%2Ftitle&tag=boingboing.net%2Fcreated_on&tag=boingboing.net%2Fcategories
The client library makes a call to this URL...
{ "results": { "id": { "f2976562-eba6-47e4-94a1-b36ffe9a2ab1": { "boingboing.net/created_on": { "value": "2010-10-14 13:14:14" }, "boingboing.net/categories": { "value": [ "science", "technology", "art and design", "design" ] }, "boingboing.net/title": { "value": "TED releases iPad app today" } }, // etc... for lots of results } }}
You get a JSON dictionary back.
WHERE location NEAR pubs SERVING
SELECT self-catering-cottage FROM
AND pub HAS rating > 7 IN
Another example... It’s currently NOT possible to create queries like this on the web. Data is stored in walled gardens behind websites. Fluidinfo is different because data is stored in context (i.e. it’s tagged to a shared object).
WHERE location NEAR pubs SERVING
SELECT self-catering-cottage FROM
AND pub HAS rating > 7 IN
IMPOSS
IBLE
Because everyone’s data is stored in the context of shared objects it means it’s possible to create interesting queries using data (for which you have permission to read) from lots of different sources.
has boingboing.net/mentioned and has readwriteweb.com/mentioned and has unionsquareventures.com/portfolio
Which USV companies have been mentioned in articles on BoingBoing.net and ReadWriteWeb..?
http://www.twitter.comhttp://www.etsy.comhttp://www.boxee.tvhttp://www.meetup.com
objects about:
Objects whose about value is a domain have all been annotated with USV, BoingBoing and RWW information. We found four matches relating to four companies.
{u'boingboing.net/mentioned': {u'value': [u'http://boingboing.net/2009/11/06/vampireotherkinenerg.html', u'http://boingboing.net/2010/01/11/ny-times-on-urban-ca.html', u'http://boingboing.net/2010/10/26/ron-paul-supporter-w.html', u'http://boingboing.net/2002/06/27/meetup-meatspace-cam.html', u'http://boingboing.net/2004/03/17/wired-rave-awards.html', u'http://boingboing.net/2006/01/05/net-pug-nabbed-by-cr.html']},u'fluiddb/about': {u'value': u'http://www.meetup.com'},u'readwriteweb.com/mentioned': {u'value': [u'http://www.readwriteweb.com/archives/meetup_the_secret_campaign_weapon.php']}}
And we can ask Fluidinfo to return what those articles were... (the values of the mentioned tags). Here’s the result for the object about http://www.meetup.com
{“tagPaths”: [" “twitter.com/username”," “twitter.com/fullname”," “tunkrank.com/score”," “ntoll/met”," “terrycojones/met”," “python.org/member”," “ub.edu/alumni”," “ub.edu/bsc”," “uoc.edu/msc”," ... etc ...]}
Tags attached to the “about:esteve” object.
It’s also possible to find information by interrogating an interesting object for all the tags that are attached to it (that you are allowed to read).
object-centred-social
In conclusion, openly writable objects are tagged with data from lots of different sources.
ntoll
ceronman
timoreilly
aliafshar
esteve
terrycojones
fluidinfo
scoble
gfcampbell edyson
peacelily
widget
FOM
FOM
northackton
fluidinfo/staff
fluidinfo
/staff
fluidinfo/staff
fluidinfo/staff
fluidinfo
/staff
fluidinfo/investor fluidinfo/investor
nort
hack
ton/
mem
ber
northackton/member
ntoll/met
ntoll/met
ntoll/met
terrycojones/met
terrycojones/met
terrycojones/met
terrycojones/met
scoble
/blogge
d
widget/owns
fom
/dev
elop
er
fom/developer
ntoll/met
fom/user
fom/user
A network of annotated data arises.
ceronman
timoreilly
aliafshar
terrycojones
fluidinfo
edyson
peacelily
fluidinfo/staff
fluidinfo
/staff
fluidinfo/staff
fluidinfo/staff
fluidinfo/investor fluidinfo/adviso
r
ntoll/met
ntoll/met
terrycojones/met
terrycojones/met
terrycojones/met
scoble
/blogge
d
fom/developer
fom/user
nivi
terrycojones/met
Esther Dyson http://edventure.com/
http://www.flickr.com/photos/stewtopia/1413191259/
edyson
Where Google explores the digital world as it is, Fluidinfo is more of a distributed intellectual
construction tool. Basically, it's a new kind of database for open, typed data without the overhead of the "ontology" companies, along with a new kind of search engine. It's along the lines of
Metaweb but more flexible, with a very different model of data ownership, and with more focus on regular
people as end users.
A really good summary.