Open Source y NoSQL
Resulta que las redes sociales le han dado a pensar a los desarrolladores que un sistema gestor de base de datos relacional (SGBDR) no es la infraestructura óptima para un sitio web con decenas de millones de usuarios registrados. Además, los servicios más importantes han liberado sus sistemas de almacenamiento no relacional. De LinkedIn salió Voldemort, Facebook donó Cassandra a la Apache Software Foundation, VMWare esponsoriza Redis(usado por Craigslist), en 2009 Baidu se convirtió en sponsor de Hypertable y se sospecha que HBase, la base de datos que corre sobre el framework Hadoop extensamente usado por Yahoo!, también se usa en Bing tras la compra de Powerset por parte de Microsoft en 2008.
Vale la pena señalar que en los sistemas de almacenamiento no relacional los substitutivos al Software Libre no son sistemas privativos sino software como servicio. La competencia del software de Apache no es mayormente software de Microsoft u Oracle (aunque tengan el veterano BerkelyDB) sino Amazon Dynamo como parte de S3 o la implementación de BigTable disponible en Google App Engine.
Lo más probable es que los usuarios de almacenamiento no relacional se dividan en dos grupos, los de software Open Source y los de software como servicio.
Una buena porción de la tarta Open Source se la llevará Apache con Cassandra, CouchDB, HBase y Jackrabbit.
Habrá también proveedores independientes como mongoDB de 10gen o Tokyo Cabinet, con unas pocas funcionalidades estrella o especialmente adaptados a algún lenguaje de programación como Ruby o PHP, pero yo dudo que vaya a haber un próximo producto estrella como MySQL o JBoss fuera de Apache que domine el nicho de sistemas almacenamiento no relacional Open Source.
Otra fracción importe de los desarrolladores se convertirán en usuarios de los sistemas de almacenamiento como servicio de Amazon, Google, Azure, o cualquier otro. Incluso algunas de las ofertas de almacenamiento como servicio estarán basadas en Software Libre.
Lo importante es la creación de un API estándar como SQL. Si apareciera un API estándar para almacenamiento no relacional con soporte para ACID, bloqueos, y replicación, entonces sería posible escribir una aplicación para que corriese en cualquier infraestructura y así eliminar el vendor lock-in que produce el uso de las soluciones de almacenamiento como servicio. A falta de un estándar yo recomendaría a cada desarrollador que antes de basar su solución an Google App Engine o Amazon S3 o Azure o lo que sea, al menos escriba un wrapperque permita cambiar el proveedor de infraestructura en caso de que ello fuere conveniente o necesario.
También habrá un hype de moda dentro de poco, que pronto pasará. Los sistemas de almacenamiento clave/valor tampoco son la solución perfecta. En realidad son una simplificación extrema de los sistemas gestores de bases de datos relacionales surgida para solucionar los problemas de rendimiento y escalabilidad de sitios web con centenares de millones de usuarios. Los sistemas NoSQL casi siempre se usan en combinación con caches comomemcached o JBoss Cache, con bases de datos relacionales como MySQL y con indexadores como Lucene. Y defensores a ultranza del modelo relacional tampoco faltan. Los hay que argumentan que una base de datos relacional paralela es superior en todos los aspectos a un sistema de clave/valor o que simplemente la mayoría de ellos no escalan como deberían, o incluso que están impacientes por ver morir el movimiento.
El precio de la memoria RAM y la evolución hacia las nuevas tecnologías DDR3 y DDR4 también será un factor determinante en la evolución de las arquitecturas. Con el precio actual de ~35€ por Gigabyte de memoria DDR2 se puede almacenar una base de datos de 96Gb enteramente en RAM por poco más de 3.000€. Aunque dicho precio es aún 10 veces superior de lo que cuesta la misma cantidad de espacio en disco, empieza a ser económicamente viable para muchos sitios web manejar una gran parte de su información no-multimedia en RAM utilizando la base de datos sólo como copia de respaldo ante caídas.
Mark Zuckerberg donará $100M a educación pública en EEUU
El CEO y fundador de Facebook Mark Zuckerberg donará 100 millones de dólares para las escuelas públicas en los EE.UU., y se le informó que se anunciará la donación el viernes en el show de Oprah Winfrey.
La donación será la primera parte de una fundación que Zuckerberg está creando para mejorar la educación en los EE.UU, y la primera donación 100 millones de dólares se va aNewark.
Mark Zuckerberg fue elegido recientemente como una de las persona más rica del mundo con una fortuna estimada en alrededor de 6,9 mil millones dólares, lo que lo pondría por delante del consejero y delegado de Apple Steve Jobs.
Mucha gente llamará a la donación un movimiento calculado, ya que se dará a conocer el mismo día que la película “The social Network” es puesta en marcha en los cines americanos, una película que retrata Zuckerberg de una forma poco favorable como les puede pasar a muchos universitarios(todos fuimos jovenes y alguna tonteria seguro que hicimos).
Al final del día, independientemente de sus motivaciones para la donación, sigue siendo una donación increíblemente generoso que ayudará al sistema escolar publico. Enhorabuena por ese apoyo a la educación.
Release del Internet Explorer 9 Beta
Microsoft hizo mucho foco en los estándares, HTML 5, la aceleración asistida por GPU, y otras funcionalidades adicionales como la compatibilidad con Windows 7.
Si bien se trata del primer beta, el futuro para este navegador se ve muy promisorio.
Desde el arranque la aplicación es más rápida, así también las diversas demos disponibilizadas en el sitio de el preview.
Al arrancar el navegador por primera vez se sugiere escoger los Addons o complementos que utilizamos, para mejorar la performance como muestra el gráfico inferior:
La interface nueva aprovecha el efecto Glass disponibles en Windows Vista y Windows 7, asi también la barra de navegación y tabs están mejor distribuídas y consumen menos espacio.
La apertura de nuevos Tabs, sugiere sitios populares y la navegación “en privado”
También se disponibiliza un Download Manager, algo que mucha falta le hacía a Internet Explorer y que otros navegadores ya lo tenían.
La integración con Windows 7, es más que evidente al hacer clic derecho sobre el icono en la barra de aplicaciones
Saludos.
Qué es NoSQL?
Hasta 2009 estas cinco letras cayeron en el olvido, pero fue Johan Oskarsson, entonces empleado de Last.fm, quien organizó un evento para tratar las bases de datos distribuidas de código abierto no relacionales, llamándolas “NOSQL”, Not-Only SQL.
Las características comunes entre todas las implementaciones de bases de datos distribuidas no relacionales, propietarias o no, suelen ser las siguientes:
- Consistencia Eventual: No se implementan mecanismos rígidos de consistencia como los presentes en las bases de datos relacionales, donde la confirmación de un cambio implica una comunicación del mismo a todos los nodos que lo repliquen. Esta flexibilidad hace que la consistencia se dé,eventualmente, cuando no se hayan modificado los datos durante un periodo de tiempo. Esto se conoce también como BASE (Basically Available Soft-state Eventual Consistency, o coherencia eventual flexible básicamente disponible), en contraposición a ACID, su analogía en las bases de datos relacionales.
- Estructura distribuida: Generalmente se distribuyen los datos mediante mecanismos de tablas de hash distribuidas (DHT) ya que realmente se trata, según las distintas implementaciones, de redes p2p.
- Escalabilidad horizontal: La implementación típica se realiza en muchos nodos de capacidad de procesado limitado, en vez de utilizar grandes Mainframes.
- Tolerancia a fallos y Redundancia.
De entre todas las implementaciones de bases de datos NoSQL, hay muchas que no utilizan el lenguaje de consultas SQL (por ejemplo, MongoDB usa JSON), pero hay algunas que siguen usándolo, como por ejemplo BigTable (GQL), que lo ha transformado manteniendo su estructura básica.
Definitivamente, con el término NoSQL nos referimos a una multitud de bases de datos que intentan solventar las limitaciones que el modelo relacional se encuentra en entornos de almacenamiento masivo de datos, y concretamente en las que tiene en el momento de escalar, donde es necesario disponer de servidores muy potentes y de balanceo de carga
Colaboradores
Los 10 errores mas comunes al programar orientado a objetos en PHP
Los 21 errores más comunes al programar con php
Aunque muchos de los que programamos constantemente en PHP hemos superado varios puntos, siempre hay cosas en las que caemos, pudiendo mejorar la calidad de nuestro código.
Los errores están divididos en 3 partes, siendo los primeros
SNAPSHOT DATABASE
Esto puedo confundir mucho ya que pareciera que fuera parte de la replicación pero no es así, realmente es una base de datos sólo lectura, estática basada en una base datos normal (fuente).
En la parte de abajo hay un ejemplo reemplacen la información por sulla y aparecerá ya base datos bajo la carpeta de Database Snapshots.
Cuál es su función:
Pueden ser utilizados para los informes. Asimismo, en el caso de un error del usuario en una base de datos de código fuente, puede restaurar la base de datos fuente al estado en que estaba cuando se creó el snapshot.
La pérdida de datos se limita a las actualizaciones de la base de datos desde su creación de la instantánea. Además, la creación de una snapshot de base de datos puede ser útil inmediatamente antes de hacer un cambio importante de una base de datos, como cambiar el esquema o la estructura de una tabla.
Tiene 3 posibles usos:
• Mantener los datos históricos para la generación de informes (Reporteria)
• Protección de datos de errores de usuario (Backup).
• La gestión de una base de datos de prueba (Base datos de pruebas)
Importante:
Database snapshots, fueron introducidos en SQL Server 2005, sólo están disponibles en las ediciones Enterprise de SQL Server 2005, SQL Server 2008 y SQL Server 2008 R2.
En la parte de abajo hay un ejemplo reemplacen la información por sulla y aparecerá ya base datos bajo la carpeta de Database Snapshots.
Crear una base datos snapshots
SNAPSHOT CREATE DATABASE AdventureWorks_dbss1800 ON
( NAME = AdventureWorks_Data, FILENAME =
'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )
AS SNAPSHOT OF AdventureWorks;
Si hacer un restore de en base a un SNAPSHOT seria de la siguiente manera:
Restore
USE master
RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';
GO
Que permisos necesito para crear una:
La única manera de crear una SNAPSHOT CREATE DATABASE es utilizar Transact-SQL. Cualquier usuario que pueda crear una base de datos puede crear una snapshot de base de datos, sin embargo, para crear una instantánea de una base de datos reflejada, usted debe ser un miembro de la función de servidor sysadmin.
Articulo de referencia:
http://msdn.microsoft.com/en-us/library/ms175469.aspx
http://msdn.microsoft.com/en-us/library/ms187054.aspx
http://www.sqlcoffee.com/Tips0004.htm
LINQ paralelo ( PLINQ ) para SQL server
Los procesadores multinúcleo ya están aquí. Los procesadores multinúcleo solo estaba disponibles para servidores y PCs de escritorio. Pero ahora, ya se están usando en teléfonos móviles y PDA, lo cual genera grandes ventajas en relación con el consumo de energía. En respuesta al aumento de disponibilidad de plataformas con procesadores multinúcleo, Parallel Language Integrated Query (PLINQ) ofrece una manera fácil de sacar partido del uso de hardware paralelo, incluidos equipos tradicionales con varios procesadores y la última ola de procesadores multinúcleo.
PLINQ es un motor de ejecución de consultas que acepta cualquier consulta LINQ to Objects o LINQ to XML y usa automáticamente varios procesadores o núcleos para su ejecución cuando estos están disponibles. El cambio en el modelo de programación es minúsculo, lo cual significa que no es necesario ser un gurú para usarlo.
Usar PLINQ es casi exactamente lo mismo que usar LINQ to Objects y LINQ to XML. Puede usar cualquiera de los operadores disponibles.
Ejemplos con conexión a base de datos.
Linq
var query = from c in db.Customers
where c.Country == "USA"
orderby c.CompanyName
select new { c.CustomerID, c.CompanyName };
plinq
var query = from c in db.Customers.AsParallel()
where c.Country == "USA"
orderby c.CompanyName
select new { c.CustomerID, c.CompanyName };
El genio Joe Duffy es el responsable de desarrollo del equipo Parallel FX de Microsoft y participa habitualmente en el blog www.bluebytesoftware.com/blog. Está escribiendo un libro, Concurrent Programming on Windows, que va a ser publicado por Addison-Wesley.
Transliteración de Español a Ruso
Conexión PHP - PostgreSQL
Para empezar a usar PostgreSQL con PHP, primero deberás conectarte a él. Esto es realizado con la función pg_connect(). Esta función es muy directa y solo espera un argumento, la cadena de conexión. La cadena de conexión contiene toda la información necesaria para conectarse a la base de datos. Los argumentos válidos para la cadena de conexión son el servidor, puerto, tty, opciones, nombre de la base de datos, usuario y contraseña. Normalmente te conectas a la base de datos de la siguiente forma:
CREACIÓN DE UNA TABLA CON PG_QUERY
Ahora creemos nuestra primer tabla. Haremos un script para ello, mostrando el uso de pg_query(). Crearemos una tabla llamada Contactos con los campos 'nombre', 'apellidos', 'email'. Para hacerlo, usa la siguiente consulta:
Si ocurrió algún error al usar este script, entonces verifica si proporcionaste el usuario y contraseña correctos, y verifica que PostgreSQL este corriendo. También se cuidadoso, ejecuta este script una sola vez y después borralo. De otro modo obtendrás errores diciendo que ya existe una tabla llamada "contactos".
Nota: También puedes usar una herramienta de administración para ejecutar la consulta anterior. Para ello existen PHPPgAdmin yWebMin.
INSERCIÓN DE REGISTROS EN LA BASE DE DATOS
Ahora que ya tienes una tabla, es tiempo insertar algunos registros en ella. Es hora de usar la función pg_query de nuevo. En esta ocasión guardaremos información dentro de nuestra base de datos. Usaremos el comando SQL 'INSERT' para hacerlo, su sintaxis es la siguiente:
INSERT INTO nombre_tabla (columna1, columna2,...) VALUES (valor1, valor2,....)
donde; nombre_tabla es el nombre de la tabla, en los paréntesis puedes especificar en que columnas quieres insertar datos. En los valores, pondrás lo que quieres guardar en la base de datos de este modo INSERT INTO contactos VALUES ('Juan', 'Perez' , 'juanperez@dominio.com ') insertaría Juan como nombre, Perez como apellidos, y juanperez@dominio.com como dirección de email. Ahora escribamos un script para hacer esto.
' );
document.write( addy80860 );
document.write( '<\/a>' );
//-->\n ')";
$result = pg_query($query);
if($result)
{
echo "El registro ha agregado";
}
else
{
echo "Ocurrió un error ! ".pg_last_error();
}
?>
Esto debió haber hecho lo que queríamos, si fallo verfica tu consulta e intenta de nuevo. Si todo marchó bien, insertemos más registros. De hecho, ¿por que no hacemos un formulario para insertarlos?. Para eso debemos empezar con una formulario muy básico.
Ahora debemos agregar los valores reales a nuestro formulario. Primero debemos verificar que todos los campos hayan sido llenados, y entonces insertarlos en la base de datos:
Eso es todo. Ya tenemos un formulario para insertar registros dentro de nuestra base de datos, si lees los comentarios deberás entender completamente que hace cada parte del script.
VISUALIZACIÓN DE LOS REGISTROS EN LA BASE DE DATOS
Ahora que ya podemos agregar registros a nuestra base de datos, necesitaremos ver todos los registros en la misma. Eso podemos hacerlo usando el comando SELECT de SQL. Ten en cuenta que aún seguimos usando la función pg_query(). Si quisieramos mostrar todos los campos de la base de datos, podríamos hacer un script que seleccionara todos (* en SQL) los registros.
No te preocupes si no entiendes cada parte del script. Tan solo use la función pg_fetch_array() para traer los resultados de la consulta dentro de un arreglo asociativo. Las llaves del arreglo son nombradas después de los nombres de columna de la tabla. De este modo $row['nombre'] contendrá lo que haya en la columna "nombre" de nuestra tabla, simple ¿no?. La variable $query es la consulta que quieres traer. NULL es el número de fila, cuando especificas NULL, la función simplemente se saltará ese parámetro. El último parametro, el que dice PGSQL_ASSOC, elige que tipo de arreglo regresará. PGSQL_ASSOC tendrá arreglos con los nombres de columna como llaves. PGSQL_NUM regresará un arreglo númerico, y PGSQL_BOTH regresará ambos. Como nota final, puedes reemplazar cada uno de los echo's por un print_r() para ver el arreglo completo.
ACTUALIZACIÓN DE REGISTROS
Ahora veremos el comando update, que es bastante sencillo. Su sintaxis es: UPDATE nombre_tabla SET nombre_columns = nuevo_valor WHERE nombre_columna = algun_valor. Así UPDATE contactos SET nombre = 'Juanito' WHERE apellidos = 'Perez Perez' pondría el valor 'Juanito' en los registros donde 'Perez Perez' sean los apellidos.
Porque es importante la programación paralela
Cuando hablo con alguna gente acerca de las novedades de Visual Studio 2010 y sale lo de las mejoras para la programación en paralelo, mucha gente lo ve como una
Java4Ever
No, no, no para nada no me he vuelto maricón, lo que pasa es que me encontré este video y se me hizo algo gracioso. No se lo pueden perder...
Ah jaja ¡espero y eso nunca me lo hagan mis hijos! Ah jajaja, esta muy buena la forma para programar, ¡tendré que probarla!
¡Saludos!
Crear Interfaces Fluidas en C #
Eric Evans y Martin Fowler fueron los responsables de esta tendencia llamada Fluent Interface. El objetivo de la misma no era otro que el de mejorar la legibilidad del código. Para saber cómo son
DocTranslator: Traduce documentos de Office conservando su presentación
DocTranslator es un servicio online gratuito que te permite traducir los textos de Office, conservando su formato y presentación intacta.
Las traducciones son realizadas a través de Google Translate en sus 50 idiomas, no hay límite en el tamaño del documento a traducir y no se necesita estar registrado para utilizar el servicio.
Documentos de Word y Excel son totalmente compatibles y también lo son archivos .txt. En caso de que use un sistema operativo diferente a Windows, deberás consultar la tabla de compatibilidad.
¡Saludos!
Codeplex: Hostea tu proyecto OpenSource
Si bien en sus inicios, el sitio fue muy criticado, por ser una copia de SourceForge.net
Hoy te vamos a hablar de CodePlexde Microsoft, el que ya lleva su buen tiempo en la red, convirtiéndose en un sitio muy visitado por los programadores.
CodePlex es una herramienta que ayuda a los desarrolladores en su administración de proyectos Open Source.
Estas son algunas de las características y prestaciones que podemos encontrar en CodePlex:
- Posibilidad de publicar nuestros proyectos open source.
- Hosting para nuestros archivos de código.
- Página para el proyecto. Es posible editarla.
- Administración de miembros del equipo de desarrollo.
- Upload de código.
- Manejo de versiones.
- Comunidad y área de discusiones para nuestro proyecto.
- Subscripciones vía RSS.
- Los usuarios pueden escribir reviews o comentarios por cada versión.
- Estadísticas de proyecto.
- Varios tipos de licencias para escoger, entre ellas figuran GNU y GNU v2
Proyectos interesantes publicados en el sitio:
- AjaxControlToolkit Un conjunto de herramientas de Ajax para aplicaciones ASP.NET
- SilverLight Toolkit Una colección de controles para la plataforma SilverLight
- BlogEngine Es un programa con prestaciones similares a las que ofrece WordPress hecho en .NET
- IronPython La implementación de Pythom para .NET
- FacebookToolkit Herramientas para la manipulación de la API de Facebook
- MVC Samples Conjunto de aplicaciones ejemplo de MVC de Microsoft
Escuchando Ahora: Actualiza tu estado de facebook con lo que escuchas en winamp
Hace una semana estaba langareando muy feliz, en mi casa y se me ocurrió una brillante idea… Vaya sé que no es original pero se me ocurrió.
Pensé:
¿Existirá una aplicación que sea capaz de poner lo que estoy escuchando en winamp en mi muro de publicaciones de Facebook?
Hola Mundo con PHP y el API de Facebook
Ultimamente me esta interesando bastante el tema las APIs de Facebook y Twitter. Asi que me decidi a buscar info y como siempre la comparto con todos ustedes.
El dia de hoy quiero mostrarles como hacer su primera aplicacion para facebook usando PHP. No es una aplicacion para nada util pues solo muestra un ‘Hola mundo’ seguido de tu nombre. Pero antes hay que entender algunas cosas.
XSS – Cross-Site-Scripting IV
Defendiendo Nuestros Usuarios.
Las formas más sencillas de defender nuestros usuarios son mediante las siguientes acciones:
Cookies:
Evitar almacenar datos vitales
XSS – Cross-Site-Scripting III
Defendiendo Nuestra Aplicación.
El primer modo de defensa que veremos, será la defensa de nuestra aplicación, misma que nos enseñara técnicas sencillas para defender nuestro sitio mediante la validación de entradas de datos.
Tenemos que tener claro que lo que debemos hacer es impedir la entrada de scripts en nuestros campos de inserción de datos, validando cada entrada para asegurarnos que no contenga código que pueda afectar nuestra aplicación o a nuestros usuarios.
- Limitación de caracteres de entrada.
Lo primero que debemos hacer