Mostrando las entradas con la etiqueta Tutorial. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Tutorial. Mostrar todas las entradas

junio 06, 2026

Cómo crear clases grabadas que realmente enseñen

Grabar una clase no es solo encender la cámara y explicar un tema. Para que una clase grabada enseñe de verdad, necesita intención, claridad y una experiencia pensada para estudiantes que aprenderán de forma autónoma.

Si estás creando contenido para cursos virtuales o híbridos, estas 12 pautas, organizadas en 4 secciones: antes, durante, recursos y accesibilidad) podrían ayudarte a preparar videos más útiles, claros y fáciles de seguir.

Bloque 1. Diseña la experiencia de aprendizaje

1. Enfoca la clase para el formato grabado

Evita grabar una sesión como si fuera una clase presencial. En video no puedes ajustar el ritmo en tiempo real ni responder dudas al instante, así que conviene ser más directo, ordenado y concreto.

Diseña cada video como una experiencia independiente, con inicio, desarrollo y cierre claros.

Tips para grabar clase

2. Define qué aprenderá el estudiante

Antes de explicar, dile al estudiante qué va a aprender y para qué le servirá. Una pregunta sencilla para preparar el video es: ¿Qué podrá hacer el estudiante después de ver este video? Cuando el objetivo está claro desde el inicio, el estudiante entiende mejor el sentido del contenido y se mantiene más motivado.

Define los objetivos de la clase

3. Organiza el contenido en microclases

Los videos largos suelen perder impacto. Es mejor dividir el contenido en microclases enfocadas en una idea, procedimiento o habilidad específica. Así facilitas la atención, la revisión posterior y la navegación dentro del curso.

mayo 01, 2026

Interpolación de movimiento con guía

 Ya hemos tratado la interpolación clasica y de movimiento en las publicaciones anteriores, la primera que genera un movimiento rectilineo y la segunda que nos permite agregar cierta curvatura al trayecto, aunque limitada.

Esta tercera opción nos permite trazar una línea muy personalizada, la misma que marcará el trayecto o camino que deberá seguir la animación, debajo el video que hemos compartido en TikTok:

Procedimiento

Les comparto el procedimiento que menos complicaciones me ha presentado (creo que así no he tenido ninguna 😁), procedamos:

  1. En tu área de trabajo agrega la forma que deseas animar, en la línea de tiempo agregaremos una capa dando clic derecho sobre la capa existente (por defecto debería llamarse Capa_1), clic en la opción 'Añadir guía de movimiento clásica'

diciembre 30, 2025

Interpolación de movimiento en Adobe Animate

Las interpolaciones clásicas y las de movimiento generan movimiento rectilineos uniformes, sin embargo, las de movimiento nos permitirán una ligera personalización al permitir dar cierta curvatura a la ruta de movimiento.

Al agregar esta interpolación se mostrará visualmente la ruta, con la herramienta Selección será posible curvarla para modificar el movimiento del símbolo, aquí el video publicado en la cuenta de TikTok:

@icacreativa @¡DALE CURVAS A TUS ANIMACIONES EN ADOBE ANIMATE! 🚀✨ ¡Es más fácil de lo que crees! @Transforma lo predecible en ESPECTACULAR. No te conformes con menos. ¡Aprende a dominar el movimiento curvado y haz que tus diseños impacten de verdad! ¿Quieres ir más allá? 🌟 Ofrecemos capacitaciones personalizadas en diseño gráfico, animación y producción multimedia. ¡Aprende a tu ritmo y con un experto a tu lado! ¡Síguenos para no perderte ningún truco! Y si estás listo para una formación que impulse tu talento, envíanos un DM o visita el link en bio. ¡Tu futuro creativo te espera! @gabrielamilagros32 @mariagamboa05 @iestpparcona @jacdiaz01 @muni_parcona ♬ sonido original - icacreativa

Procedimiento

Interpolación indica mover entre dos polos o extremos, el inicio y el final, recomiendo el procedimiento que detallo a continuación para evitar posibles inconvenientes, empecemos:
  1. Una vez tenemos nuestro escenario, selecciona el color de relleno y contorno, agregamos el elemento a animar, en ese primer fotograma clave clic derecho, opción 'Crear interpolación de movimiento'

diciembre 01, 2025

Interpolaciones clásicas en Adobe Animate

El movimiento es la esencia en el campo de la animación de gráficos y la interpolación clásica es uno de las formas más sencillas de hacerlo, posiblemente el adjetivo de "clásica" venga a causa de que fue la opción por defecto desde Macromedia Flash.
Solo necesitamos un fotograma clave en donde inicia el movimiento y otro para indicar el final, esto va a generar por defecto un desplazamiento rectilineo y uniforme, como se muetra en el video siguiente:
@icacreativa ¡Aplica la Interpolación Clásica en nuestro último video y dale vida a tus diseños! ✨ ¿Quieres ir más allá? Ofrecemos capacitaciones personalizadas en diseño, animación y multimedia. ¡Aprende a tu ritmo y con tus objetivos! ¿Listo para destacar? Envíanos un DM o visita el link en bio para info. ¡Tu talento merece brillar! 🚀 @gabrielamilagros32 @iestpparcona @systematic.peru ♬ sonido original - icacreativa

Fotograma clave inicial

  1. Abre un nuevo documento, de tu preferencia, usaré un Full HD (1920x1080) a 24 FPS

  2. Ahora agrega una forma a tu lienzo, previamente seleccioné color de relleno y contorno, usaré un óvalo y lo colocaré ya en el punto en donde deseo iniciar el movimiento.

octubre 09, 2023

Formularios MDI

MDI es el acrónimo de Multiple Document Interface, las Interfaces de Documento Múltiple hace referencia a una estructura de formularios en donde existe un “padre” o formulario contenedor y los demás son formularios “hijos” que se mantienen dentro del contenedor.

image

Es la estructura que mantiene Access, como se ve en la imagen arriba y hasta no hace mucho tiempo también en Excel, y continúa siendo práctico de usar en software de gestión y acceso a recursos varios.

Interfaz de Documento Múltiple en Visual Studio

En la edición Community 2022, versión 17.7.4 ya tenemos disponible una clase para agregar una interfaz de este tipo:

image

Este ya incluye varios elementos básicos como una barra de menú con las opciones clásicas de Archivo, Editar, Ver… y lo mismo en su barra de botones (herramientas):

septiembre 27, 2023

C#: Iniciando

 Siempre hay nuevas generaciones aprendiendo y siempre las tecnologías van cambiando, con frecuencia para mejorar, así que volver a tratar el tema no está demás, aunque tampoco se trata de re-inventar la rueda (pero de hecho si la están constantemente rediseñando, en la NASA por ejemplo).

Acerca de la versión de Visual Studio Community

Para iniciar es importante entender la forma en que estructuramos el código, en este caso particular (y próximas entradas) nos centraremos en en el lenguaje de C#, las siguientes líneas las veremos al iniciar un nuevo proyecto para consola en Visual Studio 2022 la versión Community.

Código inicial del proyecto en C#

Las directivas using

septiembre 11, 2023

Pasar una matriz de datos a una fila columna

Tenemos una matriz de datos, entendamos en este caso como matriz un rango de varias filas y varias columnas, y requerimos hacer una lista de ellos, sea en una columna o una fila ¿Qué función conoces para realizar esa tarea? Al final incluimos el vídeo demostrativo.

Hemos escrito poco de Excel y hace ya buen tiempo, quizá cambiemos eso ☺

Funciones ENFILA y ENCOL

Office 365 dispone desde hace meses dos funciones para realizar esa tarea, se trata de ENFILA y ENCOL y como primer argumento debemos pasarle la matriz a transformar en fila o columna respectivamente.

Matriz de datos B3:E6

Comencemos por la matriz en la imagen, el rango de los datos es B3:E6, pensemos en clubes deportivos ordenados en grupos y ahora necesitamos una lista de todos estos equipos, en la celda donde deseas iniciar tu lista escribimos:

  • =ENCOL(B3:E6)
  • =ENFILA(B3:E6)

La primera opción para ordenar las datos en una sola fila, la segunda opción en una sola columna y esos es todo.

El Segundo Argumento

Bueno, en realidad no es todo, posiblemente te percataste que hay dos argumentos más, concentrémonos en el segundo, este nos permitirá indicar si deben omitirse las celdas vacías, con mensajes de error, ambas o ninguna.

Este segundo argumento podría tomar los valores: 0, 1, 2 o 3, en los ejemplos usaré la función ENFILA, pero se aplica de la misma manera en ENCOL, trabajemos con la siguiente matriz B3:F9 que contiene tres celdas vacías y dos con mensaje de error:



  • =ENFILA(B3:F9; 0)
    Es la opción por defecto al omitirse el segundo argumento, indica que se deben ordenar los valores de todas las celdas, las vacías se mostrarán como 0 (cero) y las que tengan un mensaje de error se mostrarán tal cual.
  • =ENFILA(B3:F9; 1)
    Para omitir solamente las celdas en blanco, estas se ignorarán en la fila o columna de resultado.
  • =ENFILA(B3:F9; 2)
    Para omitir solamente las celdas con mensaje de error, estas se ignorarán en la fila o columna de resultado.
  • =ENFILA(B3:F9; 3)
    Para omitir  tanto las celdas vacías y las que contienen mensaje de error, ambas se ignorarán en la fila o columna de resultado.

¿Y el Tercer Argumento?

Observa los resultados obtenidos en los ejercicios anteriores, por defecto ENCOL y ENFILA lee y escribe los datos de la primera fila, al finalizar pasa a la siguiente y así hasta finalizar.

¿Y si necesitamos hacerlo por fila?

Allí entra el tercer argumento que podría tomar los valores 0 o 1, el primero es la opción por defecto si se omite este argumento y establece la lectura de datos fila tras fila.

El valor 1 establece la lectura de los datos por columna, desde la primera a la izquierda hacia la columna en el extremo derecho:

  • ENFILA(B3:F9;;0)
    La opción por defecto, lectura de los datos por fila, de arriba hacia abajo.
  • ENFILA(B3:F9;;0)
    La lectura de los datos se efectúa por columna, de izquierda a derecha.
¿Conocías esta función? Caso contrario esperamos sea de utilidad, debajo el vídeo demostrando lo explicado ¡Hasta la próxima?

Visítanos en Facebook.

noviembre 11, 2018

Tu blog en Blogger

¿Por qué un blog?
Crear contenidos es una característica de los usuarios de internet desde hace ya bastantes años, y aunque principalmente ocurre en las redes sociales son los medios centrados en un tema los que se consideran especializados y ‘profesionales.
Tema aparte es si generamos contenidos por afición o por necesidad, por divertirnos o por hacer publicidad y obtener unos ingresos adicionales, pero, generar contenido es punto clave para dar a conocer aquello que deseamos compartir.
Blogger es uno de los varios servicios ofrecidos por Google, así que si tienes una cuenta en Google+, gmail o youtube, entonces, ya tienes tu cuenta en Blogger lista para crear tu blog.
¡Empecemos!
Ve a http://www.blogger.com, clic en el botón “CREA TU BLOG” (si es el caso que el diseño no a cambiado),  ingresa con tu usuario y contraseña de Google.
image
Si es la primera vez que ingresas se te pedirá selecciones un perfil, el la identidad con la que te mostrarás a tus visitantes y con el que podrás interactuar con ellos, este es un dato obligatorio. Hay una opción para usar tu perfil de Google+, ojo que este servicio al parecer se cerrará el próximo año. Clic en “Continuar en Blogger”.

octubre 15, 2014

Actualizando Temas Y Módulos En Drupal 7

Ya hemos tratado el modo de actualizar en núcleo o core de Drupal, veremos ahora el caso de los módulos (aplica para actualizar los temas), y lee el artículo completo antes de empezar a actualizar tu sitio.

El administrador habrá recibido en su bandeja de entrada las notificaciones de una actualización disponible:

Captura_de_pantalla_091714_120751_AM

O también estará visible al entrar como administrador del sitio Web respectivo:

[drupal11.png]

Obteniendo La Actualización

Usando el enlace del anuncio que hemos mencionado se llegará a la página con el reporte de las actualizaciones:

Captura_de_pantalla_092714_063746_AM

El caso del núcleo de Drupal ya lo tengo actualizado (no está visible en la imagen) al igual que los módulos (se ven dos en color de fondo verde), en los temas hay una notificación para ‘Corporate Clean’ pero no es urgente ya que ese tema no está en uso (fondo en un tono amarillo pálido).

La actualización del tema ‘Skeleton’ si es prioritaria, es el tema que estoy usando en este sitio, así que usemos el enlace respectivo a la derecha para descargar la nueva versión.

image

Tras guardar el archivo TAR.GZ lo descomprimimos y obtenemos una carpeta con el nombre del módulo, en mi caso es ‘skeletontheme’.

Al examinar en el servidor, en la carpeta ‘themes’ obviamente ya tengo allí una carpeta con el mismo nombre (desde el 29 de agosto), solo hay que sobreescribirla con nuestra nueva versión (sobre la ubicación de módulos y temas).

image

Modo De Mantenimiento

Aunque este proceso NUNCA me ha causado problemas, NUNCA está de más obtener una copia de respaldo del sitio y ponerlo en modo de mantenimiento: en una nueva pestaña vamos a Configuración, luego en Desarrollo entramos a Modo de mantenimiento, allí activamos “Pasar el sitio a modo de mantenimiento” y guardamos la configuración:

image

Cargar Y Actualizar

Ahora subimos la nueva carpeta para sobreescribir la existente, en el artículo anterior vimos un par de posibilidades para hacerlo, con Filezilla es también es tan sencillo con arrastrar y soltar:

Captura_de_pantalla_092714_080330_AM

A menos que hayas predeterminado un comportamiento se te preguntará que hacer con los elementos existentes, usaré que sobreescribir pero solo para este proceso (la cola actual):

image

Ahora volvemos a nuestro sitio, desactivamos el modo de mantenimiento, clic en Guardar configuración.

Vuelvo a la primera pestaña y usaré el enlace “Comprobar manualmente”:

Captura_de_pantalla_092714_081227_AM

Esto inicia el proceso de actualización, verá una barra de progreso (posiblemente por un breve instante) y finalmente en el informe verá su tema actualizado:

image

Podría haber actualizado también el tema Corporate Clean, todo en un solo paso, pero en realidad ese tema voy a quitarlo.

La Forma Fácil ;)

Ya explicado todo el proceso, veamos algo más simplificado, acabo de recibir la notificación de actualización del módulo CKeditor, no olviden poner el sitio en Modo de mantenimiento, luego en tu sitio de Drupal vamos a Módulos y luego a la pestaña Actualizar:

image

Ahora debes tener una imagen así:

Captura_de_pantalla_101514_100632_PM

Noten que para el módulo (no para el Core) tenemos el botón “Descargar estas actualizaciones”, en el caso que no estuviese allí denle un clic al enlace “Comprobar manualmente”.

Activa el check a la izquierda de cada módulo (en este caso es solo uno), luego dale a este botón y se iniciará la descarga, tendrás este mensaje:

Captura_de_pantalla_101514_103727_PM

Puesto que ya tenemos el sitio en modo de mantenimiento “Continuar”. El administrador de actualizaciones nos indicará la culminación del proceso, solo falta actualizar la base de datos, clic en “Run database updates” ¡Y listo!

Captura_de_pantalla_101514_104107_PM

Espero les haya sido útil Risa


NOTA: Sobre la instalación de Drupal 7 vean los enlaces en este artículo.

agosto 31, 2014

Actualizando El Core De Drupal 7

Al hablar de el “Core” nos estamos refiriendo al núcleo de Drupal, y como es obvio, por motivos de seguridad la comunidad va ofreciendo actualizaciones que no deberíamos ignorar.
Habitualmente se enviarán avisos a la cuenta de correo del administrador del sitio sobre las actualizaciones disponibles, o al autenticarse en el sitio verán un mensaje como el siguiente:
drupal1
En este caso particular es para actualizar de la versión 7.28 a la 7.31, el enlace a la derecha (Drupal core) nos lleva a la página en donde descargamos la nueva versión.

Descargando La Actualización

A diferencia de otros elementos de Drupal tendremos que realizar la actualización de forma prácticamente manual todo el proceso.

mayo 30, 2014

Infografías, Banners, Foto de Portada y más con Canva

Se afirma que (figurativamente) todos tenemos un artista dentro, y considero que eso es cierto, siempre buscamos que las cosas queden bien para nuestro gusto (o el de alguien más), claro que los gustos cambian de personan a persona.

Desde algunas semanas atrás vengo usando Canva, una herramienta gratuita y sencilla para verter nuestro ingenio y crear diseños gráficos para los más diversos propósitos.

image

 

marzo 06, 2014

Equipos Con GNU/Linux Y Windows: Personalizando El Inicio

¿Cómo hago para arrancar con Windows por defecto?

Esa ha sido una pregunta bastante común luego de instalar alguna distribución GNU/Linux (en particular trabajando en clases con la familia Ubuntu o CentOS) en un equipo con Windows.

ubuntu

Ocurre que por defecto se colocará el nuevo sistema operativo (SO) primero en la lista (como en la imagen arriba de este párrafo) mientras que Windows está al final de la misma, provocando que si uno está descuidado y no hace el cambio tras unos segundos se iniciará Ubuntu (o la distro que tenga) y tendrá que reiniciar para ingresar a Windows.

 

febrero 26, 2014

Removiendo a Eazel Search

Por motivos de trabajo tuve el pretexto de andar más allá de Subtanjalla, lamentablemente no llegué a Yanquiza, pero si a medio,camino, allí está ‘Chapi’ (no pude ubicarlos con ese nombre en Maps).
APariencia del navegador 'secuestrado'

Examinando

El paciente: una notebook HP con Güin 7 que ‘no entra a Internet’. Aunque haciendo el ping a cualquier servidor Web todo parecía OK, evidentemente algo estaba mal. Además de un aviso sobre problemas con el JIT (relacionado al Framework de .NET).

enero 05, 2014

Accediendo a MySQL con JSP

Hay que tomar en cuenta para este ejercicio dos cosas:
  1. Básicamente es lo mismo que usar una conexión de escritorio con Java (JSP está pensado en el uso de redes, particularmente hablamos de páginas Web).
  2. Deberíamos separar la parte de código Java del código HTML (en otro ejercicio usaremos los beans)
En este ejercicio uso el IDE de Netbeans 7.4 (aquí datos sobre la instalación).

LA BASE DE DATOS

Para no complicarnos más de lo necesario usaremos el script de la BD dbnegocio que incluye la tabla clientes con 6 registros:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";CREATE DATABASE `dbnegocio` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `dbnegocio`;
CREATE TABLE `clientes` (
  `cod_clie` int(11) NOT NULL auto_increment,
  `nom_clie` varchar(25) NOT NULL,
  `ruc_clie` varchar(11) NOT NULL,
  `dir_clie` varchar(100) NOT NULL,
  PRIMARY KEY  (`cod_clie`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
INSERT INTO `clientes` VALUES (1, 'Luis Miguel', '10258945101', 'Av. Miami 990');
INSERT INTO `clientes` VALUES (2, 'Freddy Albarracín', '10451278361', 'Av. Arenales 789');
INSERT INTO `clientes` VALUES (3, 'Juan Godoy', '14784598652', 'Calle Las Magnolias s/n');
INSERT INTO `clientes` VALUES (4, 'Betel García', '20142536784', 'Los Frejoles 478');
INSERT INTO `clientes` VALUES (5, 'Luisa Pérez', '20144778666', 'Urb. Los Pecanos J-5');
INSERT INTO `clientes` VALUES (6, 'Dina Meza', '20141512178', 'Los Naranjos 357');


octubre 30, 2013

Trabajando Con Sesiones En PHP

En el presente documento desarrollamos un ejercicio trabajando el concepto de sesiones con PHP, aunque lo correcto es trabajar con datos almacenados en bases de datos,nos concentramos más bien en las sesiones propiamente.
Está desarrollado con los servicios incluidos en Wampserver (Apache, PHP y MySQL), ejecutándose sobre Windows 7.
image
Inicio de sesión (fig.01)

Descripción del ejercicio

El trabajo con sesiones es uno de los elementos vitales en el desarrollo de sitios Web, por ejemplo piensa en cuando ingresas a tu cuenta de correo o a la de Facebook, ingresas tus datos (nombre de usuario o correo y contraseña), una vez dentro podrás desplazarte por las diferentes secciones (páginas) del sitio, usar herramientas, etc.
Mientras no uses la opción para salir de tu cuenta (salir, cerrar sesión, log out, o algo así) el “navegador” sabrá quién eres tú y que cuenta estás usando, una vez que salgas de tu cuenta te “olvidará”.

septiembre 21, 2013

Re-enviado Automático de tu Correo

Por diversas razones ocurre que podríamos tener varias cuentas de correo, como el caso de que he sugerido a varios jóvenes con los que trabajo obtener su cuenta en Gmail con el propósito de sacar provecho de las opciones colaborativas de Google Docs y Google Drive (benditos los tiempos en que era suficiente con mi cuenta en Latinmail :-).
Tener que revisar varias cuentas de correo toma tiempo, en ocasiones, demasiado tiempo, pero, existe una solución práctica: re-enviar todos los nuevos mensajes que recibas en tu bandeja de una cuenta a otra cuenta de correo de tu preferencia, así podrás revisar todo desde esa única cuenta (claro que existe la opción ofimática de Outlook y otras, pero no tengo, por ahora, la intención de escribir un post para dicho programa).
Veamos como hacer esto en los servicios de: Hotmail (ahora Outlook en línea), Yahoo y Gmail. Así que elige cuál será tu cuenta principal (en donde revisarás todo) y aplica los cambios que describimos a continuación en las que NO serán tu cuenta principal.

septiembre 14, 2013

Formularios con Google Drive

Los formularios en Internet son la herramienta básica para recolectar información de los usuarios, este es un tema vital para las empresas, negocios, clubes, páginas de fans, etc.
Para diseñar uno de ellos existen varias opciones gratuitas de y de pago, que van desde diseñar con HTML hasta servicios de terceros en base a plantillas, arrastrar elementos o la combinación de ellos.
Hablaré ahora de los formularios de Google Drive que me parece una de las opciones más sencillas de obtener resultados suficientemente personalizados, además de ser gratuitos, incluyen varias opciones de diseño y permite guardar los resultados en una hoja de cálculo del mismo servicio, lo único que necesitas para empezar es tener una cuenta en cualquiera de los servicios de Google de los que ya hemos escrito en varias ocasiones.
Valga aclarar que el navegador Chrome está optimizado para trabajar con Drive, que por si mismo es un buen navegador y mi favorito, si no lo tuvieras ya es hora de que lo descargues y pruebes.
RECOMIENDO: Que lean el tutorial completamente antes de empezar y decidan que desean hacer, en realidad es sencillo, lo extenso del tutorial es por la explicación para cada elemento y el formulario de prueba con todos los elementos podrán verlo aquí.

agosto 23, 2013

Compartir un estado de Facebook en tu Web

Ya a estas alturas es cosa cotidiana encontrar en la Web algo que automáticamente (a veces compulsivamente) deseamos compartir con la familia, los amigos o con cualquiera de los visitantes de nuestro Web o blog.
Desde hace algunos días atrás ya se comentaba en las redes que Facebook permitió a algunos usuarios compartir de esas manera las publicaciones en las páginas de Facebook, y parece que desde ayer ya está habilitado para todos los usuarios y todas las p´´aginas de Facebook.

¿Cómo compartir un estado?

agosto 21, 2013

phpMyAdmin – Parte I (Tu primera BD con MySQL)

Prácticamente hace más de año y medio compartí este artículo en el blog de PrimeraWeb para usuarios de Appserver, que a sido mi favorito por muchos años, pero, debido al gran número de alumnos trabajando con WampServer comparto esta revisión.
Básicamente tenemos el mismo sistema de trabajo, solo me centraré en las diferencias entre estas versiones: apariencia, distribución y otras opciones no “vitales”
Como ya dije en el otro post es posible descargar phpMyAdmin dese su sitio oficial, sin embargo, suele venir integrada con otras aplicaciones para el diseño tales como Appserv, Xampp y WampServer, que incluyen phpMyAdmin entre otros servicios.

julio 30, 2013

Google Docs Para Docentes

En varias ocasiones hemos hablado de Google y sus diversos servicios, y aunque no es software libre ciertamente viene ofreciendo muchas herramientas útiles en el entorno colaborativo.
De manera particular me refiero a Google Drive y su integración con Google Docs, aunque su uso es válido para muchísimas situaciones usaré la presentación siguiente orientada a la educación ¡Bon apetit!
Fuente: http://www.docstoc.com/docs/document-preview.aspx?doc_id=159705102