El documento describe cómo CouchDB puede usarse para implementar un sistema de computación voluntaria. Explica que CouchDB es adecuado debido a su bajo umbral de entrada, escalabilidad, tolerancia a fallos y capacidad de almacenar objetos. A continuación, muestra código para crear bases de datos y almacenar tareas y usuarios como documentos JSON, y explica cómo usar vistas para realizar consultas. Finalmente, propone integrar el sistema con un navegador web usando jQuery.
7. Lista de deseos
Bajo umbral de entrada
Escalabilidad masiva
Sistema todo-en-uno
Tolerancia a fallos (salvo fallos bizantinos)
Computación voluntaria + @CouchDB by @jjmerelo 7
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.html
Hosting gratuito: CloudAnt, Iriscouch
Computación voluntaria + @CouchDB by @jjmerelo 10
11. Y además
Fácil de usar (interfaz REST)
Versionado de documentos
Actualizaciones en tiempo real mediante
_changes
Soporte profesional con CouchBase
No se vayan todavía, aún hay más.
Computación voluntaria + @CouchDB by @jjmerelo 11
12. Volvamos a la computación
(in)voluntaria
BOINC,
paradigmático.
Infraestructura
basada en PHP/
MySQL
Capaz de manejar
8 millones de
peticiones al día
Computació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
computacionales
Computación voluntaria + @CouchDB by @jjmerelo 13
14. Vale, me has convencido. ¿Qué
necesitas?
Tareas
Usuarios
Grupos
Estadísticas
GUI
Computació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
18. Venga, vamos a ello.
Creemos la base de datos
Computación voluntaria + @CouchDB by @jjmerelo 18
19. Chuck Norris no usaría el GUI
curl -X PUT http://127.0.0.1:5984/dameargo
jmerelo@sheldon:~/$ lwp-request -m PUT
http://localhost:5984/dameargo
Please enter content (text/plain) to be PUTed:
[^D]
Computación voluntaria + @CouchDB by @jjmerelo 19
20. Voluntaria sí, pero no involuntaria
jmerelo@penny:~/txt/docencia/tutoriales$ curl -X
PUT
http://CvavBlnCni:yBJzPFKYie@localhost:47143/u
na_nueva
jmerelo@penny:~/txt/docencia/tutoriales$ curl -X
PUT
https://jjmerelo:atitelavoyadeci@jjmerelo.cloudant.
com/otra_mas
Computació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 _id
Más metadatos: _revision
Computación voluntaria + @CouchDB by @jjmerelo 21
22. Computación voluntaria: tareas +
usuarios
Comencemos con las tareas
Objetos JSON en una base de datos
ID de tarea
Datos de tarea
jmerelo@penny:~/txt/docencia/tutoriales$ curl -X
POST
https://jjmerelo:unapass@jjmerelo.iriscouch.com/a
hora_no -H "Content-Type: application/json" -d
Computació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 órdenes
Y usa, por supuesto, node.js
jmerelo@penny:~$ sudo apt-get install nodejs
jmerelo@penny:~$ curl http://npmjs.org/install.sh |
sudo sh
Computación voluntaria + @CouchDB by @jjmerelo 24
25. Se acabaron los one-liners
Computación voluntaria + @CouchDB by @jjmerelo 25
26. Las tareas hay que hacerlas
Computación voluntaria + @CouchDB by @jjmerelo 26
27. Poco a poco, va hilando la vieja el
copo
Computació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 CouchDB
Cualquier objeto puede llevar documentos
binarios adjuntos.
Computación voluntaria + @CouchDB by @jjmerelo 28
29. Cucha, que no sé como hacer
peticiones
Peticiones 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/claves
Computación voluntaria + @CouchDB by @jjmerelo 29
30. Cómodamente, desde nuestro
colchón
Creamos una vista temporal para evaluarla.
Computación voluntaria + @CouchDB by @jjmerelo 30
31. Aún más comodamente, desde la
línea de órdenes
Usando CouchApp:
sudo pip install couchapp
jmerelo@penny:~$ couchapp push
https://usuario:clave@jjmerelo.iriscouch.com/ahora_no
Computación voluntaria + @CouchDB by @jjmerelo 31
32. Vamos a bajarnos del sillón
En la variedad está el gusto:
npm install cradle
Computación voluntaria + @CouchDB by @jjmerelo 32
33. Finalmente, llegamos a la
computación voluntaria de veras
Recuperar del servidor al
navegador
Hacer cosas en el navegador
Devolver.
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 pesca
Computación voluntaria + @CouchDB by @jjmerelo 35
36. Y ahora, a hacer sushi
Computación voluntaria + @CouchDB by @jjmerelo 36
37. No te lo quedes todo, quiyo
Computación voluntaria + @CouchDB by @jjmerelo 37
38. … y así sucesivamente
Segunda 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 voluntaria
Computación voluntaria + @CouchDB by @jjmerelo 39
40. Esto es todo
Muchas gracias
Computación voluntaria + @CouchDB by @jjmerelo 40
41. ¿Preguntas? + Perfil
Socio de Digital Learning, enseñanza virtual:
http://dlformacion.com
Lujoyglamour.net, la única novela que te puedes
descargar de CPAN:
cpan Net::Lujoyglamour
Oficina de software libre de la UGR:
http://osl.ugr.es
Grupo de investigación GeNeura
Computación voluntaria + @CouchDB by @jjmerelo 41
Notas del editor
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.