Translate

sábado, 9 de julio de 2011

Cambios en blogger


Gente!! Ojo; google piensa cambien el nombre de blogger. Todavia no se si esto me afecta, dejo toda la noticia de genbeta:

El cambio de diseño en la interfaz de sus aplicaciones web no va a ser lo único nuevo que vamos a ver en Google estos días: nos acaba de llegar la noticia de que la compañía de Mountain View va a cambiar el nombre de los servicios Picasa y Blogger, las herramientas para compartir imágenes y mantener bitácoras.

Sus nuevos nombres aún no se han revelado, pero la fuente indica que Blogger pasará a llamarse Google Blogs y Picasa se conocerá como Google Photos. También es de suponer que con los nuevos nombres llegue una nueva interfaz semejante a la que ya está presente en Google Calendar, Maps y Gmail gracias al tirón de Google+. Parece que otros servicios también tendrán un cambio de nombre, pero han asegurado que YouTube no va a sufrir ningún cambio. Normal, teniendo en cuenta su enorme popularidad.

Los cambios de nombre pueden ser efectivos dentro de cuatro o seis semanas, fecha en la que Google+ puede abrirse al público (para esto último ya se rumorea el día 31 de julio como muy tarde). Ya sabemos que Blogger va a tener un profundo lavado de cara, pero… ¿Y Picasa? Es una buena oportunidad para que Google relance un servicio de imágenes ahora que Flickr está de capa caída. No parece que tengamos que esperar mucho para ver todos estos cambios… Google nos va a mantener bastante ocupados este mes.

viernes, 8 de julio de 2011

7 proyectos Java que cambiaron el Mundo

Estaba leyendo un articulo sobre los 7 proyectos java que cambiaron el mundo: JUnit, Eclipse, Spring, Solr, Jenkins o Hudson, Apache Hadoop, Android.

Me sorprendió la parecencia de Solr y Hadoop; nunca los he usado; debería probarlos.

Que proyecto agregarían o sacarían?

Dejo el link:

http://radar.oreilly.com/2011/07/7-java-projects.html

martes, 5 de julio de 2011

Consumir servicios JSON and REST con jQuery


La verdad es que la simplicidad de jQuery me sorprende. Como recordamos en post anteriores habíamos hecho servicios REST que eran expuestos con Json:

http://emanuelpeg.blogspot.com/2011/07/rest-con-cxf.html
http://emanuelpeg.blogspot.com/2011/06/resteasy-con-spring.html

Ahora vamos a consumirlos con jQuery:

$.getJSON(url, function(data) {

//data es el objeto Json, con el que obtengo los datos
//Vamos a recorrerlo y mostrarlo
$.each(data, function(index, objetoDelListado) {
$("#algunaDiv").append(objetoDelListado.name);
});
});




Y listo!

Increíble!

Libros Gratuitos!





Dejo Links de libros gratuitos el primero es de 5 libros sobre Java:

sábado, 2 de julio de 2011

Rest con CXF

Apache CXF es un framework open source, que nos permite construir servicios web tanto soap como rest. Su principal característica es que esta integrado total mente con spring.

Lo que vamos a hacer es exponer un bean de spring con cxf usando Rest y json.

Primero debemos agregar los siguientes jars, es bueno usar maven por lo tanto dejo la entrada del pom:

  


org.apache.cxf
cxf-rt-frontend-jaxws
${cxf.version}



org.apache.cxf
cxf-rt-transports-http
${cxf.version}




org.apache.cxf
cxf-rt-transports-http-jetty
${cxf.version}



org.apache.cxf
cxf-bundle-jaxrs

${cxf.version}


org.eclipse.jetty
jetty-server









org.codehaus.jackson
jackson-mapper-asl
${jackson.version}



org.codehaus.jackson
jackson-jaxrs
${jackson.version}



org.codehaus.jackson
jackson-xc
${jackson.version}




Las versiones de los framework pueden buscarlas en mvnrepository.com. En el caso de cxf depende también la versión de spring, con spring 2.5 se usa hasta 2.3.5; si queres usar versiones mas nuevas deberás usar spring 3.

Luego debemos agregar la siguiente entrada al web.xml:

 
CXFServlet
CXF Servlet

org.apache.cxf.transport.servlet.CXFServlet

1



CXFServlet
/rest/*



Ojo que tienen que levantar spring en el web.xml, si ya lo hacen esta todo bien, si no deben agregar la siguiente linea en el web.xml:


contextConfigLocation
/WEB-INF/applicationContext-hibernate.x
ml


...

context

org.springframework.web.context.ContextLoaderServlet

1




Luego de esto vamos a escribir nuestro bean, yo no voy a hacer una interfaz para este bean pero es bueno que si pueden la hagan.

package org.assembly.post;

import javax.ws.rs.GET;
import javax.ws.rs.Path;


/**
* @author emanuel
*/
@Path("/posts")
public class PostsRest {

@GET
public String getPosts() {
return "posts";
}


}



Este bean tiene un método que solo devuelve un string. Ahora vamos a definir el bean en el applicationContext.xml de sprint y además configurar el servicio REST:























Se deben incluir estos archivos de cxf para que funcione el framework estos archivos son del framework, así que no hay problema por eso.

Como vemos primero se define el servicio Rest y luego se define el bean.

Si vamos a la url http://localhost:8080//rest/posts nos devolverá el string "post".

Y no iba a usar Json? Si si, para un cachito. Ahora vamos a devolver un objeto por json.Para esto vamos a usar un framework llamado Jackson.

Vamos a modificar nuestro bean para uqe tenga como provider Jackson :

  



























Luego modificamos nuestra clase para tener métodos donde podamos devolver json:

package org.assembly.nornas.web.rest.post;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import org.assembly.dto.post.PostDTO;
import org.assembly.nornas.service.post.PostService;


/**
*
*
* @author emanuel
*/
@Path("/posts")
public class PostsRest {

private PostService postService;

public void setPostService(PostService postService) {
this.postService = postService;
}

@GET
@Path("/{blogId}/{from}")
@Produces("application/json")
public PostDTO findPostsPublishedByBlogId(@PathParam("blogId") Long blogId, @PathParam("from") Integer from) {
PostDTO post = new Post(1,"hola Mundo","Este es mi Hola Mundo");
return post;
}

@GET
@Produces("application/json")
@Path("/test")
public List< String> test() {
List< String> strings = new ArrayList< String>();
strings.add("hola");
strings.add("mundo");
return strings;
}

}



PostDTO esta anotado con anotaciones de jaxb para generar el objeto json correctamente:

@XmlRootElement(name="post")
public class PostDTO implements Serializable {

private static final long serialVersionUID = -6319037835355763839L;
@XmlElement(name="id")
private Long id;
@XmlElement(name="title")
private String title;
@XmlElement(name="content")
private String content;

//geters y seters
}


Ojo Jaxb necesita el constructor por defecto.

Luego vamos a la URL http://localhost:8080//rest/posts/1/0 por ejemplo.

Si vamos al método test http://localhost:8080//rest/test nos devolverá lo siguiente:

["hola","mundo"]


Y listo!!

Dejo Links:

http://cxf.apache.org/docs/jax-rs.html

sourcemaking.com

Sitio para aprender sobre Refactoring, Patterns, Antipatterns y UML.


Muy recomendado.

Usuario Linux


Me registre para que me cuenten como usuario linux.

Soy el usuario nro: 536423



Si quieren registrarse dejo el link:

miércoles, 29 de junio de 2011

GOBERNAR ES DAR TRABAJO


“GOBERNAR ES DAR TRABAJO” lo decía el general Peron. No estoy haciendo campaña proceditista simplemente me puse a reflexionar sobre la tarea del Líder de proyecto.

En mi opinión una de las ocupaciones más importantes es que todo el mundo este trabajando, que todos los desarrolladores sean productivos. Uno de los principales clientes del Líder de proyecto son los desarrolladores, que están esperando trabajo.

Ojo, no digo que el Líder tenga que imponer trabajo; el equipo de desarrollo debe ser lo suficientemente maduro para autogestionarse. Lo que digo es que el líder de proyecto tiene que quitar los palos del camino cada vez que la carreta amaga detenerse. Tiene que luchar para que cada persona sea productiva y haga mejor su trabajo. Sobre todo que el desarrollador sea feliz. Cuanto más como do trabajas mejor lo haces.

Por lo tanto el Líder debe ser más amigo de los desarrolladores, que del project o excel o power point. Debe ser capaz de decir, que dale una mano a Pepe que esta trabado, “No sigas por ahí que para mi no esta la solución”, “Si no podes avanzar llamame”. El Líder velar por la productividad del equipo, dado que si el equipo es productivo se llega con los tiempos.

La preocupación de la fecha de entrega, es un riesgo negociable; mientras que el cliente este informado y haya visto una demo o algo, un atraso es negociable. En cambio si un desarrollador estuvo 2 hs sin saber que hacer, trabado en un problema; el tiempo perdido no se negocia. Es una perdida, un pasivo del Líder.

Dejo unos link, que sería bueno leer:

domingo, 26 de junio de 2011

RESTEasy con Spring


RESTEasy es un framework de jboss que nos ayuda a generar servicios RESTfull. Este framework es una implementación de JAX-RS (JSR 311). JAX-RS es una nueva especificación de jcp que provee una API para servicios RESTfull bajo el protocolo http.

Anteriormente ya hablamos de este framework:

http://emanuelpeg.blogspot.com/2009/11/resteasy.html

Rápidamente pasemos a ver un ejemplo, quiero exponer un servicio por medio de rest con spring.

Primero agregamos la entrada en el pom (usemos maven please)


org.jboss.resteasy
resteasy-jaxrs
2.2.0.GA



org.codehaus.jettison
jettison



org.jboss.resteasy
resteasy-jettison-provider
2.2.0.GA


org.jboss.resteasy
resteasy-spring
2.2.0.GA



Para que estas funcionen hay que agregar los siguientes repositorios en el pom:



java.net
http://download.java.net/maven/1
legacy


maven repo
maven repo
http://repo1.maven.org/maven2/



jboss
jboss repo
http://repository.jboss.org/nexus/content/groups/public/





Además el web.xml queda similar a este:




RestEasy con Spring


org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap


org.jboss.resteasy.plugins.spring.SpringContextLoaderListener



Resteasy
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher



Resteasy
/serviciosRest/*




Ahora vamos a hacer anotar nuestro servicio para que funcione con rest:

@Path("/posts")
public interface HolaMundoService {

@GET
public String getSaludo();
}


Luego debemos implamentar este servicio y hacer un bean de spring.

Luego de hacer esto ya tenemos nuentro servicio rest en http://localhost:port//serviciosRest/posts

RESTEasy esta bajo licencia Apache ASL 2.0 y es una perfecta opción compatible con Spring.

Dejo links:


lunes, 20 de junio de 2011

SQLFire

vFabric SQLFire es una alternativa a las base de datos NoSQL, es una base orientada a memoria. Diseñada para aplicaciones que requieren alta velocidad, escalabilidad y disponibilidad.

SQLFire ofrece algunas de las mejores características que normalmente sólo se ve en las bases de datos NoSQL, tales como la escalabilidad horizontal, tolerancia a fallos, una arquitectura “Shared Nothing”

Pero que es una arquitectura “Shared Nothing”?

La arquitectura “Shared Nothing” consiste en una arquitectura distribuida en el que cada nodo es independiente y autosuficiente, y tiene un único punto de contención en todo el sistema. Típicamente se contrasta con los sistemas que mantienen una gran cantidad de almacenados en forma centralizada, ya sea una base de datos, un servidor de aplicaciones, o cualquier otro donde este centralizada la funcionalidad.
Se puede utilizar SQLFire desde java atravez de JDBC, y desde .net usando ADO.net.

Si tenes problemas para ampliar tu base de datos o preocupado por la alta disponibilidad, SQLFire es una gran alternativa.

Dejo un video:


Dejo Links:

miércoles, 15 de junio de 2011

Forks de MySQL




Como ustedes ya saben mysql es de oracle y suena feo... No me quiero unir a el pesimismo general de esta situación pero por las dudas; veamos alternativas:

MariaDB: Después de salir de Sun, Widenius (creador de MySQL) decidió crear su propia empresa a la que denomino Monty program AB. Su principal objetivo era el desarrollar un motor de almacenamiento alternativo a MyISAM y a InnoDB, pero con la particularidad de soportar transacionalidad. Así mismo tomo código de MySQL para empezar a desarrollar un nuevo gestor que utilizara este nuevo motor de almacenamiento, su nombre MariaDB. Esta empresa junto a Percona son las principales fundadoras de Open Database Alliance.

MariaDB nace con la clara idea de partir el código de base de Mysql y establecer paralelismo entre las versiones. De esta forma MariaDB 5.1. parte de MySQL 5.1. La misma política se aplicara en futuras versiones.

XTRADB: es el nombre de un nuevo motor de almacenamiento desarrollado por Percona, uno de los principales socios del Open Database Allince. Esta compañía, especializada en desarrollo servicios y productos basados en MySQL decidio crear un nuevo motor para mejorar InnoDB. XtraDB esta diseñado para funcionar en entornos de alto rendimiento y para escalar sin problemas.
En la actualidad XtraDB presenta una compatibilidad total con InnDB permitiendo remplazar a este.

Drizzle: nació a iniciativa de un ingeniero de MySQL llamado Brian Aker. La movida surgido cuando Brian mostro su desacuerdo con modificaciones en 4.1. Finalmente en julio del año parado comenzó el desarrollo de drizzle. La idea es la optimización para aplicaciones web.

Ourdelta: En este caso, Arjen Lentz comenzó el desarrollo en 2008 y el objetivo es generar código para hacer mejoras en mysql. OurDelta mantiene dos ramas testing y producción.

Sin duda la compra de oracle por parte de Sun a generado diferentes postura; este es un conjunto de forks que ayudan a decidir por otra solución libre de similares característicamente.

Dejo links:



martes, 14 de junio de 2011

Todos somos alumnos y profesores.

Un post para hacer catarsis.

Este blog siempre promovió el uso de software libre, más allá de cualquier licencia . Lo mejor de el Open Source es que hay gente que puede hacer mejor las cosas y de esa gente puedo aprender. Sea con mi código y con el de otra persona, nunca tengo toda la razón y si la tuviese de que sirve? El código libre enseña y seria un tonto si no quisiera enseñar o trasmitir lo que se.

“Siempre estamos equivocados” es la premisa que debe regir tu vida y posta, es verdad. Siempre alguien nos marca el camino y a los pocos meses nos dice que se equivoco que el camino no era ese. Todas las empresas son iguales y todos optamos diferentes caminos, por lo tanto cuando veas a alguien que te dice “Yo” resuelvo todos tus problemas. Por favor no le creas, no existe mayor hipócrita que el que no quiere aprender y solo el que cree tener toda la verdad nunca va a aprender.

Que importa tener toda la verdad, si no se puede ser abierto, y si no puedo escuchar. En estas condiciones puedo enseñar? Me huele a dictadura más que a enseñanza. Cuando vemos donde estamos y somos realistas, entendiendo nuestros errores, por menores, o flaquezas es cuando convencemos.

Sip, este post empezó con bronca pero ojo, si no me enojo nunca es porque no hago nada. Creo sinceramente que el que se enoja es porque trabaja y valora su trabajo. Es feo estar equivocado, pero más feo es estar solo con la razón absoluta. Abramos nuestras mentes, la mejor forma de hacer las cosas es como lo voy a hacer mañana, por ahora aprendamos.

jueves, 9 de junio de 2011

Aprender python


No se nada de python pero nunca es tarde para empesar, me pasaron estos links de la lista de usuarios de python:

Cómo Pensar como un Informático 2da. Edición
http://www.openbookproject.net/thinkcs/archive/python/spanish2e/
Esta es la segunda edición y esta traducido hasta el capitulo 7, este
libro esta orientado para que sea leido por aquellos que no tienen
conocimientos de programación, de hecho es el material que uso para
enseñar python en jornadas de apoyo al plan ceibal
Aqui esta la primera edición en español:
http://www.gulic.org/almacen/httlaclwp/index.htm
(en el sitio de OpenBook no lo tienen más, en ingles van por la tercera edición)

Python para Todos (tutorial en español)
http://mundogeek.net/tutorial-python/
Este esta muy bueno.

Del mismo autor de Python para Todos hay unos de artículos interesantes:

Guía de estilo del código Python
Guía de estilo de Guido van Rossum, creador de Python, y Barry Warsaw
http://mundogeek.net/traducciones/guia-estilo-python.htm

Modismos y Anti-Modismos en Python
Idioms o modismos a usar o evitar al escribir código Python.
http://mundogeek.net/traducciones/modismos-python.htm

Programa como un Pythonista: Python Idiomático
Documento que trata varias técnicas y modismos que pueden ser de
utilidad al trabajar con Python.
http://mundogeek.net/traducciones/python-idiomatico/

Otro recurso en español que le puede servir es el Tutorial escrito por
Guido van Rossum traducido al español por el grupo de usuarios Python
Argentina (pyar)
http://docs.python.org.ar/tutorial/contenido.html
http://python.org.ar/pyar/Tutorial?action=AttachFile&do=view&target=TutorialPython.pdf

Hay un libro de python hecho por la universidad española Jaume para la
iniciación a la programacion. Si bien tiene tiempo sirve para empezar:
http://marmota.act.uji.es/mtp/pdf/python.pdf

aqui ya tiene bastante material para estudiar.

+1


Google nos presentó su apuesta más social, Google+1, un servicio del que se habían dicho muchas cosas y que, aparentemente, resultó ser un botón con el que recomendar páginas y anuncios que aparecen en los resultados de búsqueda y que, además, podíamos visualizar desde nuestro perfil (que se volvía público). Uno ve un botón para compartir y, lógicamente, enseguida uno piensa en el botón de Facebook, el famoso “me gusta”, que anda circulando a lo largo y ancho de la red.

Si les gusta el Blog o leen algo, no sean perezosos y presionen este botón. Si no lo ven es porque no están logeados, no sean ratas y logeense.

Es importante compartir el conocimiento y con estas pequeñas acciones lo hacemos!!!

Saludos!!