Computación voluntaria con CouchDB
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Computación voluntaria con CouchDB

on

  • 1,486 views

Charla en el evento Codemotion 2012, construyendo paso a paso una aplicación para computación voluntaria basada en CouchDB

Charla en el evento Codemotion 2012, construyendo paso a paso una aplicación para computación voluntaria basada en CouchDB

Statistics

Views

Total Views
1,486
Views on SlideShare
1,485
Embed Views
1

Actions

Likes
1
Downloads
23
Comments
0

1 Embed 1

http://us-w1.rockmelt.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Imagen de sunlight in a jar en http://www.flickr.com/photos/sunlightinajar/1111631514/in/photostream/
  • He pedido traducción simultánea de mi idioma al vuestro, pero la organización no me la ha podido proporcionar. Así que para una correcta comprensión de mi charla, me veo obligado a impartirles unas cuantas lecciones de pronunciación de mi idioma materno: el andaluz oriental.
  • La academia andaluza oriental de la lengua, reunida en Porcuna, no ha logrado ponerse de acuerdo sobre la correcta pronunciación de esta palabra. Oscila entre jjjjjjavahcrí y avahcrí, pasando por javahcrí y havahcrí
  • Imagen de la izquierda de http://www.flickr.com/photos/cipherswarm/2414578959/ Christopher Bowns, de la derecha de ario_ http://www.flickr.com/photos/ario/4422273371/in/photostream/ No todo el mundo puede contar con un supercomputador. La computación voluntaria tiene su origen en el proyecto [email_address] de análisis de señales procedentes del espacio buscando regularidades.
  • Foto subida por Texas_mustang a Flickr en http://www.flickr.com/photos/astros/3977731447/in/photostream/
  • Imagen de Michael Flick en http://www.flickr.com/photos/17773534@N03/3237000861/in/photostream/ Object Store en general se define por oposición a una base de datos tradicional, en la que las columnas son fijas y se estructuran en tablas que tienen relación unas con otras. Una object store, o key-value store, o base de datos NoSQL, almacena documentos indexados, habitualmente, por una clave.
  • En realidad, es una situación bastante transitoria, porque Ubuntu one no va a funcionar ya sobre él; aunque otras utilidades, desde Evolution hasta Gwibber, hacen uso de él para almacenar cosas. La documentación dice que debería funcionar esto: dbus-send --session --dest=org.desktopcouch.CouchDB --print-reply --type=method_call / org.desktopcouch.CouchDB.getPort pero no siempre va. Al parecer, en Fedora va así. El interfaz que se muestra se llama Futon, y está escrito en JS/JQuery. Es el interfaz estándar para trabajar con CouchDB.
  • Una buena comparación en esta dirección http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis que incluye además a otras muchas. Imagen en http://www.flickr.com/photos/thristian/4870449203/ por Thristian.
  • Dato del trabajo de D. B. Anderson, http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1572226 Imagen de http://www.flickr.com/photos/23497193@N07/2870438187/in/photostream/ por frseti
  • Imagen de StudioTempura en http://www.flickr.com/photos/zero101/4783232763/in/photostream/
  • Imagen de UnitedBOINC http://www.unitedboinc.com/en/website-info/39-site-info/97-how-boinc-works Imagen del esquema de BOINC http://bof.linuxforum.dk/2005/slides/Carlos/tappingthematrix.html
  • Imagen de Kalexanderson en http://www.flickr.com/photos/kalexanderson/5491910420/in/photostream/
  • Imagen de Tojosan en http://www.flickr.com/photos/tojosan/448977929/in/photostream/
  • El código tiene licencia GPL, así que podéis hacer lo que queráis con él. Imagen de Daniel*1977 en http://www.flickr.com/photos/didmyself/2391229347/in/photostream/
  • El interfaz se llama futon. Adentrarse en el mundo del couchdb es como meterse en el Ikea: no hay más que colchones, tresillos, sofases y cosas por el estilo. Queda terminantemente prohibida la producción de chistes que incluyan la palabra verbenero, desorejado y cosas por el estilo.
  • Referencia: la guía de CouchDB: http://guide.couchdb.org/draft/tour.html El segundo es para nota, claro, en caso de tener instalado LWP, la librería de Perl para interaccionar con HTTP. Muestra de que CouchDB usa un interfaz REST. De que se puede acceder desde el ordenador local (y sólo el) por defecto. Y del “admin party”, todo el mundo es admin. Chungo, pero veamos como lo solucionamos. El tipo de letra, por cierto, es inconsolata.
  • Se supone que hemos averiguado antes cual es el puerto usando la orden correspondiente o bookmarkeado la dirección (generada cada vez que se conecta uno). El nombre usuario y la clave son también aleatorios. Imagen de Sam Newman en http://www.flickr.com/photos/samnewman/201940197/in/photostream/ Con las mismas, se puede usar DELETE para borrarla. Más fácil, imposible.
  • Y CouchDB es guay, porque podemos meter cualquier cosa. Una introducción buena al uso de la línea de órdenes está en http://www.morethanseven.net/2007/12/11/using-curl-to-play-with-couchdb.html
  • Uso node.js porque está hecho en JS, y se supone que esta charla va de JS. En todo caso, es un intérprete de JS con un modelo muy interesante, y al estar basado en eventos, encaja muy bien. Instrucciones básicas para usar nano http://writings.nunojob.com/2011/08/nano-minimalistic-couchdb-client-for-nodejs.html Y para saber más, http://nodejs.org Ojito! Los módulos de nodejs se instalan, salvo que se lo digas de otra manera, en el directorio superior al directorio en curso, así que si cambias las cosas de sitio ten cuidadín.
  • Imagen de Marco de Mojana http://www.flickr.com/photos/mmojana/225310330/in/photostream/ El código adaptado de http://writings.nunojob.com/2011/08/nano-minimalistic-couchdb-client-for-nodejs.html Usamos nano, un módulo para trabajar con CouchDB en node.js
  • Node.js funciona de forma asíncrona. Un poco como Jquery, pero todavía no hemos aprendido como hacer esas cosas en el propio CouchDB Una forma fácil de decir que las tareas se han llevado a cabo es usar las versiones: con la versión 2, hecha. Con la versión 1, por hacer. Así, de forma natural, podemos seleccionar las tareas que nos quedan por hacer. En este caso usamos node.js para hacerlo.
  • Imagen de Boston Public Library http://www.flickr.com/photos/boston_public_library/6031892513/in/photostream/ Trabajar con el interfaz bulk reduce el overhead, porque nos ahorramos la latencia por todos y cada uno de los documentos. En general, habrá que tener en cuenta cuanto tardan en llevarse a cabo las tareas para que la latencia (más que otras cosas) no se coman la ventaja que tenemos distribuyendo el trabajo.
  • En un sistema de computación voluntaria hay que seleccionar, al menos, unos pocos de los que haya disponibles para evaluar. Digamos que la revisión primera es la tarea sin hacer, la segunda la tarea realizada y la tercera comprobada. Seleccionemos a todos los elementos que estén en su segunda versión, para comprobarlos. El interfaz básico sólo permite seleccionar rangos de Ids. Creando Ids a medida, se pueden encontrar formas de particionar la BD, pero es más elegante (pero menos eficiente) hacer peticiones basadas en el contenido. Imagen titulada “Phan Thiet fisherman” de Lucas Jans http://www.flickr.com/photos/vsf/2130475253/in/photostream/
  • La función map de la izquierda se aplica a todos los elementos de la base de datos y produce la lista que se ve. Desde el mismo interfaz se puede guardar la vista para usarla más adelante.
  • CouchApp se puede descargar de Couchapp.org y de otras múltiples formas, esa es sólo una de ellas. Con un par de órdenes se crea una aplicación (que era, posiblemente, lo que teníamos que haber hecho desde el principio) y añadimos una vista. Editamos la vista y la subimos CouchDB Borrar cuidadosamente los reduce si no los vamos a usar, ojo.
  • Cradle es otro de los competidores de nano en el mercado de los módulos de couchdb para nodejs. Es parecido, en realidad, aunque tiene un nivel un poco más alto.
  • Imagen de rikkis_refuge en http://www.flickr.com/photos/rikkis_refuge/417852567/in/photostream/ Una pena que los únicos voluntarios que hayamos encontrado para nuestro sofá sean gatos, pero menos da una piedra. No parecen muy voluntariosos, tampoco.
  • Imagen en http://www.flickr.com/photos/shutterhack/3688916759/in/photostream/ por Fadzly @shutterhack Vamos a ver cómo se recuperaría la información en JQuery
  • Imagen de catorze14 en http://www.flickr.com/photos/catorze/5782407641/in/photostream/ Sushi es como le llamamos en Andalucía Oriental al pescaíto frito. Es decir, se trata de, una vez recuperada la información, hacer algo con ella. Aquí le hemos añadido un par de cosas más: nos bajamos sólo los que estén en un estado determinado “1”, es decir, sin evaluar, y además le decimos que incluya con cada resultado el documento correspondiente. Niños, no hagáis eso en casa. Eso es sólo para que aprendáis. Ya sabéis, el que sabe, sabe, y el que no aprende.
  • Hay que devolver a la base de datos lo que se ha calculado; se le añade al objeto el resultado y se vuelve a colocar en la base de datos.

Computación voluntaria con CouchDB Presentation Transcript

  • 1. CouchDB y la computación voluntariaJuan Julián Merelo Guervós Oficina de Software Libre & Grupo GeNeura Universidad de Granada @jjmerelo
  • 2. Lecciones de andaluz (oriental) Para programadoresComputación voluntaria + @CouchDB by @jjmerelo 2
  • 3. Github GitComputación voluntaria + @CouchDB by @jjmerelo 3
  • 4. CouchDBComputación voluntaria + @CouchDB by @jjmerelo 4
  • 5. JavaScriptComputación voluntaria + @CouchDB by @jjmerelo 5
  • 6. ¿Por qué?Computación voluntaria + @CouchDB by @jjmerelo 6
  • 7. Lista de deseosBajo umbral de entradaEscalabilidad masivaSistema todo-en-unoTolerancia a fallos (salvo fallos bizantinos)Computación voluntaria + @CouchDB by @jjmerelo 7
  • 8. Por tanto... Necesitamos un almacén de objetosComputación voluntaria + @CouchDB by @jjmerelo 8
  • 9. Deshojando la margaritaComputación voluntaria + @CouchDB by @jjmerelo 9
  • 10. ¿Qué tiene de bueno CouchDB?Fácil de instalar (sudo apt-get install couchdb) Posiblemente ya lo está (desktopcouch): /usr/lib/desktopcouch/desktopcouch- get-port http://localhost:<port>/_utils Más seguro: file:///home/{username}/.local/share/ desktop-couch/couchdb.htmlHosting gratuito: CloudAnt, IriscouchComputación voluntaria + @CouchDB by @jjmerelo 10
  • 11. Y ademásFácil de usar (interfaz REST)Versionado de documentosActualizaciones en tiempo real mediante _changesSoporte profesional con CouchBaseNo se vayan todavía, aún hay más.Computación voluntaria + @CouchDB by @jjmerelo 11
  • 12. Volvamos a la computación (in)voluntariaBOINC, paradigmático.Infraestructura basada en PHP/ MySQLCapaz de manejar 8 millones de peticiones al díaComputación voluntaria + @CouchDB by @jjmerelo 12
  • 13. Venga, confiesa, ¿para qué lo quieres? Ciencia low-cost. Ciencia ciudadana. Experimentos con algoritmos evolutivos Ciencia web: redes sociales + sistemas computacionalesComputación voluntaria + @CouchDB by @jjmerelo 13
  • 14. Vale, me has convencido. ¿Qué necesitas?TareasUsuarios GruposEstadísticasGUIComputación voluntaria + @CouchDB by @jjmerelo 14
  • 15. ¿Podrá my CouchDB con esto?Computación voluntaria + @CouchDB by @jjmerelo 15
  • 16. O, dicho de otro modo ¡Enséñanos ya el código, cohone!Computación voluntaria + @CouchDB by @jjmerelo 16
  • 17. Toma código bzr branch lp:couchdb-codemotion-ejemplos https://launchpad.net/couchdb-codemotion-ejemplosComputación voluntaria + @CouchDB by @jjmerelo 17
  • 18. Venga, vamos a ello.Creemos la base de datosComputación voluntaria + @CouchDB by @jjmerelo 18
  • 19. Chuck Norris no usaría el GUI curl -X PUT http://127.0.0.1:5984/dameargojmerelo@sheldon:~/$ lwp-request -m PUT http://localhost:5984/dameargoPlease enter content (text/plain) to be PUTed:[^D]Computación voluntaria + @CouchDB by @jjmerelo 19
  • 20. Voluntaria sí, pero no involuntariajmerelo@penny:~/txt/docencia/tutoriales$ curl -X PUT http://CvavBlnCni:yBJzPFKYie@localhost:47143/u na_nuevajmerelo@penny:~/txt/docencia/tutoriales$ curl -X PUT https://jjmerelo:atitelavoyadeci@jjmerelo.cloudant. com/otra_masComputación voluntaria + @CouchDB by @jjmerelo 20
  • 21. Ya está bien de crear bases de datos. O algo de eso.CouchDB almacena objetos JSON.Cada objeto tiene un _idMás metadatos: _revisionComputación voluntaria + @CouchDB by @jjmerelo 21
  • 22. Computación voluntaria: tareas + usuariosComencemos con las tareas Objetos JSON en una base de datos ID de tarea Datos de tareajmerelo@penny:~/txt/docencia/tutoriales$ curl -X POST https://jjmerelo:unapass@jjmerelo.iriscouch.com/a hora_no -H "Content-Type: application/json" -dComputación voluntaria + @CouchDB by @jjmerelo 22
  • 23. Entonces, ¿qué va a ser? 10110101 10101101 10110101 10101101 00110101 10111101 10110101=5 10101111=6 10101101 10110101 10101101 10101101=5 10100001 10111101 10101101 10111101 00110101 00110101#sofea via @jjmerelo @aiesparcia 23
  • 24. Chuck Norris también se cansa de la línea de órdenesY usa, por supuesto, node.jsjmerelo@penny:~$ sudo apt-get install nodejsjmerelo@penny:~$ curl http://npmjs.org/install.sh | sudo shComputación voluntaria + @CouchDB by @jjmerelo 24
  • 25. Se acabaron los one-linersComputación voluntaria + @CouchDB by @jjmerelo 25
  • 26. Las tareas hay que hacerlasComputación voluntaria + @CouchDB by @jjmerelo 26
  • 27. Poco a poco, va hilando la vieja el copoComputación voluntaria + @CouchDB by @jjmerelo 27
  • 28. Espera ¿todo eso tiene que hacer el voluntario?Hay voluntarios muy voluntariosos.Pero tampoco hay que abusar.Usemos los adjuntos de CouchDBCualquier objeto puede llevar documentos binarios adjuntos.Computación voluntaria + @CouchDB by @jjmerelo 28
  • 29. Cucha, que no sé como hacer peticionesPeticiones en CouchDB === Vistas.Las vistas son documentos de diseño.Vistas escritas en JavaScript En cualquier otro lenguaje, también.Dos partes: map y reduce Map: función sobre cada documento Reduce: aplicada a lista de documentos/clavesComputación voluntaria + @CouchDB by @jjmerelo 29
  • 30. Cómodamente, desde nuestro colchónCreamos una vista temporal para evaluarla.Computación voluntaria + @CouchDB by @jjmerelo 30
  • 31. Aún más comodamente, desde la línea de órdenesUsando CouchApp: sudo pip install couchappjmerelo@penny:~$ couchapp push https://usuario:clave@jjmerelo.iriscouch.com/ahora_noComputación voluntaria + @CouchDB by @jjmerelo 31
  • 32. Vamos a bajarnos del sillónEn la variedad está el gusto: npm install cradleComputación voluntaria + @CouchDB by @jjmerelo 32
  • 33. Finalmente, llegamos a la computación voluntaria de verasRecuperar del servidor al navegadorHacer cosas en el navegadorDevolver.Por supuesto, ¡con JQuery!Computación voluntaria + @CouchDB by @jjmerelo 33
  • 34. ¿Tú de quién eres?Computación voluntaria + @CouchDB by @jjmerelo 34
  • 35. Volvamos a la pescaComputación voluntaria + @CouchDB by @jjmerelo 35
  • 36. Y ahora, a hacer sushiComputación voluntaria + @CouchDB by @jjmerelo 36
  • 37. No te lo quedes todo, quiyoComputación voluntaria + @CouchDB by @jjmerelo 37
  • 38. … y así sucesivamenteSegunda fase de verifificación.Particionado probabilístico para muchos clientes.Replicación de ida y vuelta para menor latencia(usar desktopcouch).Predicción de prestaciones social...Computación voluntaria + @CouchDB by @jjmerelo 38
  • 39. Lo más importante Ni siquiera tiene que ser voluntariaComputación voluntaria + @CouchDB by @jjmerelo 39
  • 40. Esto es todo Muchas graciasComputación voluntaria + @CouchDB by @jjmerelo 40
  • 41. ¿Preguntas? + PerfilSocio de Digital Learning, enseñanza virtual: http://dlformacion.comLujoyglamour.net, la única novela que te puedes descargar de CPAN: cpan Net::LujoyglamourOficina de software libre de la UGR: http://osl.ugr.esGrupo de investigación GeNeuraComputación voluntaria + @CouchDB by @jjmerelo 41