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

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/

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:


  • 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

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

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

martes, 10 de enero de 2012

sábado, 7 de enero de 2012

Escribiendo sql más fácil con Querydsl


No les pasa que cuando escriben hql les da miedo de equivocarse en el nombre de alguna propiedad o algo que pueda hacer explotar la aplicación? Cuando escriben consultas con criterios de hibernate, no les pasa que no saben como se deben hacer ciertas cosas o tienen que mirar el manual? No les parece poco intuitiva la API de Critera de hibernate?

Si a todo contestaste que si Querydsl es para vos. Querydsl es un framework el cual permite construir consultas type-safe muy similares a Sql para multiples formas de acceder a datos JPA, JDO y SQL.

En lugar de escribir consultas en texto  lo escribimos con este dsl de forma fluida y segura.

Que ventajas tiene usar Querydsl?


  • Nos puede ayudar la IDE a escribir nuestras consultas, porque son propiedades. 
  •  Contamos con la seguridad por tipo 
  • Si refactorisamos nos permite refactorisar la consulta y si se rompe alguna consulta no compila. 
  • Es más fácil escribir consultas complejas 
  • Podemos escribir SQL o usarlo con Hibernate y también con MongoDB


Veamos un ejemplo de consulta:

query.from(customer)
    .where(customer.firstName.eq("Bob").and(customer.lastName.eq("Wilson")));


query.from(cat)
    .innerJoin(cat.mate, mate)
    .leftJoin(cat.kittens, kitten)
    .list(cat);


query.from(cat)
    .leftJoin(cat.kittens, kitten)
    .on(kitten.bodyWeight.gt(10.0))
    .list(cat);


query.from(customer)
    .orderBy(customer.lastName.asc(), customer.firstName.desc())
    .list(customer);


Se integra con Hibernate, maven, y también con Spring Data JPA. Además lo podemos usar con MongoDB y también con Scala.

Es de licencia Apache 2.

Dejo un video:



Dejo links:
http://www.querydsl.com/
http://www.querydsl.com/documentation
http://blog.mysema.com/2010/07/querying-hibernate-with-querydsl.html
http://blog.mysema.com/2010/11/mongodb-with-querydsl.html

Spring by example


Quiero compartir una pagina que explica como configurar Spring mediante ejemplos. Si bien esta basada en Spring 2, de a poco están escribiendo ejemplos de spring 3.

Dejo el link:

http://springbyexample.org/

viernes, 6 de enero de 2012

10 lenguajes que podrían influir en el futuro


Estuve leyendo un articulo sobre 10 lenguajes que podrían influir en el futuro. Los lenguajes son: Dart, Ceylon, Go, F#, Opa, Fantom, Zimbu, X10, haXe, chapel.

La verdad es que a Opa, Zimbu, X10, haXe, chapel no los conozco; pero por lo que veo creo que los demás lenguajes no dejan muchas cosas nuevas. Me parece que el que falta es Scala que es un gran lenguaje la innovación es tener lo bueno de muchos lenguajes. Erlang otro que falta.

Cual piensa que falta?

Dejo el link:

http://www.infoworld.com/d/application-development/10-programming-languages-could-shake-it-181548

jueves, 5 de enero de 2012

Recursos sobre HTML 5

SourceForge abrió una pagina para compartir con nosotros una buena cantidad de recursos sobre HTML 5.

Dejo el link:

http://elcentrohtml5.sourceforge.net/

miércoles, 4 de enero de 2012

Rusia ahorrará 55.300 millones de dólares en software gracias a GNU/Linux


La necesidad de afianzar una industria informática nacional, escapar de la dependencia tecnológica de la infraestructura informática pública, especialmente de los sistemas de Microsoft va a permitir ahorros milmillonarios a las arcas públicas.

Según el analista Román Dórojov en principio se han previsto 4 distribuciones principales cuyo desarrollo principal será a cargo de la empresa PingWin Software. El derroche y la insostenibilidad de la dependencia tecnológica en el área informática fue denunciado por el Programa Estatal “Comunidad de Información” aprobado en octubre de 2010 y concebido para el período 2011-2020. El plan va cumpliendo plazos y el prototipo de la plataforma del software nacional (PSN), que sustituirá a Windows en los ordenadores de las Administraciones Púlicas y escuelas de enseñanza media obligatoria, ya ha sido aprobado por el Ministerio de Comunicación. Las inversiones durante los primeros dos años de funcionamiento del programa en empresas locales alcanzará los 490 millones de rublos.

Argentina y todos los países deberías seguir por el mismo camino!!

Dejo la fuente:

http://www.hispalinux.es/node/747

Bio4j


Bio4j seria como grafo bioinformatico basado en base de dato que incluye la mayor cantidad de datos de UniProt KB(SwissProt + Trembl), Gene Ontology (GO), UniRef (50,90,100), RefSeq, and NCBI taxonomy. (Manuscript in preparation). La verdad es que esto es chino básico para mi pero creo que mi hermano que es bioinformatico le va interesar.

Bio4j  usa neo4j para representar la información.

Lo interesante es que utiliza licencia AGPL 3 .

Dejo links:

http://www.bio4j.com/
http://blog.bio4j.com/

martes, 3 de enero de 2012

Spring Data Neo4j

Neo4j es una base de datos basada en grafos. De la cual ya hablamos:

http://emanuelpeg.blogspot.com/2009/09/neo4j.html

Neo4j permite acceder a un nodo mediante una clave la cual contiene un valor. También tenemos una API para acceder a los datos y un lenguaje de consulta llamado Cypher.

Una de las características de Neo4j es que es una base transaccional y por lo tanto soporta ACID. Esto es bastante inusual para una base de datos NoSQL.

Podemos agregar a un estro proyecto Neo4j (si utilizamos maven) con la siguiente entrada en el pom:

  
   org.neo4j
   neo4j
   1.5
  


Trabajar con la Api de Neo4j puede ser un trabajo duro por lo tanto Spring framework nos provee un modulo que nos permite trabajar con Neo4j de forma más fácil y elegante.

Primero agregamos la siguiente entrada al pom:

 
org.springframework.data 
spring-data-neo4j 
2.0.0.RC1 
 
Y ahora vamos a agregar la siguiente entrada al applicationContext.xml :

 
... 
 
... 
 
La idea es hacer una aplicación que mantenga la relación de amistad entre personas. Primero creamos el proyecto con maven:

mvn archetype:generate

Luego configuramos como un proyecto normalito de maven.

Y el pom debería tener las siguientes dependencias:


 4.0.0

 org.assembly
 friend
 1.0-SNAPSHOT
 jar

 friend
 http://maven.apache.org

 
  UTF-8
  3.0.6.RELEASE
 

 
  
   
    maven-compiler-plugin
    
     1.6
     1.6
    
   
   
    org.apache.maven.plugins
    maven-eclipse-plugin
    2.7
    
     2.0
     true
    
   
   
    org.apache.maven.plugins
    maven-javadoc-plugin
   
   
    org.apache.maven.plugins
    maven-project-info-reports-plugin
   
  
 

 
  
   spring-snapshot
   Spring Maven SNAPSHOT Repository
   http://s3.amazonaws.com/maven.springframework.org/snapshot
  
 

 

  
   org.springframework.data
   spring-data-neo4j
   2.0.0.BUILD-SNAPSHOT
  

  
   org.springframework
   spring-core
   ${spring.version}
  

  
   org.springframework
   spring-context
   ${spring.version}
  

  
   org.springframework
   spring-aop
   ${spring.version}
  

  
   org.springframework
   spring-aspects
   ${spring.version}
  

  
   org.springframework
   spring-tx
   ${spring.version}
  

  
   org.neo4j
   neo4j
   1.5
  

  
   junit
   junit
   4.10
   test
  

  
   org.springframework
   spring-test
   ${spring.version}
   test
  


 



Luego hacen mvn clean install y luego eclipse:eclipse.

Luego importamos el proyecto a eclipse, ahora veamos la clase persona:

/**
 * 
 */
package org.assembly.model;

import java.util.HashSet;
import java.util.Set;

import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.Indexed;
import org.springframework.data.neo4j.annotation.NodeEntity;

/**
 * @author emanuel
 *
 */
@NodeEntity
public class Person {
 
 @GraphId
 private Long id;
 
 @Indexed //nos permite buscar por ejemplo por nombre. 2 personas no deberian llamarse igual
 private String name;
 
 private String lastName;
 
 private Set friends = new HashSet();

 public Person() { }
 
 public Person(String name, String lastName) {
  super();
  this.name = name;
  this.lastName = lastName;
 }

 public Person(String name, String lastName, HashSet friends) {
  super();
  this.name = name;
  this.lastName = lastName;
  this.friends = friends;
 }

 public void makeAFriend(Person friend) {
  this.getFriends().add(friend);
  friend.getFriends().add(this);
 }
 
//geters , seters, hashcode and equal
 

}



Con esas anotaciones le decimos a spring cual es el id de nuestro nodo y que puede usar como indice para buscar. Ahora hagamos un dao:

package org.assembly.dao;
//La interfaz
import org.assembly.model.Person;

public interface PersonDAO {
 
 void save(Person person);

 Person get(Long id);
 
 Person findByName(String name);
 
}



package org.assembly.dao;

import java.util.List;

import org.assembly.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.neo4j.support.Neo4jTemplate;
//La implementacion
public class PersonDAOImpl implements PersonDAO {
 
 @Autowired
 private Neo4jTemplate template;
 
 public void setTemplate(Neo4jTemplate template) {
  this.template = template;
 }

 @Override
 public void save(Person person) {
  this.template.save(person);
 }

 @Override
 public Person get(Long id) {
  return this.template.findOne(id, Person.class);
 }

 @Override
 public Person findByName(String name) {
  GraphRepository movieRepository =
    template.repositoryFor(Person.class);
  
  return movieRepository.findByPropertyValue("name", name);
 }


}



Vamos a configurar el applicationContext.xml:



 

 
  
  
 

 

 

 
  
  
 





Vamos a probar todo con un test:

package org.assembly.dao;

import static org.junit.Assert.assertEquals;

import javax.annotation.Resource;

import org.assembly.model.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class PersonDAOTest {

 @Resource
 private PersonDAO dao;
 
 public void setDao(PersonDAO dao) {
  this.dao = dao;
 }
 
 @Test 
 @Transactional
 public void save() {
  Person person = new Person("Pablo", "Goette");
  
  dao.save(person);
  
  Person personSaved = dao.get(person.getId());
  
  assertEquals(person, personSaved);
 }
 
 @Test 
 @Transactional
 public void saveFriendly() {
  Person person = new Person("Pablo", "Goette");
  
  person.getFriends().add(new Person("Mercedez","Benz"));
  person.getFriends().add(new Person("Al","Colico"));
  person.getFriends().add(new Person("Barry","Gota"));
  person.getFriends().add(new Person("Mercedez","Benz"));
  dao.save(person);
  
  Person personSaved = dao.get(person.getId());
  
  assertEquals(person, personSaved);
 }

 @Test 
 @Transactional
 public void findByName() {
  Person person = new Person("Aquiles", "Canto");
  
  dao.save(person);
  
  Person personSaved = dao.findByName("Aquiles");
  
  assertEquals(person, personSaved);
 }
}

Y listo, verán por ahí la carpeta data con la base de neo4j.


Si todo salio bien los test terminaron exitosos.

Dejo el repositorio subversion:
svn checkout http://spring-neo4j.googlecode.com/svn/trunk/ spring-neo4j-read-only

Dejo links:

http://www.springsource.org/spring-data/neo4j
http://neo4j.org/
http://video.neo4j.org/YbYN/webinar-introduction-to-spring-data-neo4j/
http://youtu.be/9qVs9vxx8lk
http://www.infoq.com/presentations/Introduction-to-Spring-Data-Neo4j

Y dejo un video:



lunes, 2 de enero de 2012

Libro de Javascript gratuito

Comparto un buen libro de javascript gratuito:

http://eloquentjavascript.net/

Entre los comentarios se encuentra el siguiente:

A concise and balanced mix of principles and pragmatics. I loved the tutorial-style game-like program development. This book rekindled my earliest joys of programming. Plus, JavaScript!
Brendan Eich, the man who gave us JavaScript

Ranking de lenguajes 2011

Estaba leyendo genbetadev y me encontré el ranking de lenguajes que realiza la empresa TIOBE:


Dejo links: