Translate
martes, 7 de febrero de 2012
Smalltalk y Javascript un solo corazón!
Cada vez estamos en la era donde se va a poder escribir cualquier programa en cualquier lenguaje en cualquier tecnología . Y este es un buen ejemplo! Compilar Smalltalk a Javascript.
Existen varios proyectos que permiten hacer esto:
ST2JS:
ST2JS – Smalltalk to Javascript translator
http://www.squeaksource.com/ST2JS/
ST2JS – Traductor de Smalltalk a JavaScript (Parte I)
http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk.html
ST2JS – Traductor de Smalltalk a JavaScript (Parte II)
http://diegogomezdeck.blogspot.com/2006/07/st2js-traductor-de-smalltalk_28.html
Otro proyecto muy bueno es S8, paso a copiar y pegar un párrafo de la presentación de este framework:
"El pasado sábado 17 tuvo lugar una importante reunion de Smalltalkig donde definimos el alcance de lo que llamamos Proyecto S8 y el rol que queremos que Smalltalking juegue en ese Proyecto. S8 comenzo siendo un proyecto personal de Alejandro Reimondo de desarrollo de un Smalltalk corriendo sobre la maquina virtual javascript open source de Google, la famosa V8 (de alli su nombre). Durante el transcurso de ese proyecto que aun continua en desarrollo, nos dimos cuenta que S8 podria transformarse en una plataforma de desarrollo para otros frentes, incluso aquellos que no necesiten soporte de V8 (un ejemplo de ello es el smalltalk jtalk o su nuevo nombre Amber). Es por ello que decidimos ponerle licencia MIT y potenciar una comunidad que utilize la herramienta desde Smalltalking. De esa forma le daremos previsibilidad a la herramienta y sustentabilidad en el tiempo, dos cosas que para los smalltalkers es fundamental"
Copiado textualmente de :
http://leodemarco.blogspot.com/2011/09/lanzamiento-de-s8-en-smalltalking.html
Dejo la fuente:
http://ajlopez.wordpress.com/2011/09/22/smalltalk-and-javascript/
domingo, 5 de febrero de 2012
Configuración De Servidores Con GNU/Linux
Quiero compartir un libro de Linux totalmente gratuito y sobre licencia Creative Commons. Es de muy buena calidad, dejo el link:
http://www.mediafire.com/?axozs408qao4a83
http://www.mediafire.com/?axozs408qao4a83
viernes, 3 de febrero de 2012
MongoDB + Spring Data
Ya hablamos bastante de spring data y también de mongoDB. El proyecto Spring Data intenta facilitarnos el acceso a diferente repositorios de datos. En esta oportunidad vamos a hablar de como nos facilita el acceso y manejo de la base de datos noSQL MongoDB.
Recordemos que MongoDB es una base documental, clave-valor; escrita en c++. Es conocida como la MySQL de las bases NoSQL. Dado que es liviana, muy usada y fácil de usar.
Spring Data nos provee:
Para utilizar esta herramienta con maven es necesario agregar el siguiente repositorio:
y la siguiente dependencia:
Dejo links:
http://www.springsource.org/spring-data/mongodb
http://static.springsource.org/spring-data/data-document/docs/current/reference/html/
Recordemos que MongoDB es una base documental, clave-valor; escrita en c++. Es conocida como la MySQL de las bases NoSQL. Dado que es liviana, muy usada y fácil de usar.
Spring Data nos provee:
- Configuración basada en Spring con XML o anotaciones
- MongoTemplate nos brinda la principales funcionalidades que se pueden aplicar a la base MongoDB.
- Traducción de las excepciones a excepciones más amigables.
- Mapeos de objetos integrados con Spring's Conversion Service
- Querys, criterias y DSLs basados en java.
- Implementaciones de interfaces de repositorio con métodos comunes.
- Integración con QueryDSL!!
- Persistencia cross-store; soporta entidades de JPA
- Log4j
- Integración con Map-Reduce
- Monitorización y administración basado en JMX
Para utilizar esta herramienta con maven es necesario agregar el siguiente repositorio:
spring-milestone Spring Maven MILESTONE Repository http://maven.springframework.org/milestone
y la siguiente dependencia:
org.springframework.data spring-data-mongodb 1.0.0.RC1
Dejo links:
http://www.springsource.org/spring-data/mongodb
http://static.springsource.org/spring-data/data-document/docs/current/reference/html/
Apache MINA
Apache MINA es
un Framework
de aplicación de red que ayuda a los usuarios a
desarrollar aplicaciones con un
alto rendimiento y alta escalabilidad fácilmente. Este
framework provee una API asincrona sobre varios protocolos como
TCP/IP y
UDP/IP a gracia a Java
NIO. Con lo que se puede hacer Comet muy fácilmente.
Las APIs NIO se introdujeron en Java 1.4 y son utilizadas desde entonces por un gran número de aplicaciones. Las APIs NIO permiten operaciones de IO sin bloquear sin bloquear el procesamiento con esto.
Las APIs NIO se introdujeron en Java 1.4 y son utilizadas desde entonces por un gran número de aplicaciones. Las APIs NIO permiten operaciones de IO sin bloquear sin bloquear el procesamiento con esto.
Mina es un framework de
aplicación de red simple, pero con todas estas
funcionalidades:
- Unifica la API para distintos tipos de transporte: TCP / IP y UDP / IP a través de Java NIO
- Comunicación serie (RS232) a través de RXTX
- Interfaz de filtro como un punto de extensión, similar a los filtros de Servlet
- API de bajo nivel y de alto nivel: De bajo nivel: usos ByteBuffers, De Alto Nivel: definidos por el usuario utiliza objetos de los mensajes y códecs.
- Manejo de hilos modificable: u solo hilo o un grupo de subprocesos, más de mil grupos de subprocesos (es decir, SEDA)
- Sobrecarga de protección y limitación del tráfico
- Unidad de capacidad de prueba y los objetos mock
- Se puede administrar con JMX
- Basada en Stream I/O soportado vía StreamIoHandler
- Integración con contenedores conocidos como PicoContainer y Spring
CriteriaQuery de JPA vs Criteria de Hibernate vs QueryDSL
Estuve leyendo sobre la API de Criteria de JPA, y la verdad es que no me gusto.
Vamos por parte porque usar esta API? Porque nos provee la seguridad por tipo; escribiendo hql o ejbql por ejemplo tenemos el problema que al modificar un objeto; las consultas no se enteran y por lo tanto pueden explotar. Este problema se podría atacar haciendo una buena batería de test y ir corriéndola con maven por ejemplo. Pero lo ideal es que al modificar la clase se rompa donde esta siendo usada esa propiedad de esta manera el programa no compila hasta que no solucione todo. A la vez las herramientas de refactor me podrían ayudar modificando las consultas.
Veamos un ejemplo de criteria con JPA:
Esto en hql seria: from Person p where p.eyeColor = 'brown' (un poco mas fácil) Pero porque tanta cosa? Veamo el ejemplo de JPA, antes que nada necesitamos crear un builder de la query luego con ese builder creamos la query donde le decimos lo que vamos a consultar y que vamos a seleccionar y luego con el builder agregamos la condición. Cuando agregamos la condición (si fueron observadores) vieron que llama a una clase Person_ esta clase es la que contiene la metainformación de la clase y obviamente hay que programarla seria algo así:
Luego de hacer todo eso no me acuerdo que estoy consultando. Hay cosas que muy fácilmente se podrían mejorar como por ejemplo no puede suponer que lo que consultamos es lo que debe seleccionar? Todo hay que decirle!
Veamos como se puede hacer la consulta con Criteria de Hibernate:
Bastante más fácil pero se puede ver un pequeño problema si yo cambio en mi clase la propiedad "eyeColor" esta consulta va a seguir compilando pero va explotar cuando la ejecute. Ahora veamos como podríamos hacer esto con QueryDSL:
QueryDSL genera un tipo para consultar con el nombre Qperson que sería como este:
Como conclusión podemos decir que es complejo hacer consultas de forma tipada y que queden bien es más complejo aun. De igual forma la API de Criteria de JPA se podria mejorar mucho más. Y esto se ve cuando miramos proyectos que nacieron para simplificar esta API como QueryDSL.
Vamos por parte porque usar esta API? Porque nos provee la seguridad por tipo; escribiendo hql o ejbql por ejemplo tenemos el problema que al modificar un objeto; las consultas no se enteran y por lo tanto pueden explotar. Este problema se podría atacar haciendo una buena batería de test y ir corriéndola con maven por ejemplo. Pero lo ideal es que al modificar la clase se rompa donde esta siendo usada esa propiedad de esta manera el programa no compila hasta que no solucione todo. A la vez las herramientas de refactor me podrían ayudar modificando las consultas.
Veamos un ejemplo de criteria con JPA:
CriteriaQuerycriteria = builder.createQuery( Person.class ); Root personRoot = criteria.from( Person.class ); criteria.select( personRoot ); criteria.where( builder.equal( personRoot.get( Person_.eyeColor ), "brown" ) ); List people = em.createQuery( criteria ).getResultList();
Esto en hql seria: from Person p where p.eyeColor = 'brown' (un poco mas fácil) Pero porque tanta cosa? Veamo el ejemplo de JPA, antes que nada necesitamos crear un builder de la query luego con ese builder creamos la query donde le decimos lo que vamos a consultar y que vamos a seleccionar y luego con el builder agregamos la condición. Cuando agregamos la condición (si fueron observadores) vieron que llama a una clase Person_ esta clase es la que contiene la metainformación de la clase y obviamente hay que programarla seria algo así:
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SetAttribute; import javax.persistence.metamodel.StaticMetamodel; @StaticMetamodel( Person.class ) public class Person_ { public static volatile SingularAttributeid; public static volatile SingularAttribute name; public static volatile SingularAttribute eyeColor; public static volatile SingularAttribute age; public static volatile SingularAttribute address; public static volatile SetAttribute orders; }
Luego de hacer todo eso no me acuerdo que estoy consultando. Hay cosas que muy fácilmente se podrían mejorar como por ejemplo no puede suponer que lo que consultamos es lo que debe seleccionar? Todo hay que decirle!
Veamos como se puede hacer la consulta con Criteria de Hibernate:
Listpeople = sess.createCriteria(Person .class).add( Restrictions.eq("eyeColor", "brown") );
Bastante más fácil pero se puede ver un pequeño problema si yo cambio en mi clase la propiedad "eyeColor" esta consulta va a seguir compilando pero va explotar cuando la ejecute. Ahora veamos como podríamos hacer esto con QueryDSL:
JPAQuery query = new JPAQuery(em); QPerson p = new Qperson("p"); query.from(p).where(p.eyeColor.eq("brown"));
QueryDSL genera un tipo para consultar con el nombre Qperson que sería como este:
public class QPerson extends EntityPathBase{ … }
Como conclusión podemos decir que es complejo hacer consultas de forma tipada y que queden bien es más complejo aun. De igual forma la API de Criteria de JPA se podria mejorar mucho más. Y esto se ve cuando miramos proyectos que nacieron para simplificar esta API como QueryDSL.
Con Heroku, Neo4J se va a las nubes!
Una base de datos NoSQL que esta haciendo su camino hacia la nube, es Neo4J, una base de datos gráfica; de la cual ya hablamos. Además de otras mejoras como Cypher (el motor de consulta), web de administración, actualización Lucene. Neo4J 1.6 ahora se puede acceder desde Heroku actualmente a través de un add-on beta a través de una interfaz REST. Hay un número de clientes REST Neo4J permitidos; y como es REST se puede consultar de diferentes lenguajes como: .NET, Python, Django, PHP, Ruby y Java.
Heroku adds-on permite a los usuarios que puedan ampliar la funcionalidad básica, añadir características o conectarse a servicios externos, el último de ellos el caso de cómo se accede desde Heroku a Neo4J.
Dejo links:
http://blog.neo4j.org/2011/12/neo4j-labs-heroku-neo4j-and-google.html
http://addons.heroku.com/neo4j
http://devcenter.heroku.com/articles/neo4j
Heroku adds-on permite a los usuarios que puedan ampliar la funcionalidad básica, añadir características o conectarse a servicios externos, el último de ellos el caso de cómo se accede desde Heroku a Neo4J.
Dejo links:
http://blog.neo4j.org/2011/12/neo4j-labs-heroku-neo4j-and-google.html
http://addons.heroku.com/neo4j
http://devcenter.heroku.com/articles/neo4j
Postgres Plus® Cloud Database
La verdad estoy sorprendido al leer esto: EnterpriseDB ha anunciado la disponibilidad de Postgres Plus Nube de base de datos (PPCDB), una base de datos con un servicio que ofrece PostgreSQL 9.1 y Postgres Plus Advanced Server 9.0 como IAM en Amazon AWS. OpenStack incluirá soporte para PPCDB.
PPCDB viene con una interfaz web para la instalación y la gestión de casos individuales o grupos de bases de datos Postgres en la nube, y funciones de escala automática, leer y escribir en el balanceador de carga, la replicación binaria, conmutación por error, de auto-aprovisionamiento, almacenamiento elástico, la clonación de DB, y automatización copias de seguridad.
Postgres Plus Advanced Server incluye compatibilidad con Oracle permite a los desarrolladores ejecutar SQL de Oracle contra una base de datos PostgreSQL.
Dejo un video:
Dejo Links:
http://www.infoq.com/news/2012/02/PostgreSQL-Neo4J-Cloud
http://www.enterprisedb.com/products-services-training/products-overview/postgres-plus-cloud-database
PPCDB viene con una interfaz web para la instalación y la gestión de casos individuales o grupos de bases de datos Postgres en la nube, y funciones de escala automática, leer y escribir en el balanceador de carga, la replicación binaria, conmutación por error, de auto-aprovisionamiento, almacenamiento elástico, la clonación de DB, y automatización copias de seguridad.
Postgres Plus Advanced Server incluye compatibilidad con Oracle permite a los desarrolladores ejecutar SQL de Oracle contra una base de datos PostgreSQL.
Dejo un video:
Dejo Links:
http://www.infoq.com/news/2012/02/PostgreSQL-Neo4J-Cloud
http://www.enterprisedb.com/products-services-training/products-overview/postgres-plus-cloud-database
martes, 31 de enero de 2012
Desarrollo de proyectos informáticos con tecnología Java
"La escritura de un libro es una tarea ingente. La motivación para abordarla debe ser, al menos, tan grande como la tarea que se desea acometer. Para nosotros, la motivación ha consistido en escribir un libro que se distinguiera del resto de libros que abordan el aprendizaje del lenguaje de programación Java."
De esta forma comienza el libro "Desarrollo de proyectos informáticos con tecnología Java" escrito por Oscar Belmonte Fernández, profesor de la Universidad Jaime I de Castellón. Este libro es gratuito y bajo licencia "Commons Atribución-NoComercial-CompartirIgual 3.0 Unported"
Es un libro básico de java para iniciados.
Dejo el link: http://www3.uji.es/~belfern/docencia.html
De esta forma comienza el libro "Desarrollo de proyectos informáticos con tecnología Java" escrito por Oscar Belmonte Fernández, profesor de la Universidad Jaime I de Castellón. Este libro es gratuito y bajo licencia "Commons Atribución-NoComercial-CompartirIgual 3.0 Unported"
Es un libro básico de java para iniciados.
Dejo el link: http://www3.uji.es/~belfern/docencia.html
viernes, 27 de enero de 2012
Con Play framework desarrollar aplicaciones web con Java y Scala... ¡vuelve a ser divertido!
Con Play framework desarrollar aplicaciones web con Java y Scala... ¡vuelve a ser divertido! es el titulo de la web en español de play; si!
Los usuarios de play decidieron traducir toda la documentación es español y colgarla en la web.
Dejo los links:
http://playdoces.appspot.com/
http://playdoces-opensas.rhcloud.com/
Los usuarios de play decidieron traducir toda la documentación es español y colgarla en la web.
Dejo los links:
http://playdoces.appspot.com/
http://playdoces-opensas.rhcloud.com/
Curso de HTML 5
La gente de msdn ( del Inglés: Microsoft Developer Network ) ha realizado unos cursos de html que se pueden tomar de forma gratuita, parecen estar buenos.
Dejo el link: http://msdn.microsoft.com/es-es/ie/hh749020
domingo, 22 de enero de 2012
Hibernate 4!!
Jboss libero la versión número 4 de Hibernate entre las características nuevas podemos nombrar:
Multitenancy es cuando un componente de software corre en un servidor pero sirve a múltiples clientes.
Dejo la entrada en el pom para el que usa maven:
Dejo links:
http://www.infoq.com/news/2012/01/hibernate-4-released
http://www.hibernate.org/downloads
- Mejor logging con soporte a i18n y codigo de mensajes
- Preparan el soporte a OSGI
- Soporta Multitenancy
- Remueve código deprecado
Multitenancy es cuando un componente de software corre en un servidor pero sirve a múltiples clientes.
Dejo la entrada en el pom para el que usa maven:
org.hibernate hibernate-core 4.0.1.Final
Dejo links:
http://www.infoq.com/news/2012/01/hibernate-4-released
http://www.hibernate.org/downloads
Tutorial de Java 7
Han publicado un tutorial de java 7, es un tutorial basado ejemplos, fácil de leer y entretenido. Ideal para el verano:
http://www.javacodegeeks.com/2012/01/java-7-project-coin-in-code-examples.html
http://www.javacodegeeks.com/2012/01/java-7-project-coin-in-code-examples.html
domingo, 15 de enero de 2012
Más de Hadoop!!
Sigo leyendo más de Hadoop un framework que ya estuvimos hablando:
http://emanuelpeg.blogspot.com/2009/10/apache-hadoop-es-un-proyecto-java-de.html
http://emanuelpeg.blogspot.com/2009/10/hadoop-hbase.html
El proyecto comenzo como funcionalidad de Nutch pero rapidamente se convirtio en un proyecto aparte; basado en Google GFS y MapReduce. Iniciado por Doug Cutting.
Apache Hadoop es un framework para computación distribuida y persistencia distribuida el cual tiene las siguientes características:
- Permite montas fácilmente y de manera fiable clusters con multitud de nodos
- Implementa Map/Reduce y sistema de archivos distribuido (HDFS)
- y es Open Source!!
Buenísimo pero que es MapReduce? Es un modelo de programación aplicable a problemas en los que la solución de una subparte no sea dependiente de las soluciones de las demás subpartes. Es un estilo "divide y vencerás"; se divide el problema e subproblemas independientes y se soluciona cada uno de forma independiente. El MapReduce de hadoop tiene una arquitectura maestro/esclavo.
- Un único maestro (JobTracker): Responsable de la gestión de tareas asignadas a esclavos, las monitoriza y se encarga de re-ejecutarlas si han fallado.
- N esclavos (TaskTracker) : Ejecutan la tarea asignada.
En principio pensado para Java, pero con Hadoop Pipes para C++ y se esta implementando Hadoop Streaming para el resto de los lenguajes.
HDFS: Hadoop Distributed File System. Es el framework encargado de simular un file system como si estuviera en un equipo pero este esta distribuido.
HDFS tiene una arquitectura maestro/esclavo, hay un maestro que tiene la responsabilidad de administrar y nodos que se guardan los archivos. Existen estrategias para recuperar el maestro, para eliminar el punto de fallo. Todos los protocolos que usa se implementan sobre TCP/IP.
Además cuenta con una serie de comandos que permiten utilizarlo:
get: Copia a local el archivo de HDFS
put: Copia desde local múltiples ficheros HDFS
strep: Cambia el factor de replicación
Comandos típicos: ls, mkdir, cp, cat, etc...
Bueno este fue un pequeño resumen sobre un gran proyecto.
Dejo links:
http://hadoop.apache.org/
http://hadoop.apache.org/hdfs/
http://hadoop.apache.org/mapreduce/
sábado, 14 de enero de 2012
Post de Ceylon
En Java Mexico están publicado unos post acerca de Ceylon el lenguaje de Red Hat diseñado por Gavin King (el creador de hibernate).
Dejo el link:
http://www.javamexico.org/categorias/lenguajes_jvm/ceylon
Dejo el link:
http://www.javamexico.org/categorias/lenguajes_jvm/ceylon
jueves, 12 de enero de 2012
Understanding Big Data
IBM nos regala un libro sobre Big Data; por Big Data Nos referimos al tratamiento y análisis de enormes repositorios de datos, tan desproporcionadamente grandes que resulta imposible tratarlos con las herramientas de bases de datos y analíticas convencionales. La tendencia se encuadra en un entorno que no nos suena para nada extraño: la proliferación de páginas web, aplicaciones de imagen y vídeo, redes sociales, dispositivos móviles, apps, sensores, internet de las cosas, etc.
El libro es una introducción al tratamiento de estos datos y hace una introducción a Apache Hadoop
Dejo el link:
https://www14.software.ibm.com/webapp/iwm/web/signup.do?source=sw-infomgt&S_PKG=500016891
El libro es una introducción al tratamiento de estos datos y hace una introducción a Apache Hadoop
Dejo el link:
https://www14.software.ibm.com/webapp/iwm/web/signup.do?source=sw-infomgt&S_PKG=500016891
Suscribirse a:
Entradas (Atom)