Node.js es un entorno JavaScript de lado de servidor que utiliza un modelo asíncrono y dirigido por eventos. Es muy interesante la propuesta del framework dejo un excelente manual para empesar:
http://www.rmunoz.net/introduccion-a-node-js.html
Dejo un libro de Node.js :
http://www.nodebeginner.org/index-es.html
Translate
jueves, 20 de octubre de 2011
domingo, 16 de octubre de 2011
Identidad del objeto en hibernate
Una aplicación puede acceder
simultáneamente al mismo estado persistente en dos Sessiones diferentes. Sin embargo, una instancia
de una clase persistente nunca se comparte entre dos instancias de Session. Por lo tanto,
existen dos nociones diferentes de identidad:
Identidad de Base de Datos
foo.getId().equals( bar.getId() )
Identidad JVM
foo==bar
Para los objetos unidos a una Session
en particular (por ejemplo, en el ámbito de una Session) las dos nociones son equivalentes y la
identidad de la JVM para la identidad de la base de datos se encuentra garantizada por Hibernate.
Mientras la aplicación acceda simultáneamente al "mismo" objeto (identidad persistente) en dos
sesiones diferentes, las dos instancias serán
realmente "diferentes" (identidad JVM). Los conflictos se resuelven
usando un enfoque optimista y el versionado automático.
Este enfoque deja que Hibernate y la
base de datos se preocupen de la concurrencia. Además provee la mejor escalabilidad, ya que
garantizando la identidad en unidades de trabajo monohilo no necesitan bloqueos caros u otros
medios de sincronización. La aplicación no necesita sincronizar sobre ningún objeto,
siempre que se mantenga un solo hilo por Session.
Dentro de una Session la aplicación
puede usar con seguridad == para comparar objetos. Sin embargo, una aplicación que usa ==
fuera de una Session, podría ver resultados inesperados. Esto podría ocurrir incluso en sitios
algo inesperados. Por ejemplo, si pone dos instancias separadas dentro del mismo Set ambas
podrían tener la misma identidad de la base de datos (por ejemplo, representar la misma
fila). Sin embargo, la identidad JVM, por definición, no está garantizada para las instancias en
estado separado.
El desarrollador tiene que sobrescribir
los
métodos equals() y hashCode() en las clases persistentes e
implementar su propia noción
de igualdad de objetos. Nunca se
debería usar el identificador de la base de datos
para implementar
la igualdad. Use una clave de negocio, una combinación de atributos
únicos,
usualmente inmutables. El identificador de la base de datos
cambiará si un objeto transitorio es
hecho persistente. Si la
instancia transitoria (usualmente junto a las instancias separadas)
es
mantenida en un Set, cambiar el código hash rompe el contrato
del Set. Los atributos para las
claves empresariales no tienen que
ser tan estables como las claves principales de la base de datos, sólo tiene que garantizar
estabilidad en tanto los objetos estén en el mismo Set.
Este no es problema de Hibernate, sino
que simplemente se tiene que implementar la identidad y la igualdad de los objetos Java.
sábado, 15 de octubre de 2011
Para que la gente prueba smalltalk facilmente
Una forma fácil de probar Smalltalk por medio de la web es el siguiente sitio:
http://amber-lang.net/learn.html
Este sitio nos permite programar en Smalltak por medio de una consola web. Genial idea.
http://amber-lang.net/learn.html
Este sitio nos permite programar en Smalltak por medio de una consola web. Genial idea.
lunes, 10 de octubre de 2011
Google Dart
Como habíamos dicho el post anterior google presento su nuevo lenguaje como alternativa a Javascript. Dart tienen las siguientes características:
- basado en clases, herencia simple con interfaces
- tipado estático opcional
- un hilo de ejecución
- lexico similar a Javascript
- funciones Lambda (x) => x
- recarga de operadores
- interpolación de String: "Hello ${foo}"
- multiproceso basado en actores
Veamos un ejemplo:
main() {
var name = 'World';
print('Hello, ${name}!');
}
Simple. Veamos como escribir la función que calcule la secuencia de figonacci:
int fib(int n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
main() {
print('fib(20) = ${fib(20)}');
}
Veamos un ejemplo con clases:
class Point {
Point(this.x, this.y);
distanceTo(Point other) {
var dx = x - other.x;
var dy = y - other.y;
return Math.sqrt(dx * dx + dy * dy);
}
var x, y;
}
main() {
Point p = new Point(2, 3);
Point q = new Point(3, 4);
print('distance from p to q = ${p.distanceTo(q)}');
}
Por lo poco que leí no tiene mayor innovación, es un lenguaje con algunas mejoras ante javascript. Pero no creo que sea capaz de desplazarlo.
Dejo links:
http://www.dartlang.org/
http://www.dartlang.org/docs/getting-started/
http://googlecode.blogspot.com/2011/10/dart-language-for-structured-web.html
sábado, 8 de octubre de 2011
Inicializadores (o algo así) en Java
Este post esta dedicado a mi amigo personal Christian, que me mostró esto que realmente no lo conocía.
Supongamos que tenemos una interfaz y queremos hacer un clase anonima que implemente esta Interfaz pero necesitamos inicializar valores. No podemos llamar al constructor dado que es una clase anonima por lo tanto podemos inicializar el código de la siguiente manera:
Para la interfaz:
Y la salida del programa seria:
Inicializo en el inicializador!!
Holass
La verdad no tenia idea que se podía hacer eso en Java.
Todos los días se aprende algo nuevo.
Supongamos que tenemos una interfaz y queremos hacer un clase anonima que implemente esta Interfaz pero necesitamos inicializar valores. No podemos llamar al constructor dado que es una clase anonima por lo tanto podemos inicializar el código de la siguiente manera:
public class Main { public static void main(String[] args) { IEjemplo ejemplo = new IEjemplo() { private String saludo; //Inicializador { saludo = "Holass"; System.out.println("Inicializo en el inicializador!!"); } @Override public void metodoDeEjemplo() { System.out.println(saludo); } }; ejemplo.metodoDeEjemplo(); } }
Para la interfaz:
public interface IEjemplo { void metodoDeEjemplo(); }
Y la salida del programa seria:
Inicializo en el inicializador!!
Holass
La verdad no tenia idea que se podía hacer eso en Java.
Todos los días se aprende algo nuevo.
Curso Online de Desarrollo de Aplicaciones en Silverlight para Windows Phone
En el blog le damos poca atención al mundo microsoft, pero ahora voy ha hacer una excepción dado que la gente de microsoft preparo unos cursos que estaría bueno mirarlos, dejo una pequeña reseña y el link:
Este curso consta de varios vídeos, presentaciones y ejercicios que guían en el diseño y desarrollo de aplicaciones para Wïndows Phone en Silverlight.
http://msdn.microsoft.com/es-es/windowsphone/hh307892
Este curso consta de varios vídeos, presentaciones y ejercicios que guían en el diseño y desarrollo de aplicaciones para Wïndows Phone en Silverlight.
Lo hemos dividido en las siguientes secciones:
Sección 2:Plataforma Windows Phone
Sección 3:Datos y Servicios en Windows Phone
Sección 4:Trabajando con sensores
El link del curso es:
viernes, 7 de octubre de 2011
Oracle NoSQL?
Oracle ha anunciado el dispositivo Big Data corriendo con Oracle NoSQL base de datos, una nueva base clave y valor basado en Oracle Berkeley DB Java Edition. Algunas de las características incluyen: miles de millones de filas de almacenamiento en discos y terabytes en B-tree, transacciones ACID, CRUD, Sharding, sin punto único de fallo, la recuperación de desastres a través de la replicación de centros de datos.
La base de datos Oracle NoSQL es una base clave-valor diseñada para una alta escalabilidad y disponibilidad, y se despliegan en múltiples nodos replicados para conmutación rapida por error y balanceo de carga. Los datos se accede a través de una API de Java con Get, Put y Delete empaquetada en un archivo JAR. Otras características incluyen:
La base de datos Oracle NoSQL es una base clave-valor diseñada para una alta escalabilidad y disponibilidad, y se despliegan en múltiples nodos replicados para conmutación rapida por error y balanceo de carga. Los datos se accede a través de una API de Java con Get, Put y Delete empaquetada en un archivo JAR. Otras características incluyen:
- Java puro
- Capacidad: miles de millones de registros y de múltiples terabytes de datos en un almacenamiento
- Automática, hash-function basado en la partición de datos y distribuida
- Transacciones ACID
- Con las operaciones CRUD con garantías de durabilidad ajustable
- No hay ningún punto único de fallo
- soporta Sharding
- Resistencia al fallo de un nodo o varios nodos de almacenamiento
- Recuperación de desastres mediante la replicación de centros de datos
- Soporta miles de nodos
- Copia de seguridad / restauración a nivel de nodo
Bueno simplemente hay que probarla!!
Dejo Link:
Apache TomEE Certifico Web Profile Compatible
Apache sorprende con un nuevo producto, Apache TomEE (se pronuncia Tommy y es la union de TomCat y Java EE)
La idea es tener un Web Profile basado en Tomcat que no influya en este proyecto y basado en productos de apache. Veamos los productos que lo conforman:
Además viene una versión plus que trae los siguientes servicios:
Dejo Links:
http://www.infoq.com/news/2011/10/apache-tomee
http://openejb.apache.org/3.0/apache-tomee.html
La idea es tener un Web Profile basado en Tomcat que no influya en este proyecto y basado en productos de apache. Veamos los productos que lo conforman:
CDI | Apache OpenWebBeans |
EJB | Apache OpenEJB |
Javamail | Apache Geronimo JavaMail |
JPA | Apache OpenJPA |
JSF | Apache MyFaces |
JSP | Apache Tomcat |
JSTL | Apache Tomcat |
JTA | Apache Geronimo Transaction |
Servlet | Apache Tomcat |
Además viene una versión plus que trae los siguientes servicios:
Connector | Apache Geronimo Connector |
JMS | Apache ActiveMQ |
Web Services | Apache CXF |
Dejo Links:
http://www.infoq.com/news/2011/10/apache-tomee
http://openejb.apache.org/3.0/apache-tomee.html
Programa WebExpert de Google AdWords
Estuve leyendo esto y me intereso, la verdad no lo conocía (copio y pego) :
Queremos brindarte la educación, capacitación y el soporte que necesitás para ofrecerle más valor a tus clientes y, como consecuencia, hacer crecer tu negocio. Este programa es ideal para:
- Webmasters y desarrolladores web
- Cualquier persona o empresa que trabaje para un negocio online
- Agencias de publicidad y marketing digital
Al aumentar tus habilidades online y el conocimiento de los productos de Google, tendrás herramientas para atraer potenciales clientes y aportar más y mejores beneficios a tus clientes actuales.
Suena interesante me voy a registrar!Dejo el link:
http://www.google.com.ar/adwords/webexpert/#utm_source=ar-ha-CTPT&utm_medium=ha&utm_campaign=es
jueves, 6 de octubre de 2011
Libros de Linux
Dejo un conjunto de links donde se pueden bajar libros de linux:
http://www.muylinux.com/2008/12/09/e-books-gratuitos-sobre-linux/
http://www.taringa.net/posts/linux/1146629/Coleccion-de-Libros-de-GNU_Linux-_Ubuntu-especialmente_.html
http://www.ubuntips.com.ar/2007/11/26/100-libros-sobre-linux-en-descarga-directa/
http://www.planetalibro.net/ebooks/eam/index.php?label=linux
A leer!
http://www.muylinux.com/2008/12/09/e-books-gratuitos-sobre-linux/
http://www.taringa.net/posts/linux/1146629/Coleccion-de-Libros-de-GNU_Linux-_Ubuntu-especialmente_.html
http://www.ubuntips.com.ar/2007/11/26/100-libros-sobre-linux-en-descarga-directa/
http://www.planetalibro.net/ebooks/eam/index.php?label=linux
A leer!
martes, 4 de octubre de 2011
Vistas dinámicas del blog
Google nos ofrece un nuevo servicio que es poder ver nuestro blog en forma dinámica. Es fácil, debes ingresar a : http://emanuelpeg.blogspot.com/view y hay un menú con las formas de ver el contenido.
Es muy bueno que el servicio baya mejorando y es una interesante propuesta.
Que lo disfruten!!
Es muy bueno que el servicio baya mejorando y es una interesante propuesta.
Que lo disfruten!!
sábado, 1 de octubre de 2011
Voldemort una base de datos NoSQL con magia negra
No voy a hablar del enemigo Harry Poter, si no de la base de datos utilizada por LinkedIn. Voldemort es una base de datos NoSQL creada por LinkedIn para solucionar un problema de escalabilidad que tenia con las base de datos relacionales y luego donado a la comunidad.
Voldemort es una base de datos NoSQL orientada a guardar datos de forma clave-valor. Permite configurar diferentes Nodos los cuales contienen los datos y a la vez los datos se van replicando de forma que si se cae un nodo la base siga trabajando.
Algunas características de Voldemort:
- Los
datos se replican automáticamente a través de
servidores múltiples.
- Los
datos son automáticamente particionados por lo tanto cada
servidor contiene sólo un subconjunto de los datos
totales
- Las
Fallas en el servidor son manejado de forma transparente
- Permite
sereailizar con diferentes frameworks Protocol
Buffers, Thrift, Avro y
Java Serialization; además
permite seriabilizar objetos complejos como listas, arregles, etc.
- Los
elementos de datos están versionados para maximizar
la integridad de los datos sin comprometer
la disponibilidad del sistema
- Cada
nodo es independiente de otros nodos
- Un
buen rendimiento solo nodo: se puede esperar 10-20k de
operaciones por segundo en función de las máquinas, la
red, el sistema de disco, y el factor de replicación
de datos
- Utiliza una estrategia que permite tener nodos en distintos lugares geograficos.
Dejo Link:
http://project-voldemort.com/
Estado de los Objetos en Hibernate
Hibernate define estos 3 estados, en
los cuales los objetos se encuentran durante la ejecución de nuestra
aplicación:
- Transient: Un Objeto es transiente si fue instanciado con new y no con la session de hibernate. Este objeto no esta persistido y hibernate no lo conoce.
- Persistent: Un objeto persistido tiene una representación en la base de datos y un identificador. Este fue guardado o recuperado de la base de datos y se encuentra en el ámbito de la sesión de hibernate; quiere decir que hibernate conoce este objeto. Hibernate detecta los cambios en el objeto y sincroniza con el estado de la base de datos.
- Detached: Un objeto es detached cuando ha sido persistido pero la sesión de hibernate se cerro. La referencia al objeto es valida y puede ser re-atachada a otra sesión de hibernate, por ejemplo con el método saveOrUpdate.
En la siguiente imagen podemos ver como
es la transición entre estados de un objeto con hibernate:
NoSQL
Hoy en día ya paso la furia por NoSQL, podemos decir que esta en un crecimiento constante. NoSQL es un movimiento que surgió dado requerimientos no funcionales de aplicaciones que no podian ser subsanados con bases relacionales. Las bases NoSQL sacrificaron requerimientos de integridad de datos por requerimientos de escalabilidad y performance.
NoSQL es una etiqueta en la cual entran todas las bases no relacionales. Existen gran cantidad de diferentes soluciones etiquetadas como NoSQL,
- Bases orientadas a grafos (Neo4j) orientada a busquedas en grafos.
- Bases documentales (MongoDb, Apache CouchDB) guardan estructuras complejas de datos; y pueden guardar diferentes estructuras.
- Bases Clave-Valor (Voldemort): se guardan los datos por clave-valor.
- Bases basadas en columnas (Apache Cassandra, BigTable, HBase)
- Y hasta bases orientadas a objeto como db4o son llamadas NoSQL.
Antes de utilizar un producto NoSQL debe tener en cuenta que cada producto fue hecho para una realidad diferente y para atacar un problema particular; es menos generico que las bases relacionales. Por lo tanto debe ser cuidadoso y analizar bien sus requerimientos no funcionales para dar justo en la tecla.
No hay que tener miedo de mezclar bases NoSQL con base de datos relacionales dado que en una misma aplicación podemos tener problemas diferentes y por lo tanto soluciones diferentes.
Las Bases NoSQL funcionan y han solucionado muchos problemas, es hora de probarlas y utilizarlas si se justifica.
Suscribirse a:
Entradas (Atom)