cloud computing: algoritmos en la nube

94
Cloud Computing: Amazon Web Services, Apache Hadoop y Widgets

Upload: david-j-brenes

Post on 20-Jan-2015

2.387 views

Category:

Technology


2 download

DESCRIPTION

Algunos algoritmos de la Web 2.0 exigen una capacidad de cálculo que no todos los servidores pueden proporcionar. ¿Qué posibilidades hay ahora mismo para ejecutar algoritmos de manera distribuida? ¿Y para montar una infraestructura de ordenadores? ¿Podríamos instalar nuestras aplicaciones en plataformas web? ¿Podríamos llegar a más usuarios? Estas transparencias están basadas en unas confeccionadas por mi para un curso sobre Cloud Computing.

TRANSCRIPT

Page 1: Cloud Computing: Algoritmos en la Nube

Cloud Computing:

Amazon Web Services,

Apache Hadoop y

Widgets

Page 2: Cloud Computing: Algoritmos en la Nube

Previously…

Page 3: Cloud Computing: Algoritmos en la Nube

Previously…

Page 4: Cloud Computing: Algoritmos en la Nube

Así que ahora…

Fotografía publicada bajo Creative Commons por el usuario santi_martin en flickr: http://www.flickr.com/photos/santi_martin/2944882285/

Page 5: Cloud Computing: Algoritmos en la Nube

¿Y ahora?

?

Page 6: Cloud Computing: Algoritmos en la Nube

Cuando no todo es CRUDo

Emergencia en la web 2.0o Los datos puros no son lo único.

Page 7: Cloud Computing: Algoritmos en la Nube

Cuando no todo es CRUDo

Emergencia en la web 2.0o Las entradas del usuario pueden

generar cambios.

Page 8: Cloud Computing: Algoritmos en la Nube

Cuando no todo es CRUDo

Emergencia en la web 2.0o Los algoritmos suelen ser costosos

Page 9: Cloud Computing: Algoritmos en la Nube

Cuando no todo es CRUDo

Emergencia en la web 2.0o Normalmente se cachean los resultados

o Permite una mayor separación de capas

o Alivia la carga al ejecutarse una sola vez

o Presenta problemas de actualización

o Cacheando solo parte (Google, la Wikipedia y otros RSS)

Page 10: Cloud Computing: Algoritmos en la Nube

Los caminos de la escalada

Hardware

o Mayor potencia de cálculo

o Escalado de una máquina (límite tecnológico)

o Granjas de servidores (dificultades lógicas)

Software

o Necesidades especiales

o Aprovechamiento del multiprocesador

o Aprovechamiento de las redes

Page 11: Cloud Computing: Algoritmos en la Nube

Los caminos de la escalada

Hardware

o Límites tecnológicos de crecimiento

o Complicado mantenimiento de instalaciones

o Dispositivos no triviales (SANs, gestión avanzada de redes, equipos con características especiales…)

o Dificultades de administración

o Costes de almacenaje y acondicionamiento.

o Resistencia a fallos.

Page 12: Cloud Computing: Algoritmos en la Nube

Los caminos de la escalada

Softwareo Dificultad de programación a través de redes.

o Estrategia bottom-up:• División del problema

• Composición de las soluciones

o Deformación del uniproceso.

o Dificultad de mantenimiento.

o Registro de errores

Page 13: Cloud Computing: Algoritmos en la Nube

Cloud Computing

Page 14: Cloud Computing: Algoritmos en la Nube

Cloud Computing El nuevo paradigma de computación

distribuidao Los recursos (CPU, Disco...) se comparten a

traves de Internet.

o Virtualización de dispositivos

o Desarrollo de estrategias de tolerancia a fallos

o Independencia de plataforma

Page 15: Cloud Computing: Algoritmos en la Nube

Cloud Computing Computación distribuida a la Web 2.0

o Software as a Service

o Uso de tecnologías web (SOAP, Rest, Ajax...) estándar

o Minimización de soluciones ad-hoc

o Mezcla de diversos servicios

o Trabajo en entornos heterogéneos

Page 16: Cloud Computing: Algoritmos en la Nube

Cloud Computing Ejecución remota

o Aplicaciones completas sin apenas recursos

Ideal para entornos RIA (Air, XUL...) Widgets El caso Spotify

o Ideal para dispositivos móviles (iPhone, Android...)

o Actualizaciones instantáneas

o Independencia de localización

Page 17: Cloud Computing: Algoritmos en la Nube

Cloud Computing Ventajas

o Liberación de carga computacional

o Simplificación de infraestructura

o Ahorro de costes

o Persistencia de servicios (datos, aplicaciones)

o Independencia de localización

o Facilidad de adopción de aplicaciones

Page 18: Cloud Computing: Algoritmos en la Nube

Cloud Computing Inconvenientes

o Dependencia de la red

o Dependencia de terceros (caso GMail)

o Falta de control (polémica Facebook)

o Riesgos de seguridad

Page 19: Cloud Computing: Algoritmos en la Nube

Cloud Computing ¿Quien habla de esto?

Page 20: Cloud Computing: Algoritmos en la Nube

Cloud Computing ¿Quien habla de esto?

¿Futura Web 2.0?

Page 21: Cloud Computing: Algoritmos en la Nube

Cloud Computing ¿Quien juega a esto?

o Google (Google Apps)

o Sun (Sun Grid, Sun Cloud)

o Amazon (Amazon Web Services: EC2, S3, SimpleDB...)

o Microsoft (Azure)

o Apache (CouchDB, Hadoop)

o Yahoo! (Open Social, Pipes, Y!OS)

Page 22: Cloud Computing: Algoritmos en la Nube

Amazon EC2

Page 23: Cloud Computing: Algoritmos en la Nube

Amazon EC2 ¿Qué es Amazon EC2?

o Infraestructura en la nube

o Instalación de máquinas virtuales para ejecución de procesos

o Total control de administración sobre la máquina virtual remota

o Amazon proporciona los servicios de escalabilidad y fiabilidad del servicio

Page 24: Cloud Computing: Algoritmos en la Nube

Amazon EC2 ¿Cómo conectarse a Amazon EC2?

o http://aws.amazon.com/ec2/

o AWS Management Console: https://console.aws.amazon.com/

o Versión Beta de una interfaz central de administración para AWS

Page 25: Cloud Computing: Algoritmos en la Nube

Amazon EC2 ¿Cómo dar de alta una máquina en Amazon

EC2?o Máquinas virtuales: Amazon Machine Image

o Lanzamos una nueva instancia

o Seleccionamos la imagen

o Plataforma.

o Número de instancias

o Capacidad de la máquina

o Keypair a usar

Page 26: Cloud Computing: Algoritmos en la Nube

Amazon EC2 Personalización de las AMIs

o Se pueden crear AMIs personalizadas

o A partir de Máquinas Windows

o Facilidad para crear máquinas replicadas

Page 27: Cloud Computing: Algoritmos en la Nube

Amazon EC2 Elastic Block Store

o Posibilidad de crear volúmenes compartidos entre las instancias

o Se comportan como un disco normal

• Formatear

• Montar/Desmontar

• RAID

o Se pueden crear copias de seguridad

Page 28: Cloud Computing: Algoritmos en la Nube

Amazon EC2 Elastic IPs

o Mecanismo para hacer el servicio independiente de la instancia

o Enmascaran el acceso a una máquina mediante una IP pública

o Facilidad para recuperación de errores y alta disponibilidad

Page 29: Cloud Computing: Algoritmos en la Nube

Amazon EC2 Seguridad

o Creación de KeyPairs para acceso por SSH

o Creación de grupos de seguridad

o Tipo de conexión

o Ancho de banda

Page 30: Cloud Computing: Algoritmos en la Nube

Amazon EC2 API

o Como todo Amazon Web Service tiene API

o Permite acceder a los recursos vistos antes

o Permite crear aplicaciones de gestión

o ¿Ausencia de interfaz de administración?

Page 31: Cloud Computing: Algoritmos en la Nube

Amazon S3

Page 32: Cloud Computing: Algoritmos en la Nube

Amazon S3 ¿Qué es Amazon S3?

o Sistema de almacenamiento de ficheros en la nube

o Creación de carpetas

o Subida de ficheros

o Análogo al FTP

Page 33: Cloud Computing: Algoritmos en la Nube

Amazon S3 Conceptos

o Buckets

o Directorios

o Ficheros

o Permisos

Page 34: Cloud Computing: Algoritmos en la Nube

Amazon S3 API

o Como todo Amazon Web Service tiene API

o Permite crear/listar/actualizar/eliminar buckets, directorios, ficheros…

o ¿Ausencia de interfaz de administración?

Otros accesoso HTTP

o Protocolo s3

Page 35: Cloud Computing: Algoritmos en la Nube

Apache Hadoop

Page 36: Cloud Computing: Algoritmos en la Nube

Apache Hadoop ¿Qué es Apache Hadoop?

o Plataforma de computación distribuida

o Desarrollada sobre la plataforma Java

o “Implementación” open-source basada en:

• Google FileSystem

• Google MapReduce

Page 37: Cloud Computing: Algoritmos en la Nube

Apache Hadoop HDFS

o Hadoop's Distributed File System

o Diseñado para detección de fallos y recuperación automática

o Acceso a modo streaming

o Soporte para grandes conjuntos de datos.

o Optimizado para lecturas

o Multiplataforma

Page 38: Cloud Computing: Algoritmos en la Nube

Apache Hadoop MapReduce

o Arquitectura de computación distribuida

o Mútiples implementaciones (Google, Hadoop, CouchDB, Facebook Hive…)

o Basado en la estrategia dividir-vencer

Page 39: Cloud Computing: Algoritmos en la Nube

Apache Hadoop MapReduce

Input

Map

Output

Reduce

Realiza una primera computación devolviendo

resultados intermedios

Realiza una segunda computación sobre esos resultados intermedios

Resultados intermedios

Ficheros [K1, V1] [K2, V2] [K3, V3] Ficheros

Page 40: Cloud Computing: Algoritmos en la Nube

Apache Hadoop MapReduce

o No todos los problemas son aplicables a este modelo

o La entrada debe ser fácilmente divisible

o Los resultados deben poder ser agregados

CouchDB y MapReduceo ¿Se reconoce la estructura?

o Map: Obtener los resultados

o Reduce: Realizar operaciones sobre los resultados intermedios

Page 41: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

Input

Map

Output

ReduceResultados intermedios

Ficheros [K1, V1] [K2, V2] [K3, V3] Ficheros

Page 42: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

o InputFormat y RecordReader

• Juntos se encargan de dividir los datos de entrada

• Devuelven registros

• Especifican los tipos de las claves y valores de entrada al algoritmo Map

Page 43: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

Input

Map

Output

ReduceResultados intermedios

Ficheros [K1, V1] [K2, V2] [K3, V3] Ficheros

Page 44: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

o Mapper

• Implementa la fase Map del algoritmo

• Se invoca el método “map” una vez por cada registro (Record)

• Recibe pares clave/valor del tipo especificado por el RecordReader

• Devuelve pares clave/valor de nuevos tipos

Page 45: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

o Combiner

• Reagrupa los resultados intermedios

• Reduce el tamaño de los datos a enviar de una fase a otra al ejecutar operaciones para agrupar los resultados

• Dependiendo del problema no resulta viable

• Envía los resultados agregados a la fase Reduce

Page 46: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

Input

Map

Output

ReduceResultados intermedios

Ficheros [K1, V1] [K2, V2] [K3, V3] Ficheros

Page 47: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

o Reducer

• Implementa la fase Reduce del Algoritmo

• Recibe pares clave/valor del tipo especificado por la fase Map

• Devuelve pares clave/valor de nuevos tipos

Page 48: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

Input

Map

Output

ReduceResultados intermedios

Page 49: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

o JobConf

• Configuración del trabajo distribuido

• Permite especificar Mappers, Reducers, InputFormats…

• Permite especificar opciones ad-hoc

Page 50: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework

o Tool

• Crea las configuraciones de trabajos

• Permite crear más de un trabajo distribuido

Page 51: Cloud Computing: Algoritmos en la Nube

Apache Hadoop El Framework… ¿Y si no quiero Java?

o Modo Streaming

• Permite usar lenguajes “de script” (PHP, Python, Ruby…)

• Especificamos un Mapper y un Reducer

• Los datos se pasan a los scripts, que se ejecutan

Page 52: Cloud Computing: Algoritmos en la Nube

Apache Hadoop Creando un cluster

1. Preparando todas las máquinas

o Instalar soporte para Hadoop

o Copiar algoritmos necesarios

o Modificar hadoop-env.sh: Indicar JAVA_HOME

Page 53: Cloud Computing: Algoritmos en la Nube

Apache Hadoop Creando un cluster

1. Configurando el cluster

o NameNode: Nodo encargado de gestionar el sistema de ficheros distribuido de Apache

o JobTracker: Nodo encargado de gestionar los trabajos pendientes

Page 54: Cloud Computing: Algoritmos en la Nube

Apache Hadoop Creando un cluster

1. Configurando el clustero Hadoop-site.xml

<property> <name>fs.default.name</name> <value>hdfs://{{IP del NameNode}}:{{Puerto del NameNode}}</value> <description>La URI del sistema de ficheros. </description></property>

Page 55: Cloud Computing: Algoritmos en la Nube

Apache Hadoop Creando un cluster

1. Configurando el clustero Hadoop-site.xml

<property> <name>mapred.job.tracker</name> <value>{{IP del JobTracker}}:{{Puerto del JobTracker}}</value> <description>El host y el puerto donde correra el jobTracker. </description></property>

Page 56: Cloud Computing: Algoritmos en la Nube

Apache Hadoop Creando un cluster

1. Configurando el cluster

o masters / slaves: ficheros en que se indican maestros y esclavos

Page 57: Cloud Computing: Algoritmos en la Nube

Apache Hadoop Creando un cluster

1. Iniciar el cluster

o bin/start-all.sh

Page 58: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce

Page 59: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce Storm Computing

Hadoop

EC2

S3

Page 60: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce Storm Computing

Hadoop

EC2

S3

Amazon Map/Reduce

Page 61: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce Falta de acoplamiento

o Amazon EC2 incorpora la infraestructura necesaria

o Apache Hadoop nos proporciona un framework para desarrollar algoritmos para procesar grandes conjuntos de datos

o Amazon S3 nos permite almacenar grandes cantidades de ficheros asegurando la disponibilidad

Page 62: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce ¿Qué es Amazon Map/Reduce?

o Servicio Web de Amazon para implementar algoritmos Map/Reduce

o Nos permite crear trabajos de Apache Hadoop que operen sobre datos de Amazon S3, en instancias de Amazon EC2.

Page 63: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce ¿Cómo funciona Amazon Map/Reduce?

1. Configurando la entrada y la salida

o Cargamos los datos de entrada en Amazon S3

o Cargamos el algoritmo en Amazon S3

o Creamos el directorio de salida en Amazon S3

Page 64: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce ¿Cómo funciona Amazon Map/Reduce?

1. Cargando el algoritmo

o Hay que compilar nuestro algoritmo en un .jar

javac -classpath ${HADOOP_HOME}/hadoop-${HADOOP_VERSION}-

core.jar -d output_directory WordCount.java

jar -cvf output_file.jar-C output_directory/ .

Page 65: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce ¿Cómo funciona Amazon Map/Reduce?

1. Creamos el trabajo

o En la AWS Console

o “Create new Job Flow ”

o Elegimos el tipo de algoritmo

o Elegimos la entrada y la salida

Page 66: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce ¿Cómo funciona Amazon Map/Reduce?

1. Creamos las instancias

o Elegimos número de instancias

o Elegimos tipo de instancias

Page 67: Cloud Computing: Algoritmos en la Nube

Amazon Map/Reduce ¿Cómo funciona Amazon Map/Reduce?

1. Ejecutamos

o Ventana de Estado en la AWS Console

o Salida en directorios de Amazon S3

Page 68: Cloud Computing: Algoritmos en la Nube

Widgets

Page 69: Cloud Computing: Algoritmos en la Nube

Widgets ¿Dónde está la nube?

Page 70: Cloud Computing: Algoritmos en la Nube

Widgets ¿Dónde está la nube?

Page 71: Cloud Computing: Algoritmos en la Nube

Widgets ¿Que perciben los usuarios?

o Las revoluciones deben afectar a los usuarios

o Percepción indirecta (mejores servicios)

o ¿Percepción directa?

Page 72: Cloud Computing: Algoritmos en la Nube

Widgets Cloud Computing para los usuarios

o Mayor uso de servicios alojados en la web

o Mayor interconexión entre servicios

o Acceso ubicuo

o Difuminar el acceso a la siguiente capa:

• ¿Quién se conecta?• ¿Cuando?• ¿A donde?

Page 73: Cloud Computing: Algoritmos en la Nube

Widgets Cloud Computing para los usuarios

Page 74: Cloud Computing: Algoritmos en la Nube

Widgets Cloud Computing para los usuarios

Widget

Page 75: Cloud Computing: Algoritmos en la Nube

Widgets ¿Qué es un Widget?

portable chunk of code that can be installed and executed within any separate HTML-based web page by an end user without requiring

additional compilation. - Wikipedia

o Facilidad de instalacion

o Uso de Servicios Web y Ajax para interacción con el widget

o Dependencia de la aplicación de terceros

o Nosotros somos la nube

Page 76: Cloud Computing: Algoritmos en la Nube

Widgets Plataformas de Widgets

o Aplicaciones web específicas para ejecución de Widgets

o API de desarrollo

o Funciones sociales para ordenación y filtrado de Widgets

o Ejemplos:

• DockBar• Netvibes• iGoogle• Blogger

Page 77: Cloud Computing: Algoritmos en la Nube

Google Gadgets Google Gadget

o Plataforma de Widgets de Google

o Distribución por Orkut, Google Desktop o iGoogle

o Publicables en cualquier página web.

o Mllones de potenciales usuarios

o Desarrollo con HTML y Javascipt

o API: http://code.google.com/intl/en/apis/gadgets/docs/dev_guide.html

Page 78: Cloud Computing: Algoritmos en la Nube

Google Gadgets Hello World!

<?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="hello world example" /> <Content type="html"> <![CDATA[ Hello, world! ]]> </Content> </Module>

o ModulePrefs: Datos sobre el widget

o <![CDATA[ ----- contenido ------ ]]>

Page 79: Cloud Computing: Algoritmos en la Nube

Google Gadgets Content

o Sección central del widget

o Opción 1: Implementar vista y lógica con HTML y Javascript (<content type=”html”>)

o Opción 2: Implementar vista y lógica en una aplicación web en un servidor y enlazar a ella (<content type=”url” href=”...”>)

<Content type="html"><![CDATA[ contenido ]]></Content>

<Content type=“url“ href=“…” />

Page 80: Cloud Computing: Algoritmos en la Nube

Google Gadgets Obteniendo datos

o Realiza petición a una URL

o Se ejecuta un callback tras la petición donde se procesan los resultados.

gadgets.io.makeRequest(url, response, params);

function response(obj)

o obj.data = Datos parseados

o obj.errors = Errores

o obj.text = Texto de la respuesta

Page 81: Cloud Computing: Algoritmos en la Nube

Google Gadgets Obteniendo datos

o Tipos de datos esperados

• Text: gadgets.io.ContentType.TEXT

• Dom: gadgets.io.ContentType.DOM

• Json: gadgets.io.ContentType.JSON

• Feed: gadgets.io.ContentType.FEED

o Influyen en el parseo de la respuesta

Page 82: Cloud Computing: Algoritmos en la Nube

Google Gadgets Obteniendo datos

o Tipos de datos esperados

• Text: gadgets.io.ContentType.TEXT

• Dom: gadgets.io.ContentType.DOM

• Json: gadgets.io.ContentType.JSON

• Feed: gadgets.io.ContentType.FEED

o Influyen en el parseo de la respuesta

Page 83: Cloud Computing: Algoritmos en la Nube

Google Gadgets Obteniendo datos<script type="text/javascript"> function consultarDBs(){ var params = {}; params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON; var url = "http://host/_all_dbs"; gadgets.io.makeRequest(url, cargarDBs, params);} function cargarDBs(obj){ var html = "<ul>"; for (var key in obj.data) { html += "<li>"+ obj.data[key] + "</li>"; } document.getElementById('dbs').innerHTML = html;}</script>

Page 84: Cloud Computing: Algoritmos en la Nube

Google Gadgets

¡¡¡¡ gagdets.io is not defined !!!!

o Parte del nuevo API de Google Gadget

o Aún no soportado por iGoogle

• Soportado por otros: http://wiki.opensocial.org/index.php?title=Cross-container_Development#Containers

o Disponible en el sandbox de desarrollo: http://www.google.com/ig/sandbox

Page 85: Cloud Computing: Algoritmos en la Nube

Google Gadgets

Enviando información

o Método de petición como parámetro de la Request

<script type="text/javascript"> function sendData(data){ var params = {}; params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST; params[gadgets.io.RequestParameters.POST_DATA] = data;

var url = "http://host/_all_dbs"; gadgets.io.makeRequest(url, callback, params);} function callback(obj){...}</script>

Page 86: Cloud Computing: Algoritmos en la Nube

Google Gadgets

Enviando información

o Métodos de generación de JSON:

{"title":“Sacando datos a JSON"}

var data = {};

data['title'] = “sacando datos a JSON”;

gadgets.json.stringify(data)

Page 87: Cloud Computing: Algoritmos en la Nube

Google Gadgets

Actualizando la información

o Google optimiza los gadgets a través de la caché

o Para evitarlo podemos modificar la URL con parámetros extra

o Problemas con algunos Servicios REST (CouchDB, por ejemplo)

Page 88: Cloud Computing: Algoritmos en la Nube

Google Gadgets

Vistas

o Los contenedores suelen tener distintas vistas para los Gadgets

o iGoogle posee: “home” (pequeño) y “canvas” (grande)

o Se pueden especificar contenidos para distintas vistas.

Page 89: Cloud Computing: Algoritmos en la Nube

Google Gadgets

Vistas<?xml version="1.0" encoding="UTF-8" ?><Module> <ModulePrefs title="Multiple Views Demo"> <Require feature="opensocial-0.8" /> </ModulePrefs> <Content type="html" view="home"> <![CDATA[ Esto en pequeño ]]> </Content> <Content type="html" view="canvas"> <![CDATA[ Esto en grande ]]> </Content></Module>

Page 90: Cloud Computing: Algoritmos en la Nube

Google Gadgets

Vistas

o Se puede cambiar de vista desde código

var vistas = gadgets.views.getSupportedViews();

gadgets.views.requestNavigateTo(vistas[vista_deseada]);

Page 91: Cloud Computing: Algoritmos en la Nube

Conclusiones

Page 92: Cloud Computing: Algoritmos en la Nube

Conclusiones Sobre el Cloud Computing

o ¿Compensa?

o ¿Mera reformulación de la computación distribuida?

o ¿Uso empresarial de Gadgets?

o Problemas de Amazon EC2

o Problemas de Hadoop

o Problemas de Google Gadget

Page 93: Cloud Computing: Algoritmos en la Nube

Conclusiones

Dudas y comentarios a

[email protected]

Page 94: Cloud Computing: Algoritmos en la Nube

ConclusionesEstas transparencias se publican bajo licencia Creative Commons y se pueden redistribuir o modificar bajo las siguientes condiciones:

1. Se dé reconocimiento al autor de estas transparencias.

2. No se use con propósitos comerciales.3. Se distribuya con la misma licencia.

Texto de la licencia: http://creativecommons.org/licenses/by-nc-sa/3.0/