Translate

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:


sábado, 31 de diciembre de 2011

Apache Hadoop con Spring Data

 Spring Data provee soporte para Apache Hadoop; que es Hadoop es un proyecto de software libre el cual tiene como objetivo brindar servicios de computacion distribuida de este proyecto ya hablamos:
http://emanuelpeg.blogspot.com/2009/10/apache-hadoop-es-un-proyecto-java-de.html

Spring Data es otro proyecto libre que nos ayuda a interactuar con diferentes tipos de almacenes de datos. Este proyecto implementa un modulo para interactuar con Apache Hadoop.

Entre sus características podemos nombrar:


  • Una extensión para Spring Batch para soportar la comunicación punto a punto
  • Simplifica la lectura y escritura de recursos HDFS
  • Spring Batch Tasklets Map-Reduce para en un Job con streaming
  • Integración con Hbase, Hive y Pig



Para utilizar este proyecto con maven deben agregar el siguiente repositorio:


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



y la siguiente entrada en el pom:


 org.springframework.data
 spring-data-hadoop
 1.0.0.BUILD-SNAPSHOT
 


Dejo links:

http://www.springsource.org/spring-data/hadoop
http://static.springsource.org/spring-hadoop/docs/current/reference/
http://hadoop.apache.org/

Feliz 2012!!


jueves, 29 de diciembre de 2011

Aprendiendo Android



Para el que quiere aprender a programar aplicaciones para Android, dejo algunos recursos:

1.- 9 videotutoriales en español --> http://goo.gl/laZc8

2.- 4 libros digitales gratuitos --> http://goo.gl/pqvUj

3.- 20 horas para aprender a programar en Android -->http://goo.gl/SU7sh

4.- Curso impartido por Google --> http://goo.gl/8utpu

5.- Desarrollo y Programacion Android Fácilmente --> http://goo.gl/HYvbd

6.- Desarrollo en Android en español --> http://goo.gl/r7yu2


Que lo disfruten!