Slide 1

Slide 1 text

Desarrollando Aplicaciones con Ubuntu One Les Habla: Roberto Alsina Cualquier cosa, interrumpan, no hay problema. 1

Slide 2

Slide 2 text

Qué es Ubuntu One • Servicio de storage online • File sync • Music Store / Music Streaming • U1DB 2

Slide 3

Slide 3 text

Sync Client 3

Slide 4

Slide 4 text

APIs • Accounts • Files API • Music Streaming • U1DB 4

Slide 5

Slide 5 text

Accounts • Ubuntu Desktop • Websites • Windows • Hagalo usted mismo 5

Slide 6

Slide 6 text

Autorización en Ubuntu Usando ubuntuone.platform.credentials: @defer.inlineCallbacks def get_credentials(): tool = CredentialsManagementTool() creds = yield tool.register() oauth_consumer = oauth2.Consumer( creds['consumer_key'], creds['consumer_secret']) oauth_token = oauth2.Token( creds['token'], creds['token_secret']) 6

Slide 7

Slide 7 text

Autorización en Django OAuth 1.0a. Usando django_oauth_client: @oauth_token_required('ubuntuone') def create_volume(request): client = get_client(request.user, 'ubuntuone') response, content = client.request( 'https://one.ubuntu.com/api/file_storage/v1/volumes/~/Shoreham', 'PUT') return redirect('/accounts/profile/') 7

Slide 8

Slide 8 text

Hágalo Usted Mismo Bueno, es OAuth, fijáte. 8

Slide 9

Slide 9 text

Files • Volúmenes • Listar/Bajar/Subir/Borrar archivos • Publicar archivos • Interacción con Sync 9

Slide 10

Slide 10 text

En Websites @oauth_token_required('ubuntuone') def create_volume(request): client = get_client(request.user, 'ubuntuone') response, content = client.request( 'https://one.ubuntu.com/api/file_storage/v1/volumes/~/Shoreham', 'PUT') return redirect('/accounts/profile/') 10

Slide 11

Slide 11 text

En Ubuntu Es Via DBus: /folders method com.ubuntuone.SyncDaemon.Folders.create(path:s) 11

Slide 12

Slide 12 text

U1DB • Datos estructurados • Sincronizada • Distribuída • Online y Offline 12

Slide 13

Slide 13 text

Plataformas • Ubuntu/Windows/OS X - Python - SQLite • Ubuntu - Vala - SQLite • Ubuntu/Windows/OS X - C - SQLite • Web - javascript - localStorage • Android - Java - SQLite • iOS - Objective-C - SQLite 13

Slide 14

Slide 14 text

Documentos • create_doc • put_doc • revisiones • delete_doc • get_doc / get_docs 14

Slide 15

Slide 15 text

Índices Es un poco más denso, vean el manual? OK! 15

Slide 16

Slide 16 text

Crear Índices {"firstname": "John", "surname", "Barnes", "position": "left wing"} ID jb {"firstname": "Jan", "surname", "Molby", "position": "midfield"} ID jm {"firstname": "Alan", "surname", "Hansen", "position": "defence"} ID ah {"firstname": "John", "surname", "Wayne", "position": "filmstar"} ID jw create_index("by-firstname", ["firstname"]) 16

Slide 17

Slide 17 text

Usar el Índice get_from_index( "by-firstname", [("John", )]) Devuelve una lista de IDs. 17

Slide 18

Slide 18 text

Más Ejemplos get_from_index("by_firstname", [("J*")]) get_from_index("by_firstname", [("Jan"), ("Alan")]) 18

Slide 19

Slide 19 text

Ejemplo import json, u1db db = u1db.open(":memory:", create=True) doc1 = db.create_doc(json.dumps({"key": "value"}), doc_id="testdoc1") doc2 = db.create_doc(json.dumps({"key": "value"}), doc_id="testdoc2") for doc in db.get_docs(["testdoc2","testdoc1"]): print doc.doc_id Resultado: testdoc1 testdoc2 19

Slide 20

Slide 20 text

Syncing • API REST • Cliente / Servidor • Conflictos 20

Slide 21

Slide 21 text

Conflictos • Obtenés un ConflictedDoc • Pensás • Llamás a resolve_doc 21

Slide 22

Slide 22 text

Imaginación 22

Slide 23

Slide 23 text

Preguntas y (Ojalá) Respuestas email: [email protected] twitter: @ralsina 23