sábado, 14 de enero de 2012

NOSQL: Más allá de SQL

Las bases de datos de tipo relacional, son las bases de datos más utilizadas y conocidas. Este modelo, ha servido por muchos años de manera satisfactoria para el tratamiento de la información, sin embargo, recientemente se ha comenzado a cuestionar su uso generalizado.

Con el crecimiento sumamente rápido de la información que algunos sectores manipulan día con día, se están buscando formas más eficientes capaces de manejar y organizar grandes volúmenes de datos (en el orden de los Petabytes o Zetabytes). Al grupo de alternativas que han surgido de esta búsqueda, se le conoce como NOSQL.

NOSQL significa "Not Only SQL", por lo que no se trata de descartar el uso de SQL. Es cierto que muchas bases de datos NOSQL no utilizan a SQL como lenguaje de consultas, sin embargo, una de las razones por las cuales surge esta alternativa para administrar grandes cantidades de información fue la flexibilidad que se necesita para cubrir distintas necesidades, por lo que en muchas ocasiones, se trata de combinar las bondades de SQL junto con otras formas de manipular la información.

Con NOSQL desaparecen los esquemas rígidos de las bases de datos relacionales. Esto quiere decir, que las bases de datos NOSQL no utilizan tablas de registros que contienen el mismo número de columnas, sino que usan otras técnicas para poder organizar la información. Con base en estas técnicas, se puede decir que existen las siguientes categorías:

  • Key-value stores: Este tipo de bases de datos organizan la información como pares de llaves y valores. Cada llave (o clave) se corresponde con un único valor o estructura de datos que contiene valores. Esta idea surgió en Amazon y fue implementada con el nombre de Dynamo. Algunos otros ejemplos de este tipo de base de datos son: Apache Cassandra, Project Voldemort, entre otros.
  • BigTable: Es un sistema propietario creado por Google. En este sistema, la idea es crear una especie de "tablas" cuyas filas pueden ser de distintas longitudes, dependiendo de las características de los datos que se vayan a almacenar. También utilizan llaves para identificar a los valores almacenados, por lo que quizá el término más acertado para definir la estructura de esta base de datos sea el de "un mapa multidimensional distribuido".
  • Document-oriented Databases: Son bases de datos que utilizan documentos para guardar sus registros. Los documentos pueden estar en forma de XML, documentos PDF, de procesadores de texto, etc. Cada documento contiene la información de una entrada. Para poder acceder a esta información, también se utilizan llaves que identifican a cada documento. Algunos ejemplos son: LotusNotes, CouchDB, MongoDB.
  • Graph Databases: Como su nombre lo indica, esta base de datos utiliza las cualidades y elementos de los grafos para almacenar la información. Son bases de datos muy apropiadas para manejar grandes cantidades de datos que además contienen un alto grado de complejidad. Ejemplos de este tipo de base de datos son: AllegroGraph, Neo4j, OrientDB.

El tratamiento de la información se encuentra en constante evolución. Si bien estas propuestas parecen prometedoras, debemos estar atentos a las innovaciones que se presentan en las mentes de los investigadores pues quizá a partir de ellas o a pesar de ellas pueda surgir otro método revolucionario capaz de satisfacer nuestras actuales necesidades de administración y presentación de la información.

martes, 10 de enero de 2012

El Explicador: un podcast para aprender a disfrutar la ciencia

Imagen: blog.elexplicador.info

La palabra Ciencia siempre ha inspirado un cierto temor e incluso aversión entre todos los que nos consideramos simples mortales. Cuando escuchamos alguna noticia relacionada con un trabajo científico normalmente nos encontramos con términos casi imposibles de pronunciar y que parecen ser aún más difíciles de comprender.

La sensación que produce toparse con los temas de la ciencia se parece más al temor que al asombro. Esto es natural si pensamos que uno de los miedos más naturales que puede experimentar un ser humano es el miedo a lo desconocido. Después de todo, no es a la oscuridad a lo que tememos sino al hecho de no saber qué horrores se esconden tras ella.

Pues bien, para conquistar estos temores y aprender a valorar, amar y sentir curiosidad por la ciencia, hoy quiero recomendar un programa de radio llamado El Explicador que está a cargo de los biólogos Enrique Ganem y María de los Ángeles Aranda. Este programa se transmite de Lunes a Viernes a las 20:00 hrs. a través de la estación de radio MVS y se puede escuchar también en línea en el sitio de la estación, así como descargarse en forma de podcast para aquéllos a los que se les dificulte el horario o los días de transmisión.

En este programa, se dan respuesta a preguntas que el público envía a su conductor, Enrique Ganem, vía correo electrónico. Los días martes se dedica la hora entera a desarrollar un tema que elige el público mediante votación también por correo electrónico. Lo que hace diferente a este programa es la claridad y la sencillez con que se abordan distintos temas científicos así como la riqueza en el contenido de éste. La forma en que Enrique Ganem parece conversar con quienes escuchamos, propicia la curiosidad, estimula el aprendizaje y provoca la admiración hacia lo que la mente y el talento de la humanidad han alcanzado a lo largo de su historia.

Entérate del lado humano y fascinante de quienes construyeron los bloques fundamentales de la ciencia así como de descubrimientos recientes en cuanto a medicina, astrofísica, biologia, tecnología, ciencias de la conducta, etc. Todo ello narrado de una manera amena y sumamente entretenida.

Si quieres además saber para qué es útil mirar hacia el espacio, cómo es que somos testigos de los destellos del nacimiento del universo sin siquiera sospecharlo o los colores de las alas de una mariposa que vivió hace cientos de millones de años, escucha el programa en alguna de sus modalidades (radio, internet o podcast) y descubrirás porqué la ciencia es el verdadero tesoro de la humanidad, algo muy cercano y cotidiano que no tiene nada de extraño ni difícil para aquéllos que se aventuran en ella.

Este es el enlace a la página de MVS:

http://www.noticiasmvs.com/podcasts/El-explicador

Este es el sitio del Podcast No oficial del Explicador donde puedes encontrar los episodios y suscribirte vía iTunes o RSS:

http://www.elexplicador.info/

Para iniciar bien el año: iniciemos aprendiendo algo nuevo todos los días.

viernes, 9 de diciembre de 2011

Cómo aprender un nuevo idioma gratis y ayudar a traducir la web en el proceso: Duolingo

¿Alguna vez te has encontrado con algo similar a esto?

Seguramente lo habrás visto en alguna parte. Esto es un reCAPTCHA, es decir, se trata de un programa que puede reconocer si el usuario es humano o es una computadora. Está basado en nuestra habilidad visual para reconocer palabras a partir de imágenes distorsionadas o incompletas de éstas. Actualmente las computadoras no son tan hábiles como nosotros para reconocer palabras o patrones a partir de imágenes que han sufrido ligeras modificaciones, así que muchos sitios de internet utilizan los reCAPTCHA para asegurarse de que es una persona la que está tratando de llenar una solicitud o realizar una compra, como por ejemplo, en el caso de Ticket Master y así evitar que una computadora pueda introducir información falsa y saturar con ella la red.

reCAPTCHA también es el nombre de la compañía que está detrás del servicio gratuito para proveer de reCAPTCHAS a un sitio web y sus fundadores son los responsables de la creación de los CAPTCHAS (los cuales a diferencia de los reCAPTCHAS, solamente contienen una palabra que debe ser reconocida) y por supuesto de los reCAPTCHAS. Sin embargo, lo interesante es que están utilizando este servicio para que millones de personas colaboren en la digitalización de libros o documentos antiguos o dañados que son muy difíciles de reconocer correctamente mediante programas de computadora.

¿Cómo es esto posible? Es simple, cada vez que se genera un reCAPTCHA, que contiene dos palabras que deben ser reconocidas por un usuario, estas palabras provienen de libros o documentos que han sido escaneados pero que no han podido ser reconocidos exitosamente mediante programas de computadora. Cuando el usuario teclea correctamente ambas palabras, sin saberlo, está contribuyendo con la digitalización de dichos documentos. Pero ¿cómo saber si el usuario tecleó las palabras correcamente? Pues bien, se conoce correctamente una de estas palabras y se desconoce a la otra, si el usuario teclea correctamente la palabra conocida, es altamente probable que haya tecleado ambas correctamente, el truco aquí es que no se sabe cuál de las dos palabras es la conocida y cuál es la desconocida.

Ahora bien, reCAPTCHA tiene un nuevo proyecto llamado Duolingo, que es una herramienta gratuita que permitirá el aprendizaje de una nueva lengua de manera gratuita a través de internet. Este proyecto está basado en la experiencia positiva que se ha tenido con las reCAPTCHAS, pues están convencidos de que mediante la colaboración de un número muy grande de usuarios es posible traducir páginas que contienen un volumen considerable de información a otros idiomas y al mismo tiempo, permitir que quienes colaboran, aprendan otro idioma.

La idea es presentar sentencias cuya complejidad varía de acuerdo con el nivel de conocimiento del usuario con respecto a un idioma para que éste las comience a traducir. En Duolingo se otorgan herramientas de apoyo para lograr este objetivo, como por ejemplo la lectura de la oración de manera que la persona pueda escuchar la pronunciación del nuevo idioma, así como la traducción de palabras que sean totalmente desconocidas o nuevas.

Este proyecto realmente es una idea muy interesante y valdria la pena aventurarse a formar parte de él. Las expectativas son tan altas que, de acuerdo con su sitio, sería posible mediante la colaboración de una multitud de usuarios traducir Wikipedia en su totalidad del inglés al español en aproximadamente 80 horas de manera gratuita.

¿Les gustaría aprender un nuevo idioma y colaborar a que la información en internet sea más accesible? Los invito a participar, sin duda es increíble lo que como civilización podemos lograr si realizamos un esfuerzo colectivo por el bien de todos.

Para saber más acerca de este proyecto, pueden consultar las siguientes ligas:

Página de reCAPTCHA

Página de Duolingo

Y también, pueden observar el siguiente video, donde se explica más a fondo acerca de Duolingo y reCAPTCHA:

jueves, 8 de diciembre de 2011

Cómo evaluar transformadas de Laplace utilizando Wolfram Alpha

La transformada de Laplace es una herramienta muy útil para resolver problemas que en muchas ocasiones generan ecuaciones diferenciales muy complejas y por consiguiente, difíciles de resolver. Este tipo de ecuaciones se originan por ejemplo, durante el análisis de circuitos electrónicos.

Transformar significa convertir una cosa en otra distinta. Precisamente la Transformada de Laplace convierte una función en otra a través de un proceso de integración. Sin embargo, a pesar de ser una herramienta diseñada para facilitar la resolución de ecuaciones diferenciales, el proceso de encontrar la transformada de Laplace puede resultar complicado en algunos casos. Para auxiliarnos en la verificación de nuestros resultados cuando estamos calculando esta transformada, podemos utilizar Wolfram Alpha.

Supongamos que queremos calcular la siguiente transformada de Laplace:

Para obtener el resultado, introducimos en el recuadro de búsqueda de Wolfram Alpha (este cuadro de texto es un recuadro de borde color naranja que tiene un signo de "igual" del lado derecho) la expresión de la transformada como a continuación se muestra:

Laplace transform ((1 - e^t + 3e^(-4t)) * cos(5t))

El resultado que calcula Wolfram Alpha es el siguiente:

Además de generar el resultado, Wolfram Alpha también muestra la gráfica de la función para varios rangos de valores así como formas alternas del resultado y los pasos para obtenerlas.

En otros casos, es necesario calcular la transformada inversa de Laplace. Esta operación también puede hacerse mediante Wolfram Alpha.

Por ejemplo, ahora supongamos que queremos encontrar la transformada inversa de Laplace de la expresión:

En el mismo recuadro de búsqueda en Wolfram Alpha, tendríamos que introducir a la expresión de esta forma:

inverse Laplace transform (2s - 4)/((s^2 + s)(s^2 + 1))

El resultado de Wolfram Alpha es:

Esta expresión contiene un producto en el denominador, por lo que también podríamos haberla escrito indicando el producto mediante un asterisco (*) y obtendríamos el mismo resultado:

inverse Laplace transform (2s - 4)/((s^2 + s)*(s^2 + 1))

lunes, 28 de noviembre de 2011

Ordenar usando la interface Comparable

En este post revisaremos una duda que recibimos. El objetivo es leer un archivo que contiene en cada línea datos que representan una instancia. Por ejemplo el siguiente archivo (productos.txt) contiene:

555 Producto1 200 3
333 Producto2 300 1
222 Producto3 400 2
111 Producto4 150 5

Para representar un producto, creamos una clase Producto que contiene un id, nombre, precio y cantidad en inventario. Y deseamos ordenarlo por id del producto. El tip es que la clase Producto debe implementar la interface Comparable para que podamos comparar entre productos y de esta forma puedan ser ordenados.

El siguiente código muestra cómo ordenar el archivo anterior (copiar el código en un archivo con nombre OrdenarArchivo.java), los pasos son muy sencillos:

  1. leemos cada línea del archivo y la dividimos en los campos de un producto (se asume que los campos están separados por un espacio en blanco);
  2. creamos una instancia de Producto y la agregamos a una lista de Productos;
  3. ordenamos la lista usando Collections.sort

Es importante notar que tras bambalinas Collections.sort está usando el método compareTo (de la interface Comparable) que implementamos en la clase Producto. Al ejecutar el código debe imprimir:

Elementos originales:
[555 Producto1 200.0 3, 333 Producto2 300.0 1, 
222 Producto3 400.0 2, 111 Producto4 150.0 5]
Elementos ordenados:
[111 Producto4 150.0 5, 222 Producto3 400.0 2, 
333 Producto2 300.0 1, 555 Producto1 200.0 3]

OrdenarArchivo.java

import java.io.*;
import java.util.*;

public class OrdenarArchivo{
  public static void main(String [] args){
    String filename = "productos.txt";
    String linea = null;
    String[] datos = null;
    List<Producto> productos = new ArrayList<Producto>();
    Producto producto = null;
    try{
      BufferedReader br = new BufferedReader(
                           new FileReader(filename)); 
      // leer todas la lineas del archivo
      while((linea=br.readLine())!=null){
        // cada linea tiene los datos para crear un producto
        datos = linea.split(" ");
        producto = new Producto(
                    Integer.parseInt(datos[0]),
                    datos[1],
                    Double.parseDouble(datos[2]),
                    Integer.parseInt(datos[3]));
        // agregamos el producto a la lista de productos
        productos.add(producto);
      }
      br.close();
      // imprimir archivo en orden original
      System.out.println("Elementos originales:");
      System.out.println(productos);
      Collections.sort(productos);
      // imprimir archivo ordenado
      System.out.println("Elementos ordenados:");
      System.out.println(productos);
    }catch(IOException e){
      System.out.println(e);   
    }
  }
}

// Clase que representa lo que queremos ordenar
// Notar que estamos implementado Comparable
class Producto implements Comparable<Producto> {
  int id;
  String nombre;
  double precio;
  int inventario;
  
  public Producto(int id, String nombre, 
                  double precio, int inventario){
    this.id = id;
    this.nombre = nombre;
    this.precio = precio;
    this.inventario = inventario;
  }
  
  public String toString(){
    return id + " " + nombre + " " + 
           precio + " " + inventario;
  }
  
  // Este metodo es el que nos permite comparar
  // entre productos y de esta forma puedan ser ordenados.
  public int compareTo(Producto p){
    return id - p.id;
  }
}

sábado, 26 de noviembre de 2011

Modificadores en Java

A continuación podrán encontrar una tabla que resume en dónde es válido usar varios modificadores en Java. Por ejemplo una clase normal (es decir no anidada en otra clase o método) sólo tiene dos modificadores de acceso válidos: public y default; una clase anidada en otra clase (ya sea estática o no estática) puede usar private, default, protected, public; y una clase definida dentro de un método no puede usar modificadores de acceso.

Modificadores en Java.

Si encuentran algún error, por favor repórtenlo en los comentarios.

lunes, 14 de noviembre de 2011

CyArk: preservación digital de nuestro pasado

CyArk (Cyber Archive o Ciber Archivo) es una organización sin fines de lucro cuyo objetivo es la preservación digital de sitios considerados como patrimonio histórico y cultural de la humanidad.

La preservación de estos lugares se lleva a cabo mediante recursos de alta tecnología entre los cuales se encuentra el uso del escaneo a través de láser en 3D, lo que produce una serie de puntos que son transformados a una imagen tridimensional del área escaneada y cuya precisión se encuentra entre los 2 y 3 mm. El escaneo se lleva a cabo en cuestión de minutos y los datos que son colectados se utilizan para producir representaciones espectacularmente precisas de los sitios escaneados.

Actualmente, CyArk está llevando a cabo proyectos de preservación en varios lugares alrededor del mundo y México no es la excepción. En nuestro país, se han llevado a cabo proyectos sumamente interesantes en las ciudades mayas de Chichén Itzá, Tikal, la capital zapoteca Monte Albán, así como un proyecto en progreso para preservar Teotihuacán, la Ciudad de los Dioses.

CyArk es un proyecto que merece la pena dar a conocer y más aún cuando se cuenta con hermosos sitios dignos de preservación para conocimiento y goce de las futuras generaciones. En México somos afortunados porque existe una gran variedad de estos lugares y vale la pena saber que se están realizando esfuerzos para preservarlos.

Visiten el sitio de CyArk, entérense de la maravillosa obra de esta organización y de alguna manera, comencemos a involucrarnos.

CyArk lanza página web en español

Página principal de CyArk

Sitios de Patrimonio: Monte Albán

Información para contribuir con el proyecto de CyArk

Preservación digital de Chichén Itzá