CouchDB y la computación
       voluntaria
Juan Julián Merelo Guervós
 Oficina de Software Libre
              &
       Grupo GeNeura
  Universidad de Granada
          @jjmerelo
Lecciones de andaluz (oriental)




                            Para programadores


Computación voluntaria + @CouchDB by @jjmerelo       2
Github
                       Git
Computación voluntaria + @CouchDB by @jjmerelo   3
CouchDB
Computación voluntaria + @CouchDB by @jjmerelo   4
JavaScript
Computación voluntaria + @CouchDB by @jjmerelo   5
¿Por qué?




Computación voluntaria + @CouchDB by @jjmerelo   6
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
Por tanto...



 Necesitamos un almacén
       de objetos

Computación voluntaria + @CouchDB by @jjmerelo   8
Deshojando la margarita




Computación voluntaria + @CouchDB by @jjmerelo   9
¿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
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
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
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
Vale, me has convencido. ¿Qué
                  necesitas?
Tareas
Usuarios
  Grupos
Estadísticas
GUI



Computación voluntaria + @CouchDB by @jjmerelo   14
¿Podrá my CouchDB con esto?




Computación voluntaria + @CouchDB by @jjmerelo   15
O, dicho de otro modo


   ¡Enséñanos ya el
    código, cohone!


Computación voluntaria + @CouchDB by @jjmerelo   16
Toma código


       bzr branch lp:couchdb-codemotion-ejemplos



        https://launchpad.net/couchdb-codemotion-ejemplos




Computación voluntaria + @CouchDB by @jjmerelo              17
Venga, vamos a ello.
Creemos la base de datos




Computación voluntaria + @CouchDB by @jjmerelo   18
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
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
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
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
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
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
Se acabaron los one-liners




Computación voluntaria + @CouchDB by @jjmerelo   25
Las tareas hay que hacerlas




Computación voluntaria + @CouchDB by @jjmerelo   26
Poco a poco, va hilando la vieja el
                   copo




Computación voluntaria + @CouchDB by @jjmerelo   27
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
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
Cómodamente, desde nuestro
                 colchón
Creamos una vista temporal para evaluarla.




Computación voluntaria + @CouchDB by @jjmerelo   30
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
Vamos a bajarnos del sillón
En la variedad está el gusto:
    npm install cradle




Computación voluntaria + @CouchDB by @jjmerelo   32
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
¿Tú de quién
          eres?




Computación voluntaria + @CouchDB by @jjmerelo   34
Volvamos a la pesca




Computación voluntaria + @CouchDB by @jjmerelo   35
Y ahora, a hacer sushi




Computación voluntaria + @CouchDB by @jjmerelo   36
No te lo quedes todo, quiyo




Computación voluntaria + @CouchDB by @jjmerelo   37
… 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
Lo más importante



               Ni siquiera tiene que ser voluntaria




Computación voluntaria + @CouchDB by @jjmerelo        39
Esto es todo




                     Muchas gracias
Computación voluntaria + @CouchDB by @jjmerelo   40
¿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

Computación voluntaria con CouchDB

  • 1.
    CouchDB y lacomputación voluntaria Juan Julián Merelo Guervós Oficina de Software Libre & Grupo GeNeura Universidad de Granada @jjmerelo
  • 2.
    Lecciones de andaluz(oriental) Para programadores Computación voluntaria + @CouchDB by @jjmerelo 2
  • 3.
    Github Git Computación voluntaria + @CouchDB by @jjmerelo 3
  • 4.
    CouchDB Computación voluntaria +@CouchDB by @jjmerelo 4
  • 5.
    JavaScript Computación voluntaria +@CouchDB by @jjmerelo 5
  • 6.
    ¿Por qué? Computación voluntaria+ @CouchDB by @jjmerelo 6
  • 7.
    Lista de deseos Bajoumbral de entrada Escalabilidad masiva Sistema todo-en-uno Tolerancia a fallos (salvo fallos bizantinos) Computación voluntaria + @CouchDB by @jjmerelo 7
  • 8.
    Por tanto... Necesitamosun almacén de objetos Computación voluntaria + @CouchDB by @jjmerelo 8
  • 9.
    Deshojando la margarita Computaciónvoluntaria + @CouchDB by @jjmerelo 9
  • 10.
    ¿Qué tiene debueno 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 deusar (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 lacomputació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, ¿paraqué 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 hasconvencido. ¿Qué necesitas? Tareas Usuarios Grupos Estadísticas GUI Computación voluntaria + @CouchDB by @jjmerelo 14
  • 15.
    ¿Podrá my CouchDBcon esto? Computación voluntaria + @CouchDB by @jjmerelo 15
  • 16.
    O, dicho deotro 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-ejemplos Computación voluntaria + @CouchDB by @jjmerelo 17
  • 18.
    Venga, vamos aello. Creemos la base de datos Computación voluntaria + @CouchDB by @jjmerelo 18
  • 19.
    Chuck Norris nousarí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í, perono 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á biende 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é vaa 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énse 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 losone-liners Computación voluntaria + @CouchDB by @jjmerelo 25
  • 26.
    Las tareas hayque 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 esotiene 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 nosé 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 bajarnosdel sillón En la variedad está el gusto: npm install cradle Computación voluntaria + @CouchDB by @jjmerelo 32
  • 33.
    Finalmente, llegamos ala 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 lapesca Computación voluntaria + @CouchDB by @jjmerelo 35
  • 36.
    Y ahora, ahacer sushi Computación voluntaria + @CouchDB by @jjmerelo 36
  • 37.
    No te loquedes 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 Sociode 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

  • #2 Imagen de sunlight in a jar en http://www.flickr.com/photos/sunlightinajar/1111631514/in/photostream/
  • #3 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.
  • #6 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í
  • #7 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.
  • #8 Foto subida por Texas_mustang a Flickr en http://www.flickr.com/photos/astros/3977731447/in/photostream/
  • #9 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.
  • #11 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.
  • #12 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.
  • #13 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
  • #14 Imagen de StudioTempura en http://www.flickr.com/photos/zero101/4783232763/in/photostream/
  • #15 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
  • #16 Imagen de Kalexanderson en http://www.flickr.com/photos/kalexanderson/5491910420/in/photostream/
  • #17 Imagen de Tojosan en http://www.flickr.com/photos/tojosan/448977929/in/photostream/
  • #18 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/
  • #19 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.
  • #20 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.
  • #21 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.
  • #23 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
  • #25 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.
  • #26 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
  • #27 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.
  • #28 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.
  • #30 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/
  • #31 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.
  • #32 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.
  • #33 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.
  • #34 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.
  • #36 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
  • #37 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.
  • #38 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.