2012-02-27

Subir cambios al repositorio mercurial

Una vez que hemos instalado el plugin de mercurial en springsource tool suite y que hemos creado un repositorio en bitbucket, podemos subir nuestros cambios a nuestro repositorio de mercurial.

Si nos posicionamos en la carpeta raíz de nuestro proyecto y hacemos click con el botón derecho aparecerá el dialogo contextual de eclipse.

Desde aquí podemos seleccionar "Team - Share project..." y en el diálogo seleccionamos Mercurial.

Después seleccionamos "Team - Commit..." y seleccionamos los ficheros que queremos subir al repositorio. Debemos también poner un mensaje al commit.

Por último seleccionamos "Team - Commit...", rellenamos la URL, usuario y password de nuestro repositorio de bitbucket y le damos al botón de finalizar.

Los nuevos cambios en los ficheros apareceran en nuestro repositorio y los podremos compartir con el resto de nuestro equipo.

Sencillo, ¿verdad?


2012-02-26

Crear un nuevo repositorio en bitbucket

Una vez nos hemos abierto una cuenta en bitbucket, para crear un nuevo repositorio lo único que debemos hacer es ir a "Repositories - create repository" y rellenar el formulario que se nos muestra.

Realmente fácil.


2012-02-25

Instalar el plugin de mercurial en springsource tool suite

El plugin de mercurial no está disponible directamente como una extensión de SpringSource Tool Suite, por lo que se debe instalar a traves del eclipse marketplace.

Para hacer esto debemos ir al menú "Help - Eclipse Marketplace..." y allí buscar "mercurial".

Una vez localizado le damos al botón "Install" y el plugin se instalará.

Es muy sencillo.


2012-02-24

Instalar el eclipse marketplace client en springsource tool suite

A veces tendremos que instalar un plugin de eclipse en nuestra instalación de SpringSource Tool Suite.

Si el plugin que queremos instalar no está disponible como una extensión de SpringSource Tool Suite entonces lo más cómodo es usar el eclipse marketplace client para instalarlo.

Eclipse marketplace client es un módulo de eclipse que podemos instalar directamente en STS desde "Help - Install New Software...".

Seleccionamos "Indigo" en "Work with..." y después podemos encontrar el marketplace client en el apartado "General Purpose Tools".

Es muy fácil.


2012-02-23

Instalar el control de versiones mercurial

A la hora de desarrollar es importante tener un sistema de control de versiones de nuestro codigo.

Para esto podemos usar un sistema de control de versiones distribuido como es mercurial.

Lo podemos descargar desde la página http://mercurial.selenic.com/downloads/

Instalarlo es muy sencillo, basta con ejecutar el programa.

Después podemos registrarnos en Bitbucket, un servicio de internet que nos permitirá, de forma gratuita, alojar nuestro código en sus servidores usando mercurial.
El código alojado en este servidor puede ser privado o público y accesible a todo el mundo.

2012-02-21

Usar el api de youtube con jquery

Al igual que ya hemos hecho con el api de twitter, es posible usar el api de youtube junto con jquery, en concreto con sus potentes capacidades ajax, para mostrar los videos próximos a nuestra zona de busqueda sobre el mapa de nuestro sitio web.

El uso de ajax con jquery es muy simple como vamos a ver con la siguiente función:


function buscarYouTube(distancia, lat, lng) {
    var youTubeUrl = "https://gdata.youtube.com/feeds/api/videos?alt=jsonc&v=2&max-results=50&orderby=published&location=" + lat + "," + lng + "&location-radius=" + distancia + "m";
    $.ajax({
        url: youTubeUrl,
        cache: false,
        dataType: "jsonp",
        beforeSend: mostrarBuscando(),
        complete: ocultarBuscando(),
        success: function(data) {
            if (data) {
                var innerData = data.data;
                if (innerData) {
                    var items = innerData.items;
                    if (items) {
                        var len = items.length;
                        for (var i = 0; i < len; i++) {
                            var item = items[i];
                            if (item) {
                                parsearYouTubeItem(item);
                            }
                        }
                    }
                }
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            //Tracking error youTube
            _gaq.push(['_trackEvent', 'Error', 'youTubeText', textStatus]);
            _gaq.push(['_trackEvent', 'Error', 'youTubeError', errorThrown]);
        }
    });
}


En primer lugar construimos la URL de búsqueda en youtube con los parámetros que queremos, en este caso, la latitud, la longitud, y el radio de búsqueda (en metros).

var youTubeUrl = "https://gdata.youtube.com/feeds/api/videos?alt=jsonc&v=2&max-results=50&orderby=published&location=" + lat + "," + lng + "&location-radius=" + distancia + "m";

El resto ya sabemos como hacerlo.


Hay una pequeña demo online en http://www.nioos.com


2012-02-18

Configuración básica de ehcache en tomcat

Después de añadir el filtro ehcache a nuestra aplicación web debemos configurarlo.

Para hacerlo debemos añadir un fichero que se llame "ehcache.xml" a nuestra aplicación web.
Este fichero debe estar accesible a en el classpath de la aplicación web.

Este fichero "ehcache.xml" tendra un contenido parecido al siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
  <diskStore path="java.io.tmpdir"/>
  <defaultCache
    maxElementsInMemory="20"
    eternal="false"
    timeToIdleSeconds="60"
    timeToLiveSeconds="3600"
    overflowToDisk="true"
  />
  <!-- Page and Page Fragment Caches -->
  <cache name="simplePageCachingFilter"
    maxElementsInMemory="20"
    eternal="false"
    timeToIdleSeconds="3600"
    timeToLiveSeconds="86400"
    overflowToDisk="true">
  </cache>
</ehcache>

El elemento diskStore indica el directorio donde se almacenarán los ficheros creados por la cache cuando sea necesario.

El elemento defaultCache contiene la configuración de la cache por defecto.

El elemento cache es la configuración de cada cache en concreto.
El valor del parámetro name debe coincidir con el valor del parámetro cacheName del filtro previamente añadido.
El valor del parámetro maxElementsInMemory indica el máximo número de objectos almacenados en memoria.
El valor del parámetro timeToIdleSeconds indica el número de segundos que deben pasar desde la última vez que se accede a un objecto concreto en la cache para que ese objecto sea borrado de la cache.
El valor del parámetro timeToLiveSeconds indica el número de segundos que deben pasar para que ese objecto sea borrado de la cache, no importa si se ha accedido recientemente al objeto en cache.
El parámetro overflowToDisk indica si, cuando se supera el número máximo de objectos almacenados en memoria, maxElementsInMemory, los objectos más antiguos se deben almacenar en disco.

No es dificil y las ventajas son muchas.

2012-02-17

Añadir un filtro a nuestra aplicación web en tomcat

Para añadir un filtro a nuestra aplicación web en tomcat debemos editar el fichero web.xml que se encuentra en el directorio WEB-INF de nuestra aplicación web.

Por ejemplo, si queremos añadir un filtro que comprima todas las páginas que servimos (aumentando de esta forma el ancho de banda disponible para servir a un mayor número de usuarios), debemos añadir lo siguiente al fichero web.xml

<filter>
  <filter-name>simplePageCachingFilter</filter-name>
  <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
  <init-param>
    <param-name>cacheName</param-name>
    <param-value>simplePageCachingFilter</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>simplePageCachingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

La etiqueta "filter" contiene el nombre del filtro (filter-name) que debe coincidir con el nombre que aparece en "filter-mapping".
La etiqueta "filter" también contiene la clase Java que implementa el filtro, esta clase debe estar disponible en el classpath de nuestra aplicación web (como una librería en el directorio "WEB-INF/lib" o como una clase compilada en el directorio "WEB-INF/classes", si se está usando maven las librerías de las depedencias se copian al primer directorio automáticamente).
Por último, dentro de esta etiqueta "filter" se puede añadir los parámetros de inicio "init-param" necesarios para configurar el filtro.

La etiqueta "filter-mapping", además del nombre del filtro (filter-name) tiene el parámetro "url-pattern", que indica sobre qué urls se aplicará el filtro (en el ejemplo "/*" significa todas las urls).

2012-02-16

Añadir una dependencia con Maven

Añadir una dependencia en nuestro proyecto usando Maven es muy sencillo si conocemos los parámetros de la dependencia que queremos añadir:
  • Group Id
  • Artifact Id
  • Version
Si no conocemos estos parámetros, que es lo normal, habitualmente los encontraremos en la sección de descargas de la librería que queremos añadir, o bien, en algún servicio de búsqueda en maven como puede MvnRepository.

Como veis es algo bastante sencillo.


2012-02-04

Comparativa - Tomcat en CentOS y Debian

¿Que sistema linux es capaz de tratar más peticiones por segundo?

Para esta comparativa no se ha realizado ninguna prueba exhaustiva, simplemente se ha usado el mismo hardware (virtual), las mismas versiones de Tomcat y de java, y la misma página web servida por ambos entornos.

La comparativa se ha realizado usando 50000 peticiones simulando hasta 5 usuarios concurrentes con ApacheBench.

Las características de las máquinas son:
  • 256 MB RAM
  • 1 CPU virtual
La versión de java usada ha sido jdk1.6.0_26

La versión de Tomcat ha sido la 7.0.19

La versión del kernel de la máquina CentOS ha sido 2.6.18-274.17.1.el5
La versión del kernel de la máquina Debian ha sido 2.6.32-5-686

Estos son los resultados obtenidos:

ConcurrenciaPeticiones por Segundo CentOSPeticiones por Segundo Debian
11778,771127,55
22122,021389,49
32173,911476,01
42216,071544,4
52178,351493,23

Los números obtenidos no sirven como una prueba de rendimiento real del sistema, pero son válidos para realizar una comparativa.

Lo que sí podemos ver de forma muy clara en el gráfico es que Tomcat corriendo en linux CentOS sirve un mayor número de peticiones por segundo que cuando corre en linux Debian.