domingo, 20 de diciembre de 2009

MAME: Aquellos maravillosos años (Windows)

¿Quién no se acuerda de la época en que íbamos a los bares a gastarnos la paga en las maquinitas?. ¿No te gustaría recordar aquellos tiempos sin gastar nada más que tu tiempo y unas dosis de adrenalina?

Podemos revivir aquellos maravillosos años gracias a emuladores que nostálgicos como nosotros han creado para traer esas máquinas a nuestro PC. En este primer post abordaremos cómo hacerlo en Windows. Prometo otro post para hacerlo en Linux.

Estos emuladores se denominan MAME (Multiple Arcade Machine Emulator ó Emulador de Múltiples Máquinas Arcade). Engloban la mayor parte de máquinas de juegos que había en su época: Taito, Konami, Sega...

Estos emuladores son gratuitos, y puedes descargarte también miles de juegos que correrán sin problemas en estos emuladores.

Para empezar bajaremos el emulador más conocido y utilizado de todos en la siguiente URL: http://mamedev.org/release.html. Elegiremos, en la sección "Official Windows Binary Packages", la última release (a lo hora de escribir este post era la 0.135b). El archivo es un archivo comprimido ejecutable, el cual, al lanzarlo, nos solicitará en qué directorio descomprimir los archivos. Ojo, indicar una ruta de un directorio dedicado, o si no mezclará los archivos que descomprima con el directorio que se le haya indicado.

El emulador viene sin juegos, es decir, que sólo tendremos las "máquinas" en nuestro ordenador sin ninguna ROM. Las ROM's las puedes encontrar en cientos de páginas en Internet, pero, sin lugar a dudas, la más conocida y completa es la siguiente: http://www.romnation.net/, donde podrás encontrar también emuladores y juegos para otros dispositivos, tales como consolas y ordenadores antiguos.

Las ROM's están ordenadas alfabéticamente, y deberás descargarlas en el directorio "rom". Cuando ejecutes el archivo "mame.exe" detectará qué roms hay en este directorio, y a través de su interfaz tan sólo hay que elegir el juego para empezar a jugar.

Las teclas principales son:
5 - Echar moneda
1 - 1 Jugador
2 - 2 Jugadores
Ctrl - Disparo 1
Espacio - Disparo 2
Esc - Salir
Alt + Enter - Pantalla completa / ventana

El emulador contiene muchas opciones y la posibilidad de configurar también muchas cosas. Lo malo es que tiene una interfaz un poco sosa, y cuando tengas muchos juegos, a lo mejor te puede liar.

Existen varias interfaces que facilitan poder acceder a los juegos, amén de otras opciones, como ver el aspecto del juego (pantalla) antes de seleccionarlo, filtrar por tipo de juego, los que están disponibles, etc. El más conocido y utilizado es MAMEUI32, y podrás encontrarlo en la siguiente URL: http://www.mameui.info/


Esta interfaz incluye por debajo el emulador de MAME. Así pues, los ROM's se almacenan en el directorio "rom", y las teclas de uso son las mismas. Tan sólo es necesario configurar el directorio donde se almacenan las ROM's, mediante el menú "Options" y la opción "Directories..."

Bueno, espero que paséis felices ratos con estos programillas.




viernes, 18 de diciembre de 2009

Contendientes en bases de datos no relacionales

Tercer y último artículo sobre bases de datos no relacionales, basados en el original de Tony Bain. Al final del artículo me he permitido la licencia de actualizar algunos datos y de añadir otras alternativas (el resto está íntegro).
Artículo 1: ¿Están condenadas las bases de datos relacionales? (http://rafinguer.blogspot.com/2009/12/estan-condenadas-las-bases-de-datos.html)
Artículo 2: La nueva generación (de bases de datos) (http://rafinguer.blogspot.com/2009/12/la-nueva-generacion.html)
Fuente: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php?p=3


CONTENDIENTES EN SERVICIOS DE NUBE

Ya hay un número de vendedores de servicios web que ofrecen en la actualidad bases de datos clave/valor multi-inquilino bajo conceptos de "paga según utilizas". La mayor parte de ellos conocen los criterios discutidos en estos artículos, pero cada uno ofrece características únicas y variaciones respecto a los estándares generales aquí descritos. Echemos un vistazo a bases de datos particulares, tales como SimpleDB, Google AppEngine Datastore y SQL Data Services.


Amazon: SimpleDB
SimpleDB es una base de datos clave/valor orientada a atributos disponible en la plataforma de Amazon Web Services. SimpleDB es todavía una Beta pública. Mientras tanto, los usuarios pueden registrarse para una versión "gratuita" - limitada por uso.

SimpleDB tiene algunas limitaciones. La primera es que una consulta no puede durar más de 5 segundos. La segunda, que no hay más tipos de datos que cadenas de texto. Cada almacenamiento, recuperación o comparación se realiza en formato de cadena de texto (string), por lo que las comparaciones de fechas no funcionan a menos que se éstas se conviertan al formato ISO8601. La tercera, el tamañao máximo de cada cadena de texto es de 1024 caracteres, lo cual limita mucho los textos (como descripciones de productos, etc.) que puedes almacenar un atributo simple. Pero debido a que el esquema es dinámico y flexible, puedes superar esta limitación añadiendo atributos "DescripcionProducto1", "DescripcionProducto2", etc. El límite por cada elemento es de 256 atributos,. Mientras SimpleDB sea Beta, los dominios no pueden ser más grandes de 10GB, y las bases de datos enteras no pueden superar 1TB.

Una característica clave de SimpleDB es que utiliza un modelo de consistencia eventual. Este modelo de consistencia es bueno para la concurrencia, ya que después de haber cambiado un atributo en un elemento, los cambios no serán reflejados en las operaciones de lectura inmediatas a dicho cambio. Esto hay que tenerlo muy en cuenta en casos como, por ejemplo, cuando no quieras vender la última entrada de un concierto en el sistema de reserva para cinco personas debido a que los datos no fueron consistentes en tiempo de venta.


Google AppEngine Datastore
Google AppEngine Datastore está construído con BigTable, el sistema de almacenamiento interno de Google para la manipulación de datos estructurados. En sí mismo, Google AppEngine Datastore no es un mecanismo de acceso directo a BigTable, si no una especie de interfaz simplificada superpuesta a BigTable.

El AppEngine Store soporta muchos más tipos de datos y elementos que SimpleDB, inluyendo tipos de lista, que contiene colecciones dentro de un elemento simple.

Sin embargo, no podrás realizar interfaces con el AppEngine Datastore (o con BigTable) utilizando aplicaciones externas a la plataforma de servicios web de Google.


Microsoft SQL Data Services
SQL Data Services es parte de la plataforma Azure Web Services de Microsoft. El SDS es un servicio que está en versión Beta y es gratuito con algunas limitaciones en el tamaño de las bases de datos. SQL Data Services es en sí misma una aplicación situada en lo alto de muchos servidores SQL, los cuales crean el almacenamiento de datos por debajo de la plataforma SDS. Mientras que el almacenamiento por debajo pueda ser relacional, tú no tienes acceso a éste; SDS es un almacenamiento clave/valor, como otras plataformas discutidas anteriormente.

Microsoft parece estar sóla entre los tres tipos de vendedores en reconocimiento de que mientras el almacenamiento clave/valor es fenomenal para la escalabilidad, acarrea un gran gasto de gestión de datos cuando es comparado con RDBMS. La aproximación de Microsoft parece ser deshacer hasta los huestos pelados para obtener un buen mecanismo de escalación y distribución, y entonces transcurrido el tiempo fortalecerse, añadiendo características que ayuden a puentear los huecos entre el almacenamiento clave/valor y la plataforma de base de datos relacional.


CONTENDIENTES EN SERVICIOS QUE NO SON DE NUBE

Fuera de la nube existen vendedores de software de base de datos que pueden ser instalados "en casa". Casi todos estos productos son todavía jóvenes, todavía en versiones alpha o beta, pero en su mayoría son software libre (open source); pudiendo tener acceso al código, tú puedas quizás ser más consciente de cuestiones potenciales y de las limitaciones que tú podrías tener con vendedores de soluciones cerradas.


CouchDB
CouchDB es una base de datos orientada a documentos, open source y gratuita. Derivada del almacenamiento clave/valor, utiliza JSON para definir el esquema de un elemento. CouchDB está concebida para tender un puente al hueco que existe entre bases de datos relacionales y bases de datos orientadas a documentos gracias a las "vistas", que pueden ser creadas dinámicamente a través de JavaScript. Estas vistas mapean los datos del documento en estructuras similares a tablas que pueden ser indexadas y consultadas.



Proyecto Voldemort
El proyecto Voldemort es una base de datos clave/valor distribuida que tiene previsto escalar horizontalmente a través de un gran número de servidores. Está engendrado a partir del trabajo realizado en LinkedIn y, según se informa, utilizado allí donde muchos sistemas tengan requerimientos de escalabilidad muy altos. El Proyecto Voldemort también utiliza un modelo de consistencia eventual, basado en el de Amazon.


Mongo
Mongo es el sistema de base de datos desarrollada en 10gen por Geir Magnusson y Dwight Merriman (recordemos de DoubleClick). Como CouchDB, Mongo es una base de datos orientada a documentos JSON, salvo que está diseñada para ser una verdadera base de datos de objetos, más que para un almacenamiento de clave/valor puro. Originalmente, 10gen enfocó poner juntos una pila completa de servicios web, aunque sin embargo, más recientemente ha tenido que ser reenfocado principalmente en la base de datos Mongo.



Drizzle
Drizzle puede ser considerado como una contrarrestación-propuesta para los problemas que los almacenamientos clave/valor tienen que resolver. La vida de Drizzle comenzó como un resultado indirecto de la base de datos MySQL (6.0). En los últimos meses, sus desarrolladores han removido las características no centrales (no-core) de un host (incluyendo vistas, triggers, sentencias preparadas, procedimientos almacenados, caché de consultas, ACL, y varios tipos de datos), con el objetivo de crear un sistema de base de datos más ligero, simple y rápido. Drizzle puede todavía almacenar datos relacionales. Como apuntó Brian Aker, de MySQL/Sun, "no hay razón de sacar al bebé del agua del baño". El objetivo es construir una plataforma de base de datos semi-relacional a medida para la web y para aplicaciones basadas en la nube ejecutándose en sistemas con 16 cores o más.



TOMAR UNA DECISION
Ultimamente, existen cuatro razones por las cuales deberías optar por una plataforma de base de datos no relacional clave/valor para tus aplicaciones:
1) Tus datos están fuertemente orientados a documentos, haciéndolos más acordes y naturales con el modelo de datos clave/valor que con el modelo de datos relacional.
2) Tu entorno de desarrollo está fuertemente orientado a objetos, y una base de datos clave/valor podría reducir la necesidad de código "tubería".
3) El almacenamiento de datos es económico y se integra fácilmente con la plataforma de servicios web de tu proveedor.
4) El asunto más importante es que es bajo demanda, con alta escalabilidad final -- esto es, gran escala, escalabilidad distribuida, del tipo que no puede ser conseguida simplemente mediante escalar añadiendo.

Para tomar una decisión hay que recordar las limitaciones de las bases de datos y los riesgos que corres por bifurcación con respecto del plan relacional.

Para el resto de requerimientos, tu mejor opción sea una buena y vieja RDBMS. Así pues, ¿están condenadas las bases de datos relacionales? Claramente, no. Al menos, no todavía.


REFLEXION ADICIONAL
Esta información ha sido incluida al final del artículo, y no forma parte del artículo original.

A lo largo de este y los dos anteriores posts, hemos echado un vistazo a esta filosofía de almacenamiento, sus virtudes, sus defectos y la comparativa con las RDBMS para podernos hacer una imagen más exacta de cuáles pueden ser nuestras mejores opciones a la hora de emprender un proyecto.

Ha surgido un movimiento denominado NOSQL, con carácter rebelde, criticando las RDBMS y ensalzando las virtudes de las nuevas alternativas (recomiendo mi anterior artículo: Movimiento NOSQL: la alternativa a las bases de datos relacionales. No caigamos en el error de la anarquía. Las RDBMS han estado tanto tiempo con nosotros porque funcionan y son necesarias. Recomiendo conocer ambas filosofías, sus pros, sus contras. Recomiendo probar y hacernos una idea más exacta de qué va a ser lo que necesitemos y de que va a ser lo mejor para nuestros proyectos.

Es cierto que algunas grandes compañías que generan su negocio en Internet, utilizan las bases de datos no relacionales, y que incluso ellas mismas han desarrollado su propio sistema, como Google, Microsoft, Amazon o Facebook. Hay que ver que su negocio es la red, y que su filosofía es la nube. Su negocio es inmenso y requieren de miles de servidores repartidos por todo el mundo. Hemos de comprobar si éste es nuestro escenario o si, por el contrario, nuestro escenario se reduce a un simple servidor al modo tradicional, o a unos pocos servidores en cluster localizados en el mismo edificio, para lo cual, otras alternativas RDBMS van a ser las más adecuadas, como Oracle, SQL Server, MySQL o PostgreSQL.

Quisiera terminar este artículo añadiendo otras bases de datos no relacionales, y que no se comentaron en el artículo final. Espero que os haya sido de interés y de utilidad.


Cassandra
Este sistema de base de datos fue desarrollado por Facebook, abandonando el prestigioso MySQL. Este sistema ya forma parte de la incubadora de proyectos de Apache. Cassandra es open source, altamente distribuido, y tiene un modelo de datos similar al de BigTable (Google). Entre sus características cabe destacar la alta disponibilidad, consistencia eventual, escalabilidad incremental, replicación optimista, administración mínima.Posee API para acceder desde lenguajes de programación tales como C++, C#, Java, Perl o PHP (entre otros).

En la actualidad aún está en desarrollo. Es utilizado por Facebook, Digg, Rackspace y otras compañías.

Enlace: http://incubator.apache.org/cassandra/

Recomiendo ver el vídeo y las slides para más información.


HyperTable

Hypertable es una plataforma de base de datos de alto rendimiento para accesos masivos en paralelo, de alta escalabilidad web.

Enlace: http://hypertable.org/

jueves, 17 de diciembre de 2009

La nueva generación (de bases de datos)

Segunda parte de este interesante artículo sobre el presunto declive de las bases de datos relacionales.
Artículo anterior: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php
Fuente: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php?p=2


Este nuevo tipo de sistema de gestión de bases de datos es conocido comúnmente como almacenamiento por clave/valor. De hecho, no existe aún un nombre oficial, por lo que puedes obtener referencias tales como "orientado a documento", "orientado a Internet", "orientado a atributos", "base de datos distribuida" (aunque esto puede ser también una base de datos relacional), "colecciones de fragmentos ordenados", "tablas hash distribuidas" y "bases de datos clave/valor". Cada uno de estos nombres apuntan a un rasgo específico en esta nueva propuesta, todas son variaciones en un mismo tema, por lo cual las llamaremos bases de datos clave/valor.

Sea cual sea el nombre con que las llames, este "nuevo" tipo de base de datos ha sido ya usado durante mucho tiempo por aplicaciones especializadas para las cuales las bases de datos relacionales eran deficitariamente adecuadas. Pero sin la escala que las aplicaciones web y la nube han traído éstas habrían permanecido como un subconjunto en su mayor parte no utilizado. En la actualidad, el desafío es reconocer si una base de datos relacional es la mejor opción para una aplicación en particular.

Las bases de datos relacionales y las bases de datos clave/valor son fundamentalmente diferentes y diseñadas para cumplir diferentes necesidades. Una comparación cara a cara nos acerca el entendimiento de estas diferencias:
DEFINICION DE BASE DE DATOS
Base de datos relacional
Base de datos clave/valor
  • La base de datos contiene tablas, las tablas contienen columnas y filas, y las filas están compuestas de valores de columna. Todas las filas dentro de una tabla tienen el mismo esquema.
  • El modelo de datos está bien definido por adelantado. Un esquema está fuertemente definido y tiene restricciones (constraints) y relaciones que fuerzan la integridad.
  • El modelo de datos está basado en una representación "natural" de los datos que contiene, no en la funcionalidad de la aplicación.
  • El modelo de datos está normalizado para eliminar la duplicación de datos. La normalización establece relaciones de tablas. Las relaciones asocian datos entre tablas.
  • Los dominios pueden ser inicialmente asociados como tablas, pero a diferencia de las tablas, no se define ningún esquema para un dominio. Un dominio es básicamente un cubo en donde se meten elementos en su interior. Los elementos dentro de un dominio simple pueden tener diferentes esquemas.
  • Los elementos son identificados por claves, y un elemento dado puede tener adjunto un conjunto dinámico de atributos.
  • En algunas implementaciones, todos los atributos son cadenas de texto (string). En otras implementaciones, los atributos tienen tiene tipos simples que reflejan tipos de código, tales como enteros (int), colecciones de cadena de texto y listas.
  • Ninguna relación es definida explícitamente entre dominios ni en el interior de un dominio dado.


Sin entidades unidas
Las bases de datos clave/valor está orientadas a elementos, lo que significa que todos los datos relevantes relacionados con un elemento están almacenados dentro del elemento. Un dominio (en el cual puedes pensar como una tabla) puede contener vastamente elementos diferentes. Por ejemplo, un dominio puede contener elementos de clientes y elementos de pedidos. Esto significa que los datos están comúnmente duplicados entre los elementos de un dominio. Esto es una práctica aceptada debido a que el espacio de disco es relativamente barato. Pero este modelo permite que un elemento simple pueda contener todos los datos relevantes, lo cual mejora y aumenta la escalabilidad eliminando la necesidad de unir (join) datos desde múltiples tablas. Con una base de datos relacional tales datos necesitan ser unidos para ser capaz de reagrupar los atributos relevantes.

Pero mientras la necesidad de las relaciones es reducida enormemente con bases de datos clave/valor, algunas de éstas son certeramente inevitables. Estas relaciones existen normalmente entre entidades centrales o comunes. Por ejemplo, un sistema de pedidos debería tener elementos que contengan datos sobre clientes, productos y pedidos. Tanto si éstos residen en el mismo dominio o en dominios diferentes es irrelevante, pero cuando un cliente realiza un pedido, probablemente no querrías almacenar tanto los atributos de cliente como de producto en el mismo elemento del pedido.

En lugar de ello, los pedidos necesitarían contener las claves relevantes que apunten al cliente y al producto. Mientras que esto es perfectamente factible en una base de datos clave/valor, estas relaciones no están definidas dentro del propio modelo de datos, así que el sistema de gestión de base de datos no puede forzar la integridad de las relaciones. Esto significa que puedes eliminar clientes y productos que han sido utilizados en pedidos. La responsabilidad de asegurar la integridad de datos cae enteramente en la aplicación.
ACCESO A DATOS
Base de datos relacional
Base de datos clave/valor
  • Los datos son creados, actualizados, borrados y recuperados usando SQL.
  • Las consultas SQL pueden acceder a datos desde una tabla simple o desde múltiples tablas usando uniones de tablas.
  • Las consultas SQL incluyen funciones para agregar y filtros complejos.
  • Normalmente contiene medios de lógica embebida cerrada para almacenamiento de datos, tales como triggers, procedimientos almacenados y funciones.
  • Los datos son creados, actualizados, borrados y recuperados usando llamadas a métodos de una API.
  • Algunas implementaciones proveen sintaxis básica similar a SQL para definir criterios de filtro.
  • A menudo pueden aplicarse predicados básicos de filtro (tales como =, !=, <, >, >= y <=).
  • Toda la lógica de aplicación y de integridad lógica de datos está contenida en el código de la aplicación.

INTERFAZ DE APLICACION
Base de datos relacional
Base de datos clave/valor
  • Tiende a tener su propia API específica, o hace uso de una API genérica, tal como OLE-DB o ODBC.
  • Los datos son almacenados en un formato que representa su estructura natural, así que debe estar mapeada entre la estructura de código de la aplicación y la estructura relacional.
  • Tienden a proveer SOAP y/o REST APIs sobre los cuales pueden ser realizadas las llamadas de acceso a datos.
  • Los datos pueden estar más eficientemente almacenados en código de aplicación que es compatible con su estructura, requiriendo solamente código relacional a modo de "tubería" para el objeto.


Almacenamiento clave/valor: lo bueno
Hay dos claras ventajas de las bases de datos clave/valor con respecto a las bases de datos relacionales.

Idoneidad para nubes
El primer beneficio es que son simples y de este modo para escalar son mucho mejores que las bases de datos relacionales actuales. Si estás juntando un sistema en casa y tienes la intención de lanzar docenas o centenares de servidores detrás para el almacenamiento abasto de tus datos esperando una demanda masiva en escala, entonces considera un almacenamiento clave/valor.

Debido a que las bases de datos clave/valor escalan fácil y dinámicamente, son también las bases de datos que los vendedores eligen para proveer sistemas multi-usuario y plataforma de almacenamiento de datos para servicios web. La base de datos provee una plataforma de almacenamiento de datos relativamente económica con un potencial masivo para escalar. Los usuarios típicamente pagan sólo por aquello que usan, pero su uso puede incrementarse y también sus necesidades. Mientras tanto, el vendedor puede escalar la plataforma dinámicamente basado en el total de la carga del usuario, con pequeñas limitaciones en el tamaño completo de la plataforma.


Más ajuste natural en código
Los modelos de datos relacionales y los Modelos de Objetos de Código de Aplicación se construyen normalmente de forma diferente, lo que lleva a incompatibilidades. Los desarrolladores sobrellevan estas incompatibilidades con código que mapea los modelos relacionales con sus modelos de objeto, un proceso comúnmente referido como "mapeo de objeto a relacional". Este proceso, el cual acumula esencialmente código a modo de "tubería" y que no tiene un claro e inmediato valor, puede tomar un trozo importante del tiempo y del esfuerzo dedicado al desarrollo de la aplicación. Por otro lado, muchas bases de datos clave/valor retienen datos en una estructura que mapea más directamente los objetos de clase usados en el código de la aplicación, lo cual reduce significativamente el tiempo de desarrollo.


Almacenamiento clave/valor: lo malo
Las restricciones inherentes de una base de datos relacional asegura que los datos en el nivel más bajo tengan integridad. Los datos que violan las restricciones de integridad no pueden ser introducidas en la base de datos de forma física. Estas restricciones no existen en una base de datos clave/valor, así que la responsabilidad de asegurar la integridad de los datos cae enteramente en la aplicación. Pero el código de aplicación a menudo acarrea errores. Una base de datos relacional correctamente diseñada no lleva a errores en cuestión de integridad de datos; una base de datos clave/valor, sin embargo, lleva fácilmente a errores en cuestión de integridad de datos.

Otro beneficio clave de una base de datos relacional es que te fuerza a seguir un proceso de modelado de datos. Si está bien hecho, este proceso de modelado crea en la base de datos una estructura lógica que refleja los datos que contiene, en lugar de reflejar la estructura de la aplicación. Entonces los datos se hacen independientes de la aplicación, lo que significa que otras aplicaciones pueden usar los mismos datos y la lógica de la aplicación puede ser cambiada sin perturbar el modelo de datos que hay por debajo. Para facilitar este proceso con una base de datos clave/valor, intenta reemplazar un ejercicio de modelado de datos relacional con un ejercicio de modelado de clase, el cual genere clases genéricas basadas en la estructura natural de los datos.

Y no olvidemos la compatibilidad. A diferencia de las bases de datos relacionales, las bases de datos orientadas a nube tienen poco de estándares compartidos. Mientras que todas ellas comparten conceptos similares, cada una tiene su propia API, interfaces de consulta específicas, y peculiaridades. De esta manera, necesitarás confiar realmente en tu vendedor, porque no serás simplemente capaz de cambiar la línea si no estás satisfecho con el servicio. Y debido a que casi todas las bases de datos clave/valor aún están desarrollándose la confianza es más arriesgada que con una base de datos relacional de la vieja escuela.


Limitaciones en analíticas
En la nube, las bases de datos clave/valor son normalmente multi-inquilino, lo cual significa que muchos usuarios y aplicaciones usarán el mismo sistema. Para prevenir cualquier proceso de sobrecarga del entorno compartido, la mayor parte de los almacenes de datos en nube limitan estrictamente el impacto total que cualquier consulta simple pueda causar. Por ejemplo, con SimpleDB tú no puedes ejecutar una consulta que tome más de 5 segundos. Con Google's AppEngine DataStore, no puedes recuperar más de mil elementos por cada consulta.

Estas limitaciones no son un problema para la lógica de tu aplicación (añadir, actualizar, eliminar y recuperar un número pequeño de elementos). Pero, ¿qué ocurre cuando tu aplicación se convierte en exitosa? Has atraído a muchos usuarios y has pedido muchos datos y ahora quieres crear nuevos valores para tus usuarios o quizá usar los datos para generar nuevos ingresos. Puedes encontrarte a tí mismo limitado en ejecutar consultas sencillas de estilo analítico. Con este tipo de plataforma de base de datos, cosas como rastreo de patrones de uso y recomendaciones de provisión basadas en historias de usuario difíciles en el mejor de los casos, imposibles en el peor.

En este caso, es probable que tengas que implementar una base de datos analítica por separado, en la cual las analíticas puedan ser ejecutadas. ¿Pensar por adelantado de dónde y cómo deberías ser capaz de hacer ésto? ¿Deberías hospedarla en la nube o invertir en una infraestructura on-site? ¿Podría la latencia entre tú y el proveedor del servicio en nube plantear un problema? ¿Tu base de datos clave/valor basada en nube soportar ésto? Si tienes 100 millones de elementos en tu base de datos clave/valor, pero sólo puedes sacar 1000 elementos a un tiempo, ¿cuantas consultas se deberían realizar?

En última instancia, mientras escalar es una consideración, no antepongas tu habilidad de convertir los datos en un activo propio. Todas las escalas en el mundo son inútiles si tus usuarios se han ido a tu competidor porque tiene frescura y tiene más características personalizadas.

miércoles, 16 de diciembre de 2009

¿Están condenadas las bases de datos relacionales?

Permitidme que os traduzca un interesantísimo artículo, dividido en tres partes, acerca del paradigma de las bases de datos no relacionales, comparándolas con las bases de datos relacionales que conocemos desde hace varias décadas. Se repite bastante el término "bases de datos relacionales", debido a que he querido dejarlo tal y como lo enfatiza en el texto original. Espero que os guste.
Fuente: http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php


Recientemente, un cierto número de bases de datos no relacionales han surgido tanto dentro como fuera de la nube. Un mensaje clave nos envían: "si quieres algo vasto o extenso, escalabilidad bajo demanda, entonces necesitas una base de datos no relacional".

Si esto es cierto ¿es ésto una señal de que las bases de datos relacionales tienen una grieta en su armadura?. ¿Es ésto una señal de que las bases de datos relacionales han tenido ya sus días y declinarán ante su prórroga?. En este post echaremos un vistazo a las actuales tendencias para migrar de las bases de datos relacionales en ciertas situaciones y qué significa ésto para el futuro de las bases de datos relacionales.

Las bases de datos han estado con nosotros alrededor de 30 años. Durante este tiempo algunas presuntas revoluciones estallaron brevemente, todas ellas supuestamente para augurar el fin de las bases de datos relacionales. Todas aquellas revoluciones fracasaron, por supuesto, y ninguna hizo mella en el dominio de las bases de datos relacionales.


Lo primero, algo de formación
Una base de datos es, esencialmente, un grupo de tablas (entidades). Las tablas están compuestas de columnas y filas (tuplas). Además, las tablas tienen restricciones (constraints) que definen relaciones entre ellas. Las tablas son consultadas mediante SQL, que producen conjuntos de resultados originados por el acceso a los datos de una o varias tablas. Múltiples tablas accedidas en una consulta simple están, en realidad, "unidas" juntas, típicamente por un criterio definido en las columnas de la tabla relacionada. La normalización es un modelo de estructuración de datos usado con bases de datos relacionales que asegura la consistencia y elimina la duplicación de datos.



Los Sistemas de Gestión de Bases de Datos Relacionales (RDBMS) facilitan las bases de datos relacionales. Casi todos los sistemas de bases de datos que usamos en la actualidad son RDBMS, tales como Oracle, SQL Server, MySQL, SyBase, DB2, Teradata, etc.

Las razones del dominio de las bases de datos relacionales no son triviales. Contínuamente ofrecen la mejor mezcla de simplicidad, robustez, flexibilidad, rendimiento, escalabilidad, y compatibilidad en gestión de datos genéricos.

Sin embargo, para ofrecer todo esto, las bases de datos relacionales tienen que ser increíblemente complejas internamente. Por ejemplo, una relativa sencilla instrucción SELECT podría tener cientos de potenciales vías de ejecución de la consulta. Todo esto está oculto para nosotros como usuarios, pero bajo la cubierta, los RDBMS determinan el "plan de ejecución" que mejor responda a nuestras peticiones, utilizando cosas como algoritmos basados en costes.


El problema con las bases de datos relacionales
Incluso aunque los RDMBS hayan provisto a los usuarios de bases de datos con la mejor mezcla de simplicidad, robustez, flexibilidad, rendimiento, escalabilidad y compatibilidad, su rendimiento en cada una de esa áreas no es necesariamente mejor que aquel que una solución alternativa que persigue estos beneficios de forma aislada. Esto no tuvo mucho de problema debido al dominio universal que los RDMBS ha sido mayor que la necesidad de desplazar estos límites. No obstante, si realmente tuviste una necesidad que no pudiera ser resuelta por una base de datos relacional genérica, las alternativas estuvieron siempre ahí para llenar esos nichos.

Hoy estamos en una situación ligeramente diferente. Para un número incremental de aplicaciones, uno de sus beneficios es convertirse en más y más críticos; y mientras aún es considerado un nicho, es rápidamente convertido en principal, así por tanto, para un número incremental de usuarios de bases de datos este requerimiento está empezando a eclipsar a otros en importancia. Ese beneficio es la escalabilidad. A medida que más y más aplicaciones son lanzadas en entornos que tienen cargas de trabajo masivas, tales como servicios web, sus requerimientos de escalabilidad pueden, lo primero de todo, cambiar muy rápidamente y, en segundo lugar, crecer en gran medida. El primer escenario puede se difícil de gestionar si tienes una base de datos relacional colocada en un servidor simple en casa. Por ejemplo, si tu carga se triplica de noche, ¿cómo puedes actualizar rápidamente tu hardware? El segundo escenario puede ser también difícil de gestionar con bases de datos relacionales en general.

Las bases de datos relacionales se escalan bien, pero normalmente sólo cuando la escala ocurre en un servidor simple de un nodo. Cuando la capacidad de ese nodo simple ha sido alcanzada, necesitas escalar fuera y distribuir su carga a través de un servidor de múltiples nodos. Aquí es cuando la complejidad de las bases de datos relacionales comienza a restregarse contra su potencial para escalar. Intenta escalar cientos o miles de nodos, en lugar de unos pocos, y las complejidades se tornan insostenibles, y las características que hacen a los RDBMS tan atractivos, drásticamente reducen su viabilidad como plataformas para sistemas grandes distribuidos.

Para que los servicios en nube sean viables, los vendedores tienen que tratar esta limitación, porque una plataforma en nube sin un almacenamiento de datos escalable no es maś que una plataforma como todas. Así, para proveer a los clientes con un sitio con escalabilidad para almacenar datos de aplicaciones, los vendedores tuvieron sólo una opción real. Ellos tuvieron que implementar un nuevo sistema de bases de datos focalizada en la escalabilidad, a expensa de otros beneficios que venían con las bases de datos relacionales.

Aquellos esfuerzos, combinados con aquellos de nichos existentes, llevaron a alzar una nueva generación de sistemas de bases de datos.

martes, 15 de diciembre de 2009

CouchDB: Primeros pasos

INSTALACION DE CouchDB

Antes de instalar CouchDB, existe una serie de dependencias, y éstas deben satisfacerse previamente.

La primera dependencia será “Visual C++ 2008 Redistributables (for openssl binary)”, disponible en las siguientes URL’s:

http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en

http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf

El archivo a descargar se llama

vcredist_x86.exe

Una vez ejecutado el archivo e instalado el paquete, la siguiente dependencia es OpenSSL, que se podrá descargar en la siguiente URL:

http://www.openssl.org/related/binaries.html

El enlace directo para la versión para Windows es la siguiente:

http://www.slproweb.com/products/Win32OpenSSL.html

Hay que descargar “Win32 OpenSSL v0.9.8l”, cuya URL directa es la siguiente:

http://www.slproweb.com/download/Win32OpenSSL-0_9_8l.exe

El archivo ocupa unos 7 MB.

Una vez instalado el segundo paquete, la última dependencia es ERLANG, un lenguaje de programación potente orientado a sistemas concurrentes distribuidos, y sobre el cual se ha escrito el código de CouchDB. La URL es la siguiente:

http://www.erlang.org/download.html

La última versión (a la edición de este artículo) es la versión R13B03, del 25 de Noviembre de 2009. Hay que descargar el binario para Windows, cuyo archivo es:

otp_win32_R13B03.exe

Ocupa unos 80,5 MB, incluyendo también la documentación.

Una vez instaladas las dependencias, se procederá a instalar CouchDB. La URL donde se encuentra disponible el archivo de instalación es la siguiente:

http://wiki.apache.org/couchdb/Windows_binary_installer

que tiene un enlace al siguiente repositorio:

http://people.apache.org/~mhammond/dist/0.10.0/

La última versión (a la edición de este artículo) es la 0.10, cuyo archivo es:

setup-couchdb-0.10.0.exe

El tamaño del archivo es de unos 44,5 MB.


ARRANQUE DE CouchDB

Para arrancar el gestor de base de datos CouchDB, se procederá a ejecutar el archivo
couchdb.bat

que se encuentra dentro del directorio bin. Si la instalación de CouchDB se realizó correctamente, se habrá creado un acceso directo en

Inicio > Todos los programas > Apache CouchDB > Start CouchDB

Se abrirá una consola MS-DOS con la secuencia de arranque (similar a ésta):

CouchDB 0.10.0 - prepare to relax...
Eshell V5.7.2 (abort with ^G)
1> Apache CouchDB 0.10.0 (LogLevel=info) is starting.
1> Apache CouchDB has started. Time to relax.
1> [info] [<0.1.0>] Apache CouchDB has started on http://127.0.0.1:5984/
1>


Para comprobar que está funcionando correctamente, abrir un navegador y escribir la siguiente URL:

http://127.0.0.1:5984/

Deberá dar como respuesta la bienvenida a CouchDB y la versión que se está ejecutando:

{"couchdb":"Welcome","version":"0.10.0"}


Nota: Es recomendable añadir alguna regla de excepción en el cortafuegos (firewall) que permita el acceso por el puerto 5984. De esta manera, no tendremos problemas con este puerto.


COMANDOS EN CouchDB

La comunicación con el gestor de base de datos será principalmente a través del protocolo http, por lo que se podrá utilizar simple navegador. También puede hacerse uso de un comando Unix llamado curl, con una sintaxis similar a la siguiente:

curl http://127.0.0.1:5984 (equivale al mensaje de bienvenida)
curl –X GET/PUT http://127.0.01:5984/_comando


Para visualizar todas las bases de datos creadas, utilizar el siguiente comando:

http://127.0.0.1:5984/_all_dbs

Si no hay creada ninguna base de datos, el resultado será el siguiente:

[]


FUTON
Existen comandos curl para casi todo, pero lo mejor será utilizar FUTON, una interfaz de usuario a través del navegador. Esta herramienta permitirá, entre otras cosas, crear y eliminar bases de datos, ver y editar documentos, componer y ejecutar vistas MapReduce o lanzar replicaciones entre bases de datos.

Para lanzar FUTON, escribir la siguiente URL:

http://127.0.0.1:5984/_utils

También puede ser lanzada, desde Windows, mediante el siguiente acceso:

Inicio > Todos los programas > Apache CouchDB > Futon (CouchDB web interface)

Se mostrará la siguiente interfaz:


Al inicio, mostrará las bases de datos que están creadas.

Para crear una base de datos, hacer clic en la opción “Create Database…” situada en la parte superior izquierda, junto al icono “+”. Aparecerá una caja de diálogo solicitando el nombre de la nueva base de datos.



Introducir “tarjetas” y hacer clic en el botón “Create”. Una vez creada la base de datos “tarjetas”, aparecerá a siguiente imagen:



En la parte derecha se observará que la base de datos se ha creado, y en la URL aparecerá el comando:

http://127.0.0.1:5984/_utils/database.html?tarjetas

el cual indic a que se está utilizando la base de datos “tarjetas”. Como se acaba de crear la base de datos, no hay todavía ningún documento.

En la parte superior nos da las siguientes opciones:
- New Document: Crea un nuevo documento
- Compact Database…: Compacta la base de datos.
- Delete Database…: Elimina la base de datos

Si se crea un nuevo documento, aparecerá lo siguiente:



Automáticamente ha generado un documento, cuyo _id ha sido etiquetado con un valor que no se repetirá jamás, y que identificará al documento de manera única.

En la parte superior aparecerán las siguientes opciones:
- Save Document: Guarda el documento actual
- Add Field: Agregar un campo
- Upload Attachment…: Adjuntar (archivo)

Hacer clic en la opción “Add Field”, con lo que nos permitirá introducir el nombre de un campo y el valor del mismo (haciendo doble clic).


Una vez introducidos todos los valores del documento, se guarda el documento mediante la opción “Save Document”. El resultado será el siguiente:


Los datos han sido guardados, y los campos ordenados por su nombre. En la parte inferior tendremos acceso a las opciones “Previous version” y “Next version", que nos permitirá llegar a las versiones del documento actual que se hayan registrado.
Si se hace clic sobre el botón “Source” (pestaña superior derecha), se mostrará el código del documento en formato JSON:

{
"_id": "e8c79ce94ac50a136ec02164212b695c",
"_rev": "2-5892a9350b124b19fa7393f4c936d040",
"nombre": "Rafael Hernampérez Martín",
"empresa": "Tecnillusions",
"telefono": "999-999-999",
"email": "info@tecnillusions.com",
"web": "http://www.tecnillusions.com"
}


La pestaña “Fields” mostrará nuevamente el documento en formato de tabla.

La franja superior (en negro) muestra la navegación actual:

Overview > baseDatos > id_documento

Cada uno de los niveles de navegación es accesible. Así, si hacemos clic sobre “Overview” se accederá directamente a la página principal, donde se muestran las bases de datos existentes:



Por último, para parar y cerrar la ejecución del servidor CouchDB, acceder a la consola de MS-DOS que se abrió al arrancar CouchDB, y detenerlo pulsando las teclas Ctrl+C. Solicitará confirmación sobre la terminación del proceso de lotes. Si se confirma (con S y la tecla Enter), se detendrá CouchDB.

CONCLUSION
En este artículo hemos aprendido a:
- Instalar CouchDB en un sistema Windows
- Arrancar el servidor de base de datos CouchDB
- Acceder a los comandos mediante navegador y comando curl
- Acceder a la herramienta FUTON
- Crear una base de datos
- Añadir un documento a la base de datos
- Añadir campos y valores a un documento
- Navegar por la herramienta FUTON
- Detener el servidor de base de datos CouchDB

Safe Creative #0912155119950

CouchDB: Introducción

CONCEPTO

Couch (sofá, diván) DB (DataBase) es un nuevo concepto de bases de datos, de la mano de la comunidad Apache. El nombre no ha sido elegido al azar, ni de manera casuística. Su nombre evoca relax, y ésa es su filosofía. Evoca tranquilidad, debido a que todo ahora es más sencillo y produce menos problemas, incluso para personas no técnicas.



Lo primero que llama la atención de CouchDB es que no sigue el concepto de base de datos tradicional entidad-relación (modelo relacional), si no un modelo de almacenamiento documental, gestionado por un potente motor de consultas sencillísimo de utilizar.

El modelo entidad-relación está basado en la definición de tablas de datos, estructuradas por columnas (campos) y filas (registros). Para la creación de un documento complejo, como una factura, es necesario definir varias tablas para evitar la repetición de datos, y relacionar estas tablas mediante claves (id cliente, id proveedor, nº factura…). Este sistema, tiene la ventaja de ahorrar información y establecer reglas relacionales (constraints), de tal forma que no se pueda cometer errores ni quebrantar las relaciones, obligando a tener una fila en cada una de las tablas involucradas. Este sistema, sin embargo, supone definir una estructura muy compleja y poco flexible, y cualquier cambio o normalización impactaría seriamente al resto de datos y a la aplicación. Otro inconveniente derivado del modelo entidad-relación, es que se obliga a definir y completar campos que son opcionales (aunque sea con un valor NULL o vacío).

CouchDB adopta un modelo de datos “auto-contenidos”, con lo que es posible tener una colección de documentos del mismo tipo (semántica), con variantes en cómo está estructurada la información (sintaxis), tal y como se tiene en el mundo real. Un ejemplo sencillo sería una colección de tarjetas de visita. Casi todas las tarjetas tienen una información común (nombre, apellidos, dirección, teléfono), pero alguna omitirá o añadirá algún dato, como el fax, la página web o el correo electrónico. Mientras que en el modelo entidad-relación habría que definir estos campos, el modelo documental permite que una tarjeta tenga o no estos campos.
Una base de datos CouchDB es una colección de documentos. Los documentos son objetos compuestos por campos, cuyos valores pueden ser cadenas de texto, números, fechas, listas ordenadas y mapas asociativos. Un ejemplo de documento podría ser el siguiente:

"Asunto": "Introducción a CouchDB"
"Autor": "Rafael Hernampérez"
"Fecha": "15/12/2006"
"Etiquetas": ["CouchDB", "Base de datos", "Apache"]
"Resumen": "Introducción a la base de datos documental CouchDB y diferencias con respecto a bases de datos relacionales"


Cada documento está identificado por un ID único (código o identificador).
Para gestionar los documentos, CouchDB integra un modelo de vistas que utilizan JavaScript, las cuales permiten agregar y reportar en los documentos en la base de datos. Las vistas son construidas dinámicamente y no afectan por debajo al documento, pudiendo tener tantas vistas diferentes de los mismos datos como se desee.

A diferencia de una base de datos relacional, CouchDB está diseñado para almacenar y reportar grandes cantidades de datos semi-estructuradas orientadas a documentos, sin un esquema o estructura. En una base de datos relacional, el esquema es predefinido y limita la información que es necesaria, especialmente cuando las necesidades cambian con respecto a las anticipadas en el diseño. Esto ocasiona problemas en la actualización en un medio distribuido. CouchDB no está forzado por un esquema, y los nuevos tipos de datos pueden ser añadidos sin problemas en documentos similares.
CouchDB posee utilidades para trabajar en línea de comandos o directamente a través de una URL y un navegador, hablando con el gestor en formato JSON (JavaScript Object Notation). Asimismo, posee utilidades en una interfaz de administración, que permiten al usuario realizar las operaciones sin necesidad de comandos, a través de la URL:

http://127.0.0.1:5984/_utils/


Arquitectura de CouchDB

En su motor late un corazón tolerante a fallos, los cuales se producen en un entorno controlado, y son tratados de forma que no afectan al sistema servidor, si no en peticiones aisladas. No se esperan comportamientos aleatorios ni errores no traceables en las operaciones. Asimismo, gestiona perfectamente un entorno de tráfico variable, absorbiendo peticiones concurrentes sin errores, tomando para ello, más tiempo para cada petición hasta su finalización. Por otra parte, CouchDB está diseñado para escalabilidad extrema, permitiendo el crecimiento o la disminución del hardware, y la replicación incremental.

CouchDB puede ser integrado en sistemas grandes y complejos de información, gracias a sus componentes que pueden ser usados como bloques de construcción, adaptándose a las necesidades del sistema, garantizando la flexibilidad, el rendimiento y la fiabilidad, incluso cuando el sistema requiere de una escalabilidad cambiante y rápida.

Uno de estos componentes está enfocado a la replicación incremental, capaz de sincronizar varias bases de datos con la fiabilidad de poder hacerlo entre máquinas por almacenamiento redundante, distribuir datos a un cluster que comparte un subconjunto del total de peticiones (balanceo de carga), o distribuir datos entre localizaciones físicas distantes.

CouchDB es una base de datos nacida en la red (no desarrollada para la web). Esta filosofía toma especial relevancia en cuanto a latencia se refiere. La experiencia del usuario radica principalmente en su satisfacción en cuanto a la respuesta de datos. Lo normal en las aplicaciones web es solicitar datos, crear una conexión, realizar una consulta, esperar respuesta y transmitir la respuesta. Este proceso puede llevar segundos de demora, y más si hay demasiada concurrencia. Si a esto le unimos el estar offline, la cosa empeora, pues si no hay conectividad no hay datos. CouchDB permite un escenario en el que, por ejemplo, un dispositivo móvil tiene CouchDB, y que se sincroniza mientras está online, y la latencia es muy baja mientras accede a los datos de forma local.

CouchDB toma como referente el teorema de CAP:
- Consistency: Consistencia o la capacidad de que todos los clientes vean los mismos datos, incluso con actualizaciones concurrentes
- Availability: Disponibilidad o la capacidad de que todos los clientes accedan a la misma versión de los datos.
- Partition tolerance: Partición tolerante o la capacidad de que la base de datos pueda estar dividida en múltiples servidores.

El verdadero corazón de CouchDB es un potente motor de almacenamiento B-Tree, una estructura de datos ordenada que permite búsquedas, inserciones y eliminaciones en tiempo logarítmico. Este sistema permite un alto rendimiento, una alta disponibilidad, mejoras de velocidad, y la partición de los datos en múltiples nodos sin afectar a la disponibilidad de consultar cada nodo aisladamente.

El cálculo de los resultados de una vista es realizado mediante MapReduces (mapeo y reducción), que son aplicados a cada documento de forma aislada, lo que presta a sí mismo una computación paralela e incremental. Estas funciones (mapeo y reducción) producen pares de clave/valor, que son insertados en el motor de almacenamiento B-Tree, ordenados por clave, haciendo extremadamente eficiente las búsquedas por clave o por rango.

Otra característica de CouchDB es que no utiliza bloqueos, como en las bases de datos relacionales, en donde una actualización de un dato provoca un bloqueo que impide a cualquier consulta acceder al dato mientras dure la actualización. Cuando hay múltiples actualizaciones/peticiones concurrentes, se está desperdiciando un enorme poder de procesamiento de los servidores, tomando mucho tempo en decidir quién hace qué, cuándo y en qué orden, en lugar de realizar su trabajo. En lugar de ello, CouchDB utiliza un sistema de Control de Concurrencia Multi Versión (MVCC en inglés), para gestionar el acceso concurrente a la base de datos, ejecutando en paralelo las peticiones, incluso en un sistema de carga extrema. Los documentos son versionados con un sistema de control de versiones (de forma similar a Subversion). Cada actualización genera una nueva versión del documento y lo guarda por encima del antiguo. Esto optimiza el rendimiento concurrente, ya que una lectura puede leer la última versión mientras aún se está actualizando, sin tener que esperar la actualización.

La validación previa de los datos complejos es posible gracias a funciones JavaScript, lo que permite que cuando se actualiza un documento se realice una validación del mismo en una copia del documento, denegando o aprobando el mismo según sus reglas.

Cuando se trabaja con varios nodos, la consistencia distribuida está asegurada con CouchDB, gracias a la replicación incremental, que evita preocuparnos de la disponibilidad de la información en caso que uno de los nodos deje de funcionar, gracias a la copia periódica entre servidores de los cambios realizados en los documentos. Esta replicación se puede programar mediante un gestor de tareas. Después de cada replicación, cada nodo es capaz de trabajar de forma independiente.

Además, CouchDB posee un sistema automático detección y resolución de conflictos, en el caso de que un documento se intente actualizar en distintos nodos, guardando varias versiones las actualizaciones, y poniendo como la versión más reciente la versión ganadora. Para gestionar conflictos, CouchDB permite acceder a las versiones, cambiar el orden de las versiones, y guardarlas.


ENLACES:
Sitio oficial: http://couchdb.apache.org/
Guía de CouchDB: http://books.couchdb.org/relax
Wiki: http://wiki.apache.org/couchdb/
Planet CouchDB: http://planet.couchdb.org/

Creative Commons License
Introducción a CouchDB by Rafael Hernamperez is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 Unported License.
Based on a work at rafinguer.blogspot.com.
Safe Creative #0912155118793

viernes, 11 de diciembre de 2009

Software por la patilla

InkScape:
Sin duda alguna, el mejor programa libre para la edición y diseño de imágenes vectoriales, al estilo de CorelDraw, FreeHand o Illustrator. Para Windows, Linux y MacOs X.


Speccy:
Excelente utilidad que diagnostica y da información sobre todo lo que tiene nuestro sistema: sistema operativo, memoria, discos duros, hardware, etc. Para Windows.


iSpring:
Práctica aplicación que convierte una presentación PowerPoint en un Flash. Para Windows.


Avant Window Navigator:
Fantástico dock (barra de herramientas con accesos directos mediante iconos animados, normalmente en la parte inferior de la pantalla) al estilo del Mac. Para Linux.


FotoMix:
Este programa permite de manera sencilla y rápida retocar y componer fotografías. Para Windows.

FotoMorph:
Este programa te permite crear de forma sencilla morphings, es decir animaciones que convierten una foto en otra (como aquel vídeo famoso de Michael Jackson). Para Windows

Linux Multimedia Studio:
Completísima suite para que puedas crear música, sonidos, efectos especiales... el límite lo pones tú. A pesar de su nombre (Linux), también puedes usarlo en Windows.


Death Rally:
Frenético juego de carreras de coches donde todo vale: hacer trampas, empujar, poner bombas... lo importante es ganar. Para Windows.

Para amantes de la música

Para los que os encanta la música, os voy a enseñar algunos trucos para estar siempre surtido.

Para conocer artistas o grupos, así como sus trabajos, os recomiendo visitar MySpace (http://www.myspace.com), donde podréis buscar (en vez de por gente, por música), y escuchar lo que hacen antes de bajaros algo que puede no gustaros. En MySpace también podéis hacer búsquedas por género y por país. Así descubriréis grupos nuevos. Esta página es un lugar donde cualquier artista se promociona.

Otro lugar donde podréis conocer y escuchar grupos y obras musicales antes de bajaros nada, es en last.fm (http://www.lastfm.es)

Si queréis encontrar cualquier artista o tema, podéis usar la radio a la carta, y el mejor candidato es Spotify, un programa único en su especie. Os lo recomiendo. Sólo tendréis que ir a su página (http://www.spotify.com), daros de alta (es gratis: https://www.spotify.com/en/get-started), y bajaros el programa y... a escuchar toda la música que queráis. Sólo se requiere de conexión a internet.

Todo lo anterior podéis hacerlo sin miedo a problemas legales, pues estáis escuchando la música directamente de lugares de promoción. Si queréis bajaros música, la cosa cambia un poco dependiendo de la parte interesada. Para la SGAE (y otras asociaciones que presuntamente defienden los derechos de autor), así como para las discográficas, es ilegal bajar música. Para el Código Penal y las leyes no lo es. Ilegal no es bajarse música o compartirla. Lo que es ilegal es lucrarse con ella, o utilizar ésta para lucrarse.

¿Cómo bajar música?. Ares, eMule, LimeWire y demás programas de descargas P2P (peer to peer, o punto a punto) son las primeras opciones que habréis pensado, pero luego os aburriréis esperando o encontrando enlaces que no están compartidos.

Yo os recomendaría ir a una página como vagos.fm (http://vagos.fm), donde cientos de usuarios suben cada día música compartida en repositorios de descarga directa (sin necesidad de programas), como Rapidshare, Mediafire, Megaupload, etc. La música está clasificada por género. Podréis bajaros albumes, recopilaciones, discografías, etc. Cada día encontraréis nuevas descargas. Esta página sólo tiene enlaces a los repositorios que comparten otros usuarios, sin ánimo de lucro (no cobran nada).

Si queréis bajar directamente un tema concreto de un artista o banda concretos, os recomiendo songr, una pequeña maravilla, que os permitirá buscar música directa en mp3 o en vídeo, y que sólo tenéis que hacer clic con el botón derecho para escucharlo o bajar directamente el archivo. La página web del programa es http://songr.co.cc, y el enlace para bajarlo es http://www.mediafire.com/?tnjuomytnzy

Si os preocupa la legalidad, podéis bajaros música copyleft, es decir, libre de derechos de autor de la SGAE y similares, donde los autores promocionan directamente, sin intermediarios (organismos o discográficas), su música, y la puedes descargar libremente y de forma legal. Si tenéis algún local o negocio, podéis usar esta música sin que la SGAE os pueda multar o exigir diezmo alguno. http://www.musicacopyleft.es

Para luego escuchar los archivos mp3, podéis usar el Windows Media Player, pero si tenéis bibliotecas completas de música, os recomiendo programas como aTunes (clon del iTunes de Apple) (http://www.atunes.org), donde podéis organizar a vuestro gusto la biblioteca, listas de reproducción, escuchar radio, editar los tags de los archivos, etc.

miércoles, 9 de diciembre de 2009

Software por la patilla

TrueCrypt:
Asegura tus ficheros guardándolos en una unidad virtual oculta y encriptada. Para Windows, Linux y Mac.


Memory Improve Master:
Excelente utilidad que te permitirá optimizar el uso de la memoria de tu ordenador, liberando así el consumo de la misma. Para Windows.


MobaXterm:
Curiosa y utilísima aplicación con la que tendrás una consola multipestaña en Windows con la potencia del bash de Unix/Linux, incluyendo el vi. No require instalación, tan sólo ejecutar su archivo exe. Para Windows:


Dixio Desktop:
Interesante utilidad que te permite traducir automáticamente cualquier texto sobre el que pongas el puntero del cursor, pulsando Ctrl+Clic derecho del ratón. Para Windows, Linux y MacOS.


TwiTux:
Útil programa que te permitirá acceder a tus notificaciones y mensajes en Twitter. Para Linux.


Kantaris:
Excelente reproductor multimedia que soporta multitud de formatos de audio y vídeo. Para Windows.


PhotoJoy:
Crea originales y divertidos salvapantallas con efectos especiales utilizando tus propias fotos. Para Windows.


SongR:
Interesante que te permite buscar canciones mp3 y descargarlas, sin necesidad de torrents ni programas como emule o Ares. También permite escuchar previamente la canción o descargar vídeos de YouTube. Para Windows.


Nexus Radio:
Sintonizador de más de 7000 emisoras de radio de todo el mundo a través de internet. Permite grabar una emisión, e incluso programar una grabación. Para Windows.


Live Brush:
Espectacular herramienta de dibujo con pinceles que te dejará boquiabierto. Te permite crear tus propios pinceles, texturas y trazos. Recomendado. Para Windows y Linux (requiere Adobe AIR).


FlipOut:
Excelente remake del juego Arkanoid pero en 3D. Diversión asegurada. Para Windows y Linux.


Babo Violent:
Frenético juego online de acción y disparos en el que tendrás que cargarte todo lo que te aparezca. Para Windows.

lunes, 7 de diciembre de 2009

Software por la patilla

Microsoft Security Essentials:
Imprescindible antivirus de la mano de Microsoft, que combate virus, troyanos y spyware. Está avalada como una de las mejores aplicaciones de seguridad y protección contra virus para Windows.

SocketSniff:
Práctica utilidad que te permite seleccionar un programa que esté en ejecución, y analiza todo el tráfico de red que genera. Gracias a este programilla podrás saber si un programa está enviando datos a través de Internet, cuando, a dónde, y qué está enviando. Para Windows.


SIW (System Information for Windows):
Utilidad que permite analizar y visualizar la información completa sobre el hardware y el sistema de tu máquina.

OpenShot Video:
Completo editor de vídeo, con el que podrás componer tus montajes de vídeo: cortar, pegar, copiar, añadir música, crear efectos, transiciones, etc., y exportar el vídeo a multitud de formatos. Para Linux.


Kigo Video Converter:
Práctica y sencilla aplicación que permite convertir entre varios formatos de vídeo. Para Windows y Mac.

Spotify:
Estupenda aplicación que te permite escuchar música a través de internet, en lo que se conoce radio a la carta. Para Windows y Linux. Para registrarse sin invitación: https://www.spotify.com/en/get-started

Asunder:
Práctica utilidad que permite extraer y ripear las canciones de un CD a formato MP3, OGG Vorbis, WAV o FLAC. Para Linux.


Bing Maps 3D:
El Google Maps de Microsoft, con la posibilidad de una vista de pájaro y ver edificios en 3D. Para cualquier plataforma (internet).


vxDev-C++:
Completo entorno de desarrollo para C++ y desarrollo visual para Windows.


Particion Find and Mount:
Extraña y útil aplicación que permite detectar particiones ocultas, recuperarlas y montarlas. Para Windows.


SteganoG:
Curioso software que permite camuflar un fichero dentro de una imagen, protegido por una contraseña. Para Windows:


TVMan Radio:
Fantástico programa que te permitirá ver la televisión y escuchar la radio en el ordenador. Un producto español que recoge todo tipo de canales españoles, incluyendo canales regionales y locales. Para Windows.

Raid'em:
Trepidante juego matamarcianos a la antigua usanza, completamente adictivo. Para Windows y Linux.


Neverball:
Adictivo juego en el que tendrás que guiar una bola a través de laberintos, esquivando trampas y obstáculos, y recogiendo monedas. Para Windows, Linux, FreeBSD y MacOS.