Translate

martes, 6 de noviembre de 2012

domingo, 4 de noviembre de 2012

Spring Data, accediendo fácilmente a cualquier almacén de datos

Spring Data es un proyecto SpringSource cuyo propósito es unificar y facilitar el acceso a diferentes tipos de almacenes de persistencia, tanto en los sistemas de bases de datos relacionales y almacenes de datos NoSQL.

Cada subtipo de proyecto dependiente del alamacen de datos se caracterizan por ofrecer CRUD (Create-Read-Update-Delete), métodos de búsqueda, clasificación y paginación. Spring Data proporciona interfaces genéricas para estos aspectos (CrudRepository, PagingAndSortingRepository), así como implementaciones de persistencia específica.

Podemos extender las interfaces como lo hacemos para nuestros daos de hibernate o jpa:


public interface UserRepository extends MongoRepository<User, String> {
        @Query("{ fullName: ?0 }")
        List<User> findByTheUsersFullName(String fullName);
        List<User> findByFullNameLike(String fullName, Sort sort);
}
...

Para los proyectos Neo4J y MongoDB; spring data nos ofrece Templates. Que nos permiten hacer operaciones de CRUD, busquedas Pero todos estos métodos funcionan sólo para el almacén de datos configurado. Spring Data JPA no ofrece Templates dado que EntityManager es como un template.

Para configurar un template lo podemos hacer de este modo:


 



   




Dependiente de la tecnología que utilicemos para almancenar datos podemos anotar nuestros objetos. Cada tipo de almacén de datos viene con su propio conjunto de anotaciones para proporcionar la meta información necesaria para la asignación. Vamos a ver cómo un usuario de dominio objeto simple se pueden asignar a los almacenes de datos:

JPA MongoDB Neo4j
@Entity
@Table(name="TUSR")
public class User {

  @Id
  private String id;

  @Column(name="fn")
  private String name;

  private Date lastLogin;

...
}
@Document(
collection="usr")
public class User {

  @Id
  private String id;

  @Field("fn")
  private String name;

  private Date lastLogin;

 ...
}
@NodeEntity
public class User {

  @GraphId
  Long id;


  private String name;

  private Date lastLogin;

...
}



Todo aquel que este familiarizado con las anotaciones de de JPA puede, utilizar sin problemas las anotaciones de los otros almacenes de datos. 

Algo muy importante es que Spring Data provee QueryDsl para las consultas a repositorios JPA, MongoDb y Neo4J. QueryDsl permite generar consultas por medio de un dsl de forma muy fácil.

No hay ninguna API general a todos los almacenes de persistencia. Las diferencias son demasiado fundamentales. Pero el proyecto de datos Spring proporciona un modelo de programación común para acceder a sus datos.

Dejo link:

http://www.infoq.com/articles/spring-data-intro
http://www.springsource.org/spring-data



Fancy es un nuevo lenguaje de programación de propósito general inspirado en Smalltalk, Ruby, Erlang y Io


Fancy es un nuevo lenguaje de programación de propósito general  inspirado en Smalltalk, Ruby, Erlang y Io, que se ejecuta en la máquina virtual de Rubinius. Tiene integración total con Ruby y las librerías de Ruby utilizadas en Rubinius.

Fancy es dinámico, orientado a objetos puro, basado en clases con soporte integrado para futures y actores (como Erlang). La sintaxis es fácil de aprender, consistente y está inspirada en Ruby y Smalltalk.



Veamos unos ejemplos:

"Hello, World!" println

El objeto String lanza un mensaje println, esto es muy similar a Smalltalk.


class Fixnum {
  def fib {
    match self {
      case 0 -> 0
      case 1 -> 1
      case _ -> self - 1 fib + (self - 2 fib)
    }
  }
}

15 times: |x| {
  x fib println
}

En este caso utiliza pattern matching.


class Greeter {
  def initialize: @name
  def greet {
    "Hello, #{@name}" println
  }
}

g = Greeter new: "World!"
g greet # => "Hello, World!"

Me parece un lenguaje por demás interesante, sería buena idea llevarlo a la plataforma Java. Que opinan?

Dejo links:
http://www.fancy-lang.org/
http://en.wikipedia.org/wiki/Fancy_(programming_language)


Libro gratuito de Git

Git es un sistema rápido de control de versiones escrito en C y que se ha hecho popular sobre todo a raíz de ser el elegido para el kernel de Linux.

Todo el libro Git Pro, escrita por Scott Chacon y publicado por Apress, está disponible en web. Todo el contenido está bajo la licencia Creative Commons, no comercial. Este libro es una gran ayuda para los que comenzamos con Git.

Dejo el link:
http://git-scm.com/book

jueves, 1 de noviembre de 2012

GNU/Linux Distribution Timeline 12.10


Les dejo una actualización del Timeline de Linux. Tantas distribuciones hace a gente muy diferente, con propósitos y usos muy diferentes y feliz!

Dejo link:
http://futurist.se/gldt/wp-content/uploads/12.10/gldt1210.png

sábado, 27 de octubre de 2012

Redline, corriendo Smalltalk en la plataforma Java


Si se junta un lenguaje orientado a objeto puro y la maquina virtual más usada del mercado, junto a la plataforma más robusta nos da redline. Redline es una gran idea, programar en smalltalk en la plataforma Java.

Proporcionar una implementación viable Smalltalk para la JVM puede ayudar a revitalizar la comunidad haciéndola llegar a la mayor audiencia posible. La máquina virtual de Java es sin duda la más utilizada y la plataforma de implementación más popular. Poder ejecutar Smalltalk en la JVM trae Smalltalk un público mucho más amplio posible.

Los desarrolladores que trabajan con Java y otros lenguajes de la JVM puede tener la oportunidad de trabajar con Smalltalk en un entorno en el que se sienta cómodo y aprovechar la productividad que trae Smalltalk.

Dejo link:
http://www.redline.st/

Haskell se va a las nubes!!

Cloud Haskell es un lenguaje de dominio específico (DSL) para el desarrollo de programas para un entorno de computación distribuida.  Proporciona un modelo de comunicación de paso de mensajes, inspirados en Erlang, sin introducir incompatibilidades con memoria compartida de concurrencia de Haskell.

Es una herramienta para escribir aplicaciones que deben ejecutarse en forma paralela en computadoras o máquinas virtuales. Esto nos provee confiabilidad, capacidad para ejecutar en paralelo así como para la creación de aplicaciones de cálculo intensivo que pueden beneficiarse de un montón de hardware.

Dejo link:
http://www.haskell.org/haskellwiki/Cloud_Haskell

jueves, 25 de octubre de 2012

Liberado JRuby 1.7.0!!

JRuby es el compilador de Ruby que compila en bytecode.

Tenemos una nueva versión! JRuby 1.7.0 fue liberado. Esta nueva versión nos permite correr Ruby 1.9 y soporta todas las características del lenguaje.

Otra característica muy importante es que usa el InvokeDynamic de la maquina virtual de Java 7, lo que le permite usar clousures en bytecode; aumentando notablemente el rendimiento de lenguajes que usan clousures y compilan a bytecode.

Un gran paso para la comunidad de JRuby!!

Dejo links:
http://jruby.org/2012/10/22/jruby-1-7-0.html
http://www.infoq.com/news/2012/10/jruby-17

lunes, 22 de octubre de 2012

InfoQ nos regala un libro: The Culture Game




InfoQ nos regala un librito llamado:  The Culture Game. De que se trata? Bueno, es un tutorial y guía de referencia para la creación de la agilidad del negocio en su organización. Este es el manual para quien desee desarrollar rápidamente una cultura de aprendizaje dentro de sus equipos.

Es gratuito y lo pueden bajar del siguiente link:

http://www.infoq.com/minibooks/Mezick-Culture-game


sábado, 20 de octubre de 2012

Endulzando javascript con Mozilla Sweet.js


Mozilla Sweet.js es un desarrollo de Mozilla que lo que permite es extender Javascript por medio de un sistema de macros. Con este framework podemos hacer un dsl en javascript o mejorar la sintaxis del lenguaje o agregar funcionalidad.

Vamos con un ejemplo, no quiero usar function por que es muy largo, quiero usar def:


macro def {
  case $name:ident $params $body => {
    function $name $params $body
  }
}

y ahora puedo hacer:


def add (a, b) {
  return a + b;
}

Es muy bueno!! También podemos definir clases y hacer muchas cosas más...

Dejo links:
http://sweetjs.org/
http://www.infoq.com/news/2012/10/Mozilla-Sweetjs
https://github.com/mozilla/sweet.js/wiki/Example-macros

Prueba kotlin!


Kotlin es el nombre del lenguaje de la empresa jetbrains del que ya hablamos.

Existe una pagina para probar este lenguaje; dejo link:

http://kotlin-demo.jetbrains.com/

Lo que viene, lo que viene en Scala


Han anunciado el el release candidate de Scala (Scala 2.10.0 RC1) entre las características más importante puedo nombrar:

La verdad que están a full, muchas características nuevas que hacen más potente el lenguaje.

Dejo link:
http://www.scala-lang.org/downloads#RC
https://groups.google.com/forum/#!topic/scala-language/eRYM3-SIAso/discussion


jueves, 18 de octubre de 2012

Groovy o Scala esa es la cuestión?


Dos lenguajes están haciendose famosos en la plataforma Java, Groovy y Scala; los dos son similares pero tienen diferencias importantes; que son buenas saberlas antes de elegir uno o otro.

Lo principal a mi entender que impulso a Groovy fue Grails fue el caballo de batalla y que le hizo muy buena publicidad al lenguaje. En cambio Scala no tenia un framework de desarrollo ágil que lo impulsara hasta el framework Play! 2. Si bien Grails esta super maduro, play tiene una comunidad muy buena, Por lo tanto podemos decir que en este punto es empate.


Como semejanza los dos lenguajes corren sobre la JVM, con interoperabilidad con toda la plataforma. Los dos son orientados a objetos pero Scala también es funcional y los dos tienen closures. Además los dos permiten un sistema de reutilización con mixins.  

Los dos lenguajes soportan aplicación parcial de una función y curring, pero el uso de estas caracteristicas es más natural en Scala. 

Groovy es un lenguaje dinámicamente tipado, esto puede ser bueno o malo depende de como lo veamos; además Groovy soporta dynamic meta-programming. 


Scala es un lenguaje estáticamente tipado por lo tanto no soporta dynamic meta-programming, es este punto Scala es más parecido a Java pero Scala cuenta con un sistema de tipos más sofisticado que Java. Algo que también hace la curva de aprendizaje más empinada.


Groovy es sintácticamente más parecido a Java pero semánticamente se ve la influencia que tuvo Ruby.

Scala  sintácticamente se ve la influencia de Java y Ruby, pero semánticamente fue influido por Java, SML, Haskell y gBeta.

Scala optimiza las funciones recursivas esto tiene gran importancia en el paradigma funcional pero no tiene tanta importancia en la programación imperativa.

Los dos tienen por defecto evaluación ansiosa o  eagerly; sin embargo Scala permite call-by-name y lazy evaluation. En Groovy se puede emular call-by-name con clousures.

Scala no tiene el concepto de campos o clases estáticas, utiliza singletones; en cambio groovy, si utiliza statics.

Estas son las diferencias más importantes, que tenemos que tener en cuenta cuando escogemos uno o el otro...




miércoles, 17 de octubre de 2012

Prueba Ceylon !!

Ceylon es un lenguaje que corre sobre jvm. Es un lenguaje hecho por Jboss/Red Hat ; el principal impulsor es ni más, ni menos Gavin King el creador de Hibernate. Ya hable en varias oportunidades del lenguaje: http://emanuelpeg.blogspot.com.ar/2011/08/ceylon.html

En este post les quiero recomendar que pasen por esta pagina donde van a poder probar el lenguaje y  van a comprobar la gran potencia de este lenguaje.

Dejo link:
http://try-ceylon.rhcloud.com/