sábado, 30 de junio de 2012

jDTO Binder


Me gusta trabajar con DTOs, tiene varias ventajas y también desventajas. Para el que no conoce el patrón DTO (Data transfers Object) indica que debemos crear objetos para transferir datos a la capa de presentación.


Son entidades serializables que se suelen utilizar en la transferencia de información entre capas físicas de la aplicación. También son útiles en situaciones donde queremos desvincular capas aunque no exista una división física real. Los DTOs representan la información de las objetos de negocio a partir de cierto nivel (o componentes) de nuestra aplicación.


Usando DTOs conseguimos tener una mayor separación física y lógica. Pero tenemos que trabajar más, claro, tenemos que sincronizar los objetos de modelo o negocio con nuestros DTOs y como no nos gusta trabajar mucho, existe jDTO binder.


jDTO binder nos permite por medio de anotaciones sincronizar nuestros DTOs con los objetos del modelo. Dicho framework se hace cargo de la copia de datos entre objetos e incluso formateo y conversión de datos.jDTO de acuerdo con el código fuente es libre con licencia Apache. También se puede encontrar en su proyecto de GitHub.


Veamos ejemplo:

Hacemos una clase persona:


public class Person  implements Serializable {
    private long id;
    private String firstName;
    private String lastName;
    private Date birthDay;
    //GETTERS AND SETTERS
}

Hacemos el DTO

public class PersonDTO implements Serializable {
    
    //bound by convention
    private long id;
    
    @Source(value="birthDay", merger=DateFormatMerger.class, 
            mergerParam="dd/MM/yyyy")
    private String birthday;
    
    @Sources(value={@Source("firstName"), @Source("lastName")}, 
            merger=StringFormatMerger.class, mergerParam="%s %s")
    private String fullName;
    //GETTERS AND SETTERS
}

Y luego sincronizamos:

DTOBinder binder = DTOBinderFactory.getBinder();

//bind a person to a person DTO
Person person = SampleData.samplePerson();
PersonDTO dto = binder.bindFromBusinessObject(PersonDTO.class, person);


Y listo!

Dejo el repositorio de maven:

        
            org.jdto
            jdto
            1.2
        
        
            org.slf4j
            slf4j-log4j12
            1.6.2
        
        
            commons-lang
            commons-lang
            2.6
        


Dejo links:
http://www.jdto.org/
https://github.com/jDTOBinder/jdto-binder
http://jcavallotti.blogspot.com.ar/2011/10/jdto-binder.html



viernes, 29 de junio de 2012

Newsql Open Source

NewSQL es la respuesta del mundo relaciona a la frase "las bases relacionales no escalan". NewSQL para explicarlo son bases relacionales que tienen todas las características de una base relacional (transaccional, atómico,  ACID, SQL, etc) pero sobre una plataforma distribuida, escalable y performante.

Pero que base NewSQL open source tenemos?


  • VoltDB es una base de datos en memoria, muy rápida. VoltDB Community Edition 1.0 -es un producto open source distribuido bajo licencia GPLv3.
  • ScaleDb es como un plugin de MySQL que permite transformar mi mysql a una base NewSQL se distribuye bajo licencia  GPL V2.
  • Akiban basado en grupo de tablas permite que nos atraigamos de este concepto y trabajemos como una base de datos común. Se distribuyo bajo licencia GNU Affero General Public License v3



Conocen otra base NewSQL OpenSource??

Ruby Fácil

Dejo un Libro que esta bueno para comenzar con Ruby!

Dejo el link:
http://www.mediafire.com/?6dpqsut5orll3qd

miércoles, 27 de junio de 2012

Mono


Mono es un proyecto muy famoso de Miguel de Icaza; este proyecto porta .net a cualquier plataforma incluido Linux. La verdad es increíble actualmente soportan la versión 4 del framework y no solo que se quedan con soporte sino que también son un símbolo de innovación, como por ejemplo la vm para android que puede correr C# en teléfonos y tablets Android.

Mono también tiene su ide, MonoDevelop que permite desarrollar tanto aplicaciones Web como de escritorio. Y permite desarrollar en Basic o C# y se pueden instalar otros lenguajes.

Mono es software libre y crecio mucho gracias a la comunidad.

Dejo links:
http://mono-project.com/What_is_Mono
http://www.go-mono.com/mono-downloads/download.html
http://mono-project.com/Mono_Basics
http://monodevelop.com

martes, 26 de junio de 2012

Riak, una base NoSQL key-value de código abierto que se las trae...


Riak es una base NoSQL key-value de código abierto. Riak es escalable y  simplifica el desarrollo, dando a los usuarios la capacidad de formar rápidamente prototipos, probar y desplegar sus aplicaciones.


Riak es una base de datos distribuida diseñada para:

  • Disponibilidad: Riak réplicas y recupera los datos de forma inteligente para que esté disponible para la lectura y escritura, incluso en condiciones de fallo;
  • Tolerancia a fallos: se puede perder el acceso a muchos nodos de la red debido a anomalías en la partición o el hardware y no perder nunca de datos;
  • Simplicidad operacional: se puede añadir nuevas máquinas al clúster Riak fácilmente sin necesidad de incurrir en una mayor carga operativa - las mismas tareas operaciones se aplican a grupos pequeños como grandes grupos;
  • Escalabilidad: Riak distribuye automáticamente los datos de todo el grupo y se obtiene un aumento de rendimiento casi lineal a medida que agrega la capacidad.
Dejo link:

domingo, 24 de junio de 2012

Pear Linux, MacOS X pero en Linux



Qué pasa si tomas el estilo visual de MacOS X pero en Linux? Pear Linux, una distro francesa que pretende llevar la belleza estética y experiencia de usuario de Mac a Linux. Tienen una tienda de aplicaciones (la Pear Appstore) un lanzador al estilo de Lion (basado en Comice Shell) además de que tiene un dock y usa colores parecidos al de el sistema operativo de la manzanita.


Si están acostumbrados a MacOS, quizás sea el paso adecuado para probar Linux.

Dejo link:
http://pear-os-linux.fr/

rubymonk

rubymonk es un sitio para aprender Ruby contiene recursos y se aprende de forma divertida y llevadera.

Dejo el link:
http://rubymonk.com/

viernes, 22 de junio de 2012

OpenNebula

OpenNebula.org es un proyecto Open Sources; uno de los más avanzados y escalables herramienta para realizar Cloud computing.

OpenNebula tiene como objetivo proporcionar una capa de gestión abierta, flexible, extensible y completa para automatizar y orquestar la operación de virtualizado centros de datos mediante el aprovechamiento y la integración de las soluciones existentes para el despliegue de redes, almacenamiento, virtualización, monitorización y gestión de usuarios.

Su actual release es el 3.4 y corre sobre diferentes ditros linux. En este grefico podemos ver la evolución del proyecto:



Dejo link:
http://opennebula.org

domingo, 17 de junio de 2012

Encontrar los objetos apropiados


Cuando diseñamos, lo más dificil es encontrar objetos indicados que representen la realidad pero a la vez den flexibilidad a nuestros diseños como dice el libro Patrones de Diseño de Erich Gamma:

"Lo más complicado del diseño orientado a objetos es descomponer un sistema en objetos. La tarea es difícil porque entran en juego muchos factores: encapsulación, granularidad, dependencia, flexibilidad, rendimiento, evolución, reutilización, etc, etc. Todo ellos influyen en la descomposición, muchas veces de forma opuesta.

...

Muchos objetos del un diseño proceden del modelo del análisis. Pero los diseños orientados a objetos suelen acabar teniendo clases que no tiene su equivalente en el mundo real. Algunas de ellas son clases de bajo nivel como los arrays. Otras son de mucho más alto nivel... El modelado estricto del mundo real conduce a un sistema que refleja las realidades presentes pero no necesariamente las futuras. Las abstracciones que surgen durante el diseño son fundamentales para lograr un diseño flexible. "


Herencia frente a composición

Estoy leyendo Patrones de Diseño de Erich Gamma. En este libro discute sobre como es mejor reutilizar funcionalidad si por medio de la herencia o la composición. La idea de este post no es transcribir del libro sino hacer un resumen y analizar cada punto.

Vamos primero con la composición, la composición es una técnica en la cual descomponemos objetos para reutilizar funcionalidad. De esta forma componiendo objetos podemos obtener funcionalidad más compleja y completa.

Ventajas:

  • Reutilización de caja negra, los detalles internos de los objetos no son visibles.
  • La dependencia de objetos se puede definir dinamicamente si utilizamos interfaces. Disminuyendo el acoplamiento y aumentando la reutilización. 
  • Ayuda a mantener cada clase encapsulada y centrada en una sola tarea. De esta manera, nuestra clases y jerarquías de clases permanecerán pequeñas y sera menos probable que se conviertan en monstruos inmanejables. 
Desventajas:
  • Requiere más diseño (que tampoco es tan malo)
El mecanismo de herencia lo conocemos bien y también tiene sus ventajas y desventajas


Ventaja:

  • Es facil de usar lo provee los lenguajes.
  • Es más fácil modificar la implementación que esta siendo reutilizada. 
Desventaja:
  • Reutilización de caja blanca, los hijos pueden modificar variables internas del padre (si están protegidas o publicas), la herencia suele decirse rompe el encapsulamiento. 
  • Existe más acoplamiento ya que cualquier cambio en el padre obligara a cambiar la subclase. 
Según lo dicho podemos afirmar:

"Favorecer la composición de objetos frente a la herencia de clases."


Idealmente, solo crearíamos nuevos componentes para lograr la reutilización. Deberíamos ser capases de conseguir toda la funcionalidad que necesitamos simplemente ensamblando componentes existentes a través de la composición de objetos. Sin embargo, rara vez este es el caso, por lo tanto reutilizar mediante herencia hace más fácil construir nuevos componentes que puedan ser combinados con los antiguos. La herencia y la composición trabajan juntas. Pero abusar de la herencia trae consigo diseños más complejos y utilizar composición hace más fácil y reutilizable el diseño. 

AngularJS



AngularJS es un framework open source javascript. Este framework tiene como objetivo disminuir la cantidad de javascript de Aplicaciones singel-page utilizando el patrón MVC.

Html es genial para escribir documentos estáticos pero no para realizar aplicaciones dinámicas; AngularJS extiende html para hacer más fácil el diseño de aplicaciones dinámicas a través del patrón MVC.

Dejo un video:



Dejo un link:
http://angularjs.org


sábado, 16 de junio de 2012

Fernet, coca y javascript

Quiero recomendarles un blog muy bueno, que mezcla dos pasiones javascript y el fernet!!

Dejo link: http://fernetjs.com/


martes, 12 de junio de 2012

Spring para Android



Spring for Android es una extensión de la Spring Framework que tiene como objetivo simplificar el desarrollo de aplicaciones nativas para Android.



Spring for Android es un framework que nos facilita la comunicación entre el servidor y la aplicación Android a través de una API REST. Además provee métodos de autenticación.




Todo lo que quieren saber de este proyecto en el siguiente link: http://www.springsource.org/spring-android

Y dejo un video:


lunes, 11 de junio de 2012

TIOBE publico nuevamente su indice de los lenguajes más utilizados

TIOBE publico nuevamente su indice de los lenguajes más utilizados:

Position
Jun 2012
Position
Jun 2011
Delta in PositionProgramming LanguageRatings
Jun 2012
Delta
Jun 2011
Status
12C17.725%+1.45%  A
21Java16.265%-2.32%  A
33C++9.358%-0.47%  A
47Objective-C9.094%+4.66%  A
54C#7.026%+0.18%  A
66(Visual) Basic6.047%+1.32%  A
75PHP5.287%-1.31%  A
88Python3.848%-0.05%  A
99Perl2.221%-0.09%  A
1012Ruby1.683%+0.20%  A
1111JavaScript1.474%-0.03%  A
1229Visual Basic .NET1.216%+0.78%  A
1313Delphi/Object Pascal1.150%+0.08%  A
1414Lisp0.986%+0.05%  A
1521Logo0.860%+0.31%  A-
1615Pascal0.844%+0.11%  A
1717Transact-SQL0.705%+0.05%  A
1819Ada0.681%+0.08%  B
1922PL/SQL0.637%+0.13%  A-
2010Lua0.635%-1.40%  B


Como podemos ver C es el primer lenguaje y lo sigue Java. Esto se tiene que tomar con pinzas ya que java ha bajado en el promedio por la cantidad de lenguajes  que proliferaron en su plataforma. Con Android java tuvo una nueva primavera y creo que va a crecer mucho más. La telefonía celular esta marcando tendencias tecnológicas y los lenguajes de programación no son la excepción, como se puede ver en la gráfica el crecimiento de Object C el lenguaje del IPhone.


Dejo el link:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html