using fluiddb with django
DESCRIPTION
Slides from my introductory talk to the Django User Group: London (DJUGL) talk in July 2010 at the Guardian.TRANSCRIPT
![Page 2: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/2.jpg)
The Agenda:
What?Why?How?
Where?Django?
![Page 3: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/3.jpg)
What?
![Page 4: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/4.jpg)
FluidDB is a platform for the web of things,
each represented by an openly writable “social”
object.
![Page 5: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/5.jpg)
http://www.flickr.com/photos/psd/1428129861/
![Page 6: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/6.jpg)
Why?
![Page 7: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/7.jpg)
http://www.flickr.com/photos/jointhedots/4622191119/
![Page 8: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/8.jpg)
People I know
![Page 9: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/9.jpg)
WHERE location NEAR pubs SERVING
SELECT self-catering-cottage FROM
AND pub HAS rating > 7 IN
![Page 10: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/10.jpg)
Share, annotate, augment and re-use information.
![Page 11: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/11.jpg)
How?
![Page 12: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/12.jpg)
There is only one FluidDB. All users and applications share the
same database.
![Page 13: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/13.jpg)
•Objects - represent things
•Tags - define objects’ attributes
•Namespaces - organise tags
• Permissions - control access
![Page 15: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/15.jpg)
Data Structure
entity / attribute / value
![Page 16: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/16.jpg)
Data Structure
object / tag / value(in FluidDB parlance)
![Page 17: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/17.jpg)
Data Structure
object / tag / value(optional)
![Page 18: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/18.jpg)
Namespaces/Tags
ntoll/ratingterrycojones/books/reviewamazon.com/book/titleamazon.com/book/authoramazon.com/book/isbnesteve/books/covertimoreilly/has_read
![Page 19: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/19.jpg)
An object
about = “book:Dune”
id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”
![Page 20: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/20.jpg)
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
estev
e/boo
ks/co
ver =
id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”
![Page 21: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/21.jpg)
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
estev
e/boo
ks/co
ver =
booleanstring (& set)numericopaquenull
id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”
![Page 22: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/22.jpg)
snoissimreP(seem to be back-to-front)
![Page 23: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/23.jpg)
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
estev
e/boo
ks/co
ver =
Traditional:
id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”
![Page 24: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/24.jpg)
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
estev
e/boo
ks/co
ver =
FluidDB:
id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”
![Page 25: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/25.jpg)
You control who can see, read or use your tags.
![Page 26: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/26.jpg)
Anyone can tag information to an object.
http://www.flickr.com/photos/fixe/3415776837/
![Page 27: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/27.jpg)
Permissions
• Apply to namespaces, tags and tag-values not objects
• Scoped by actions (e.g. “see”, “create”, “read”)
• Either “open” or “closed” with a list of exceptions
![Page 28: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/28.jpg)
FluidDB’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).
![Page 29: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/29.jpg)
{“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.
![Page 30: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/30.jpg)
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/fluidDB/api/*/*/*
A RESTful API
![Page 31: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/31.jpg)
Social data?
![Page 32: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/32.jpg)
http://www.flickr.com/photos/8001265@N08/2259250324/
Let me demonstrate!
![Page 33: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/33.jpg)
Where?
![Page 35: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/35.jpg)
• Twitter: @fluidDB @terrycojones @esteve & @ntoll
• http://youtube.com/fluiddb
• #fluiddb on Freenode IRC
• http://groups.google.com/group/fluiddb-users
• http://groups.google.com/group/fluiddb-discuss
![Page 36: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/36.jpg)
Lots of 3rd party libraries:
Java, Clojure, Lisp, .NET, Perl, Python, Ruby, PHP & Javascript (all open-source)
http://fluidinfo.com/developers/libs
![Page 37: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/37.jpg)
Django?
![Page 38: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/38.jpg)
http://github.com/fluidinfo/django-fluiddb
![Page 39: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/39.jpg)
Familiar Models
from django_fluiddb import models
class Foo(models.Model): bar = models.CharField(‘test/namespace/bar_tag’) baz = models.IntegerField(‘test/namespace/baz_tag’)
![Page 40: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/40.jpg)
Familiar Forms
from django_fluiddb.forms import ModelForm
class FooForm(ModelForm): class Meta: model = Foo
![Page 41: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/41.jpg)
It’s only the FOM underneathhttp://bitbucket.org/aafshar/fom-main/
![Page 42: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/42.jpg)
We’re listening to youthough the usual caveats apply ;-)
![Page 43: Using FluidDB with Django](https://reader034.vdocument.in/reader034/viewer/2022042606/545c7a10af7959b90e8b47aa/html5/thumbnails/43.jpg)
Questions..?