lunes, 22 de noviembre de 2010

Tercera jornada, 18 de noviembre

En esta ocasión tengo que ser mas breve que de costumbre, y es una pena porque la tercera jornada (jueves 18 de noviembre) dio para un post bastante más extenso.

Miguel Lara compartió con nosotros alguna de sus experiencias de cara a profundizar en el análisis de contexto.

Como nota curiosa fue mencionado un libro (me guardo para mi el título) que fue resumido como "el manual del perfecto hijo puta", con bastante acierto dicho sea de paso.

Hablamos de cómo las pequeñas empresas pasan por varias fases: supervivencia, consolidación, crecimiento. Así como de las matrices de reto/competencia y consciencia/conocimiento.

Por último, una frase más, para que un cambio tenga un buen resultado se tiene que cumplir la ecuación D * M * E >= Dzc * VelC donde,
  • (D) Deseo. Querer cambiar.

  • (M) Metodología. Ningún cambio sin método es cambio.

  • (E) Ejecución.

  • (Dzc) Distancia de la zona de confort.

  • (VelC) Velocidad del cambio.


Y nada más, hoy toca la cuarta jornada.

jueves, 18 de noviembre de 2010

En el curso 17 de noviembre de 2010

La jornada del miércoles 17 noviembre fue algo más controvertida que la primera. Desde el punto de vista meramente formativo continuamos avanzando en el ciclo de un proyecto. Pero fue en el apartado de experiencia donde aparecieron las frases más interesantes.

El powerpoint y las hojas de cálculo hacen gilipollas. Tanto las hojas de cálculo como las presentaciones se lo tragan todo.


Es un error el pensamiento de "hay que trabajar más horas y cobrar menos".


Cada vez hay menos responsables que hacen uso de "si no te parece bien te vas a la calle".


Y, finalmente, se utilizó el término "empresaurio".

En fin, una jornada interesante... veremos cómo marcha hoy.

miércoles, 17 de noviembre de 2010

Sonar 2.4

Tal y como anunció Simon Brandhof en la lista de correo desde hoy miércoles tenemos disponible la versión 2.4 de Sonar.

Las cuatro mejoras fundamentales que incluye son,
  • Posibilidad de personalizar el dashboar (más información)

  • Instalar y actualizar plugins desde el navegador gracias la Update Center (más información)

  • Definir reglas de arquitectura para, por ejemplo, prohibir el acceso a clases *.web.* from *.dao.* (más información)

  • Soporte de Maven 3


También mejora el rendimiento de Findbugs en, al menos, un 30%, que no está nada mal.

Retomando el trabajo activo en Sonar

Después de un tiempo algo alejado he vuelto a participar de forma activa en la forja de plugins de Sonar liberando una nueva versión de Total Quality Plugin compatible con el futuro Update Center.

En breve publicaré algunos posts comentando las novedades de Sonar y qué hace el plugin que ya lidero.

martes, 16 de noviembre de 2010

Experto en Dirección de Proyectos

Ese es el nombre del curso que empecé ayer impartido por Miguel Lara, Experto en Dirección de Proyectos. De este tema no es el primero al que asisto ni será el último (eso espero) y puedo decir que comienza con mejores perspectivas que los anteriores. No puedo juzgar aún si será mejor o peor, o si calará más o menos que los pasados pero, sí ha empezado mejor.

Durante las 4 horas de la jornada de ayer dio tiempo a poco más que presentarnos, hacer una introducción fijando los conceptos de partida, y un pequeño ejercicio en grupo.

Primer punto positivo para el curso, pude pensar en qué soy y cuáles son mis responsabilidades y tareas en la empresa. No voy a decir que soy pito-del-sereno senior porque para eso está mi inmediato superior, así que me quedo en junior. En serio, la respuesta que di cuando fui preguntado era simple, me dedico a lo que haga falta y sea más necesario en cada momento. Por suerte o por desgracia para mi me adapto con facilidad y puedo cubrir con más o menos competencia varios roles.

Y entrando en materia, hicimos un repaso de los conceptos necesarios para el aprovechamiento del curso. Competencias, Capacidades, Habilidades, Método Lógico, Aprendizaje, Objetivos conceptuales, procedimentales y actitudinales, etc.

Pasando por Confucio y una de sus citas,

Dime algo y lo olvidaré.
Muéstrame algo y lo recordaré.
Déjame hacer algo y lo comprenderé.


En fin, por ahora mantenemos las expectativas altas porque, entre otras cosas, logró mantener mi atención, cosa difícil por la hora, el cansancio, y el sueño.

El miércoles más.

lunes, 15 de noviembre de 2010

Joseba se echa al monte

Al fin Joseba se echa al monte y abre su blog de cocina josebacocinaconamigos.blogspot.com gracias a las enseñanzas adquiridas tras años de prueba-error alimentando a los amigotes :-)

Recomendable!

jueves, 4 de noviembre de 2010

Tratamiento 2.0

Hoy, 4 de Noviembre está siendo presentado el prototipo del desarrollo en el que hemos estado trabajando los últimos meses, Tratamiento 2.0.

Más información en Europa Press.



lunes, 27 de septiembre de 2010

ICT 2010

Hoy me he dado una pequeña alegría al leer que la empresa donde trabajo acude a ICT 2010 con el fin de participar en consorcios de proyectos europeos.

Visto en:


jueves, 26 de agosto de 2010

Aplicaciones imprescindibles en Samsung Galaxy S (i9000)

Después de conseguir permisos de root en el teléfono hay un par de aplicaciones que debes instalar, sí o sí, en la versión de Movistar al menos.

- Autokiller, fácil, te mantiene una cantidad de memoria disponible.
- Titanium Backup, te permite hacer copias de seguridad de la configuración, aplicaciones, etc.

Ambas aplicaciones se encuentran en el Android Market, son gratuitas (aunque admiten donativos), y su único requisito es ser root.

La segunda de ellas, Titanium Backup te facilitará la tarea de desinstalar las demos de los juegos que incluidas en SGS de Movistar. Ah! si no te lista todas las aplicaciones, pulsa en ¿Problemas? y responde afirmativamente. Él te lo solucionará.

martes, 24 de agosto de 2010

Consigue permisos de superusuario (root) en Samsung Galaxy S (i9000)

Aunque existen dos métodos, vía Odin3 y Recovery Mode, yo sólo hablaré del segundo de ellos, básicamente porque funciona bajo Linux ;-) y no pierdes datos ni aplicaciones al realizarlo.

1. Descarga el update.zip y guárdalo en /sdcard quedando finalmente /sdcard/update.zip (es muy importante).
2. Pasa al modo Recovery, apagando el teléfono y encendiéndolo pulsando a la vez Home + Subir Volumen + Encender.
3. Has iniciando en modo Recovery, selecciona con el botón de volumen la opción "apply sdcard:update.zip" y pulsa Home.
4. Listo, se reinicia sólo y tienes permisos de superusuario.

Durante el proceso se te instala busybox (en la versión 1.16). Si quieres actualizarlo (a la 1.17.1) pásate por:


Actualízalo a esa versión concreta, lo agradecerás más tarde.

El artículo original lo puedes encontrar en Samsung Galaxy Forums.

No podía evitarlo, el contador de "The Expendables"

Expendables Count
Via: Term Life Insurance

jueves, 12 de agosto de 2010

Samsung Galaxy S i9000

Bueno, finalmente he cambiado de móvil a un Samsung Galaxy S i9000 (Movistar). En los últimos tiempos he pasado de un Samsung Omnia i900 (Vodafone) con wm 6 y 6.5 a un HTC Magic (Vodafone) con android 1.5, 1.6, y 2.1.

Es otro mundo, un salto casi tan grande que pasar de WM 6.x a Android.

Iré poniendo a modo de guía todos los cambios que pueda necesitar, que los necesita (al menos el de movistar), aunque es fácil encontrarlos en otras páginas.

Los siguientes posts, ganar permisos de superusuario (root), parchearlo para mitigar el lag, etc.

martes, 13 de julio de 2010

Disponible el código fuente del ejemplo de Servicios Web con Apache CXF y Spring

Bueno, al fin está disponible el código fuente del ejemplo utilizado en los tres posts publicados hasta el momento sobre Servicios Web con Apache CXF y Spring. Es algo muy básico pero como guía no está mal del todo.

Puedes descargarlo de aquí.

Hasta el momento la serie de posts consta de tres entregas,
  • Cómo consumir un Servicio Web Apache CXF desde GWT
  • Añadiendo cabeceras SOAP a tus Servicios Web con Apache CXF
Momento en el que actualizaré el código fuente.

domingo, 11 de julio de 2010

Cómo probar tus Servicios Web con Apache CXF

Una vez hemos creado el servidor y el cliente con Apache CXF y Spring, vamos a preparar una aplicación web con el WS que nos haga de entorno de pruebas.

Como comentamos en el primero de los posts de la serie, el módulo svc-ws contendrá los ficheros necesarios para montar la aplicación. Así, situado en, src/main/webapp/WEB-INF tendremos el web.xml y el ws-ctx.xml.

Para el caso de ws-ctx.xml vemos,

 <?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint
id="servicio"
implementor="#servicioImpl"
address="/Servicio" />
</beans>


y un trozo de web.xml sería,

      <context-param>  
<param-name>contextConfigLocation</param-name>
<param-value>classpath:emilio/escobar/svc-ctx.xml
WEB-INF/ws-ctx.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


Pero la magia está en el pom.xml,

 <?xml version="1.0"?>  
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>svc</artifactId>
<groupId>emilio.escobar</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>svc-ws</artifactId>
<packaging>war</packaging>
<name>SVC :: WS</name>
<dependencies>
<dependency>
<groupId>emilio.escobar</groupId>
<artifactId>svc-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>2.5.6.SEC02</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>2.5.6.SEC02</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-core</artifactId>
<version>2.1</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-local</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.1</version>
<exclusions>
<exclusion>
<artifactId>spring-web</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-common-utilities</artifactId>
<version>2.1</version>
<exclusions>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>2.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>svc-ws</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>failsafe-maven-plugin</artifactId>
<version>2.4.3-alpha-1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.0.1.v20091125</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webAppConfig>
<contextPath>/svc-ws</contextPath>
</webAppConfig>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>9000</port>
<host>0.0.0.0</host>
</connector>
</connectors>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>


Los plugins failsafe-maven-plugin y jetty-maven-plugin son los encargados de arrancar el contenedor y de ejecutar los tests de integración.

Para este ejemplo he preparado un pequeño test que no hace gran cosa. Simplemente carga el contexto con el cliente,

 <?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<jaxws:client id="servicioClient"
serviceClass="emilio.escobar.api.Servicio"
address="http://localhost:9000/svc-ws/Servicio" />
</beans>


y lo ejecuta. El código del test,

 public class ServiceWSIT {  
private static final String MEMORY_PATH = "emilio/escobar/wsclictx.xml";
private static final String[] MEMORY = {MEMORY_PATH};
private static ConfigurableApplicationContext context;
private Servicio servicio;
@BeforeClass
public static void loadContext() {
context = new ClassPathXmlApplicationContext(MEMORY);
}
@AfterClass
public static void shutdown() {
context.close();
}
@Before
public void setUp() {
this.servicio = getBean(Servicio.class);
}
@Test
public void test() {
assertNotNull(servicio);
}
@Test
public void methodTest() {
final String nombre = "it-test";
final ParametroDTO param1 = new ParametroDTO();
param1.setKey("param1");
param1.setValue("1");
final ParametroDTO param2 = new ParametroDTO();
param2.setKey("param2");
param2.setValue("2");
final EntradaDTO entrada = new EntradaDTO();
entrada.setNombre(nombre);
entrada.setParametros(Lists.newArrayList(param1, param2));
final List<String> salida = servicio.operacion(entrada);
assertNotNull(salida);
assertTrue(salida.size() == 3);
assertEquals(nombre, salida.get(0));
assertEquals("param1-1", salida.get(1));
assertEquals("param2-2", salida.get(2));
}


Por último, a lo largo de la semana publicaré el enlace a la descarga del código utilizado hasta el momento.

lunes, 5 de julio de 2010

Servicios Web con Apache CXF / Spring / Maven (Cliente)

Ya hemos visto lo fácil que es montar el servicio web con Spring y CXF. Bien, el cliente es aún más sencillo.

 <jaxws:client id="servicioClient"   
serviceClass="emilio.escobar.api.Servicio"
address="http://localhost:9000/test-ws/Servicio" />


Luego sólo hay que solicitarlo como el resto de beans.

Sigue quedando pendiente subir los ficheros del proyecto pero lo haré en breve.

miércoles, 30 de junio de 2010

Servicios Web con Apache CXF / Spring / Maven (Servidor)

Desde hace unos meses vengo trabajando con servicios web y la verdad es que cada vez es más sencillo. Para montarlos usamos, Java 6, Maven 2.2.1, Spring Framework, Apache CXF, JAX-WS y JAXB.

El proyecto maven

Me voy a decantar en este momento por un proyecto multimódulo que contenga,

svc-api, con las interfaces del servicio y los dto.
svc-server, con la implementación del servicio.
svc-ws, módulo de tipo war con la declaración del servicio.

¿Por qué lo organizo así? Pues porque me aporta gran facilidad a la hora de desplegar el servidor y el cliente, sin más.

La interfaz del servicio

Un ejemplo simple de un servicio web que tiene una única operación que recibe un dto y devuelve una lista de cadenas es, para uno de los dto implicados,

 package emilio.escobar.api;

import java.io.Serializable;

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="entrada")
public class EntradaDTO implements Serializable {
private static final long serialVersionUID = -1266514434540369282L;
private String nombre;
private List parametros;

@XmlElement(name="nombre")
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@XmlElement( name="parametro" )
@XmlElementWrapper( name="parametros" )
public List getParametros() {
return parametros;
}
public void setParametros(List parametros) {
this.parametros = parametros;
}
}

la interfaz,

 package emilio.escobar.api;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;

@WebService
@XmlSeeAlso({EntradaDTO.class, ParametroDTO.class})
public interface Servicio {
@WebResult(name = "resultados")
List operacion(@WebParam(name = "entrada") EntradaDTO entrada);
}


y la implementación,

 package emilio.escobar.impl;

import java.util.List;
...

public class ServicioImpl implements Servicio {
List operacion(EntradaDTO entrada) {
...
}
}


Los ficheros de configuración

Como usamos Spring Framework y Apache CXF la configuración del servidor la hacemos en dos líneas,

 <id="servicioImpl" class="emilio.escobar.impl.ServicioImpl" />    <id="servicioWS" implementor="#servicioImpl" address="/Servicio" />  
En próximos post continuaré construyendo el ejemplo completo y adjuntaré todos los ficheros necesarios para probarlo.

Quedan pendientes cómo construir el cliente, cómo probarlo, cómo añadir elementos a la cabecera SOAP, y cómo usarlos desde GWT.

viernes, 4 de junio de 2010

GeNews estrena web

Ha pasado algo de tiempo pero la espera ha merecido la pena, GeNews estrena web. Desde un punto de vista práctico recomiendo una pasada por el vídeo donde se describen sus características principales.

GeNews es un desarrollo de la empresa andaluza Isotrol.

Por último, recordaros que existe un grupo en linkedIn y un canal en Vimeo.

lunes, 15 de marzo de 2010

HL7. Ya hemos aprendido algo más.

La semana pasada he asistido a un taller sobre HL7 (mensajería v2.6 y CDA R2) impartido en Sevilla por Álvaro Domínguez bastante interesante.

Para quien no lo sepa, HL7 es una organización de carácter internacional (HL7 Spain es una localización de la organización) y una serie de estándares que organizan el formato de los datos y el intercambio de información entre diferentes sistemas de información de salud.

Por lo que he podido ver en estas semanas, HL7 es un mundo que puede alcanzar un nivel de complejidad tan grande como se quiera ("puedes tardar más de dos semanas en modelar un mensaje"). Por suerte, existen algunos proyectos Java Open Source que vienen a facilitarnos la tarea,

Mirth, una familia de productos para el desarrollo, despliegue, pruebas, almacenamiento, etc. Un motor que permite el intercambio de mensajes entre sistemas y aplicaciones.

Open eHealth Integration Platform (IPF), una extensión de Apache Camel, que proporciona una capa de desarrollo basada en Groovy.

HAPI, un parseador para HL7.

NULE, un conjunto de herramientas y librerías para trabajar con HL7.

Y Open Healthcare Framework, subproyecto de Eclipse (gracias Andrés).

viernes, 12 de marzo de 2010

Cómo romper dependencias cíclicas entre paquetes.

Sonar, con su versión 2.0, viene a cubrir todas las necesidades de control de la calidad de los proyectos de desarrollo; proporcionando además, herramientas sufientes para solucionar los problemas encontrados.

Ya hemos comentado con anterioridad las ventajas de utilizarlo, que son muchas pero, con la nueva versión podemos incluso localizar con facilidad dónde se encuentran las dependencias cíclicas de tu código.

Por ejemplo, echando un vistazo al código de Apache Jackrabbit en su versión 2.1 de desarrollo,



podemos observar que éxisten dependencias entre paquetes.



También sabemos cuántos ciclos existen, 264, y el número de dependencias entre paquetes y entre ficheros a romper, 99 y 329 respectivamente.



Pulsando sobre los datos nos mostrará la matriz de dependencias,



donde buscaremos las que debemos romper, representadas con color rojo.



Bien, hasta aquí podríamos haber utilizado otras herramientas más comunes como JDepend pero, ¿cómo puedo saber cuáles ficheros tengo que tocar? Simplemente doble click sobre la celda de color rojo y nos mostrará los ficheros implicados.



A partir de aquí, puedes empezar a refactorizar.



Más información en,

http://sonar.codehaus.org/
http://nemo.sonarsource.org/
http://nemo.sonarsource.org/project/index/org.apache.jackrabbit:jackrabbit
http://nemo.sonarsource.org/drilldown/measures/org.apache.jackrabbit:jackrabbit?metric=package_cycles
http://nemo.sonarsource.org/drilldown/measures/org.apache.jackrabbit:jackrabbit?metric=package_cycles&rids[]=32189

jueves, 25 de febrero de 2010

Portal3.0, Liferay5.2.3CE, GateIn3.0

Va llegando el momento de ir mostrando características de tres productos con similares orientaciones y funcionalidades. Los tres están pensados para lo mismo, construir portales de forma más o menos sencilla y modular, con dos diferencias fundamentales:


El por qué de estas diferencias es sencillo, Portal3.0 no integra un gestor de contenidos porque existen muchos WCM/DCM/CMS más capaces que los que proporcionan el resto soluciones. Portal3.0 no es una implementación de Portlets porque ya existen (Liferay y GateIn son un gran ejemplo).

En próximos post expondré las razones de ambas diferencias, repasando por qué Portal3.0 no implementa Portlets y por qué no integra un gestor de contenidos.

martes, 23 de febrero de 2010

Portal3.0

Desde hace algunos posts vamos anunciando proyectos en los que se utiliza Portal3.0 como motor de ejecución, herramienta de administración y marco de trabajo. No voy a entrar en detalles aún pero, algunos detalles curiosos.

Struts2, 79.396 líneas de código, 1.145 clases, 2,7 de complejidad media por método, 17,4 de complejidad media por clase, 19.908 de complejidad, 20,1% de comentarios, y un 26,2% de cobertura de código.

Portal3.0, 83.597 líneas de código, 1.803 clases, 1,7 de complejidad media por método, 8,6 de complejidad media por clase, 15.560 de complejidad, 23,4% de comentarios, y un 27,4% de cobertura de código.

GateIn - Portal, 75.774 líneas de código, 1.274 clases, 2,6 de complejidad media por método, 10,5 de complejidad media por clase, 13.399 de complejidad, 8,4% de comentarios, y un 40,1% de cobertura de código.

Portal3.0 ha alcanzado un grado de madurez importante :-)

lunes, 22 de febrero de 2010

Una más, Consejería de Cultura de la Junta de Andalucía

Desde hace unas semanas está funcionando el nuevo portal institucional de la Consejería de Cultura de la Junta de Andalucía, pero no fue hasta la pasada cuando fue presentado oficialmente por la Consejera Rosa Torres.

En esta ocasión, utilizamos Portal3.0 para la presentación y la administración de la web, OpenCms para la gestión de contenidos, Google Maps para el Mapa de Centros, y un fuerte trabajo en la integración de los sistemas de información de la Consejería.

Más información sobre la web y la presentación en:

Un nuevo caso de éxito para Portal3.0, desarrollado por Isotrol SA.

jueves, 11 de febrero de 2010

Mercurio. Plataforma Multimedia Extremeña.

Ayer 10 de Febrero de 2010 fue presentada la web Mercurio (http://mercurio.educarex.es) por la Consejera de Educación de la Junta de Extremadura, Eva María Pérez.

Sin profundizar en exceso, ha sido desarrollado con tecnología Java, Portal3.0 para la web, GWT para la herramienta de administración y catalogación de recursos basada en LOM-ES, un repositorio de objetos digitales para su almacenamiento, ffmpeg para la codificación de vídeo y Red5 para su emisión en directo.

Más información sobre la web y la presentación en:

Esta será la primera de las entradas en las que iré presentando los proyectos en los que trabajo de una u otra manera. El siguiente en breve :-)

Actualización: Gracias Ráez, Red5 para la emisión.