Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

PROGRAMANDO EN .NET

Code Camp Tarragona 2009

Agosto 27th, 2009 - [Enlace local]

Gracias a las comunidades de .NET se va a organizar un evento de 2 días (17 y 18 de septiembre) totalmente gratuito en Tarragona con multitud de ponencias sobre la plataforma .NET y Mono.Así que si podéis asistir no os lo perdáis ;)Web oficial Code Camp

» Leer más, comentarios, etc...

PROGRAMANDO EN .NET

Novedades .NET Framework 4.0

Agosto 26th, 2009 - [Enlace local]

Aún está en beta pero ya tenemos un documento de MSDN con las novedades que traerá el Framework 4.0:What's New in the .NET Framework 4.0Habrá que seguirlo con atención porque trae novedades jugosas :)

» Leer más, comentarios, etc...

Blog de Julio César Pérez Arques

Tip Eclipse: Renombrar atributo junto a sus métodos get/set

Agosto 14th, 2009 - [Enlace local]

Uno de los refactorings que más me gustan de Eclipse es el de Renombrar sobre el propio editor de código, sin necesidad de usar un diálogo o nueva pantalla. El genial Alt+May+R.



Pero como soy muy maniático con los nombres, muchas veces me da por cambiar el nombre de los atributos, por lo que tengo que ir a sus correspondientes métodos get/set y renombrarlos a mano. En el colmo de la perrería, a veces lo que hago es borrarlos y volver a generarlos automáticamente.



Ahora, con Eclipse 3.5 Galileo es mucho más sencillo. Basta con pulsar 2 veces el mismo atajo Alt+May+R sobre el nombre del atributo y aparecerá un diálogo con las opciones de renombrar también sus métodos get y set.





Encima tiene memoria y te guarda tus preferencias. Esta gente piensa en todo!

» Leer más, comentarios, etc...

Blog de Julio César Pérez Arques

Cómo configurar el uso de memoria de un servidor en Eclipse

Agosto 14th, 2009 - [Enlace local]

Antes de irme de fin de semana -qué ganas- dejo una chuletilla sobre cómo modificar la configuración de arranque y el uso de memoria de un servidor en Eclipse y en general.



Recuerda que la JVM usa 2 tipos de memoria. La memoria Heap donde se crean los objetos y que es gestionada por el GargabeCollector que se encarga de liberar memoria en caso necesario. Y la memoria PermGen que se utiliza principalmente para cargar las definiciones de las clases de forma permanente, pero también para trabajar con código nativo.



1) En Eclipse, ir a: Run -> Run configurations -> TuServidor -> Arguments -> VM Arguments



2) Para evitar el clásico java.lang.OutOfMemoryError: Java Heap space, usar las opciones de la VM:



-Xms64m

-Xmx256m



Es un ejemplo que asigna 64mb a la memoria heap de inicio y le permite crecer hasta un máximo de 256mb. Esta configuración debería ser más que suficiente si estás en desarrollo y sólo tienes una aplicación configurada para arrancar en el servidor. Antes de incrementarla, tómate unos segundos para meditar si el fallo pudiera ser causa de un memory leak.



3) Para evitar el igualmente clásico java.lang.OutOfMemoryError: PermGen space, usar las opciones de la VM:



-XX:PermSize=64m

-XX:MaxPermSize=128m



Es un ejemplo que asigna 64mb a la memoria perm de inicio y le permite crecer hasta un máximo de 128mb. De nuevo, este ejemplo debería ser más que suficiente si sólo tienes un par de aplicaciones configuradas en el servidor. Aunque todo dependerá del número de despliegues en caliente que realices habitualmente sin reiniciar el servidor.



Otra opción es intentar que el garbage collector recicle la memoria permgen. Para ello prueba a activar el recolector concurrente con los siguientes parámetros:



-XX:+UseConcMarkSweepGC

-XX:+CMSPermGenSweepingEnabled

-XX:+CMSClassUnloadingEnabled





Finalmente un par de enlaces a las páginas oficiales de opciones de la VM y la guía de tuning del gc de la jvm 5.

» Leer más, comentarios, etc...

Blog de Julio César Pérez Arques

Primeras impresiones con Pentaho Data Integration (Kettle)

Agosto 14th, 2009 - [Enlace local]

UPDATE 090814: Se añade información sobre la ejecución de una transformación y su impact.



A veces en un proyecto software es necesario extraer, transformar y cargar información de una o varias fuentes de datos. A este proceso se le conoce como ETL.



Los ejemplos típicos de procesos ETL incluyen (i) extracciones de datos desde ficheros con diversos formatos, bases de datos o servicios web, (ii) transformaciones como traducciones de valores, calculos de nuevos valores, cruces de fuentes de datos, filtrar registros, generación de claves, división de columnas o pivotar filas a columnas y viceversa, y (iii) cargas a ficheros o tablas de bases de datos.



La tarea puede llegar a ser bastante compleja, no sólo por la diversidad de las fuentes de datos sino por la variedad de transformaciones a realizar. Sobre todo en el caso de las grandes organizaciones, las llamadas Enterprise, donde cada departamento funciona como le da la gana.



Esta semana me ha tocado (lo que tienen las vacaciones, las de los demás claro) realizar un proceso ETL relativamente simple. Así que he aprovechado para probar la aplicación Pentaho Data Integration, también conocida como Kettle o Spoon, que forma parte de la suite opensource Pentaho de Business Intelligence.



La instalación es muy sencilla. Es una aplicación Java, así que necesita tener instalada una JVM. Por lo demás es simplemente descargar, descomprimir y ejecutar el script de arranque.



Con Kettle puedes crear transformaciones y trabajos (jobs) de forma visual arrastrando, uniendo y configurando los distintos pasos.



Una transformación incluye pasos de extracción, transformación y carga del tipo anteriormente comentado y muchos más. Cada uno de estos pasos se puede previsualizar por separado. Una vez diseñada la transformación, se puede validar, ejecutar, debugear, monitorizar, analizar su impacto en el rendimiento y obtener el código sql que genera.





Un trabajo te permite configurar cómo y cuando se ejecutará una transformación. Sus pasos incluyen, a parte de ejecutar una transformación existente, planificar el inicio, abortar, enviar y recibir emails, operaciones con ficheros, ejecutar un http get, evaluar condiciones sobre ficheros, servidores y tablas, ejecutar scripts sql, javascript y shell, validar xml, escribir log y usar ftp, entre otros.





Conviene tener en cuenta el impacto de la transformación sobre la base de datos a la hora de planificar su ejecución en Producción. Normalmente son tareas muy pesadas que pueden afectar al rendimiento general durante muchos minutos. Así que deben ser ejecutadas en horario de mínima actividad.



El uso de Kettle es muy intuitivo y ágil desde el principio, como se puede en las flash demos que hay disponibles en la wiki. De hecho, en menos de una hora ya tenía hecha una primera versión de mi transformación a la que sólo le faltaban algunos detalles de formatos. Para ser mi primera vez estuvo muy bien!



En la wiki también existe una buena cantidad de documentación. Además existe una guía de usuario en pdf bastante completa que merece la pena tener a mano como referencia.



Una sorpresa que me llevé fue que está traducida en parte al castellano. Aunque como todo no puede ser perfecto, el típico botón Ok o Aceptar ha sido traducido por Vale...



En resumen, Kettle (Spoon) me ha encantado. Es muy completo, sencillo y eficaz. Me va a hacer la vida muy fácil cuando tenga que realizar tareas de ETL.

» Leer más, comentarios, etc...

Blog de Julio César Pérez Arques

Chuleta Maven

Agosto 5th, 2009 - [Enlace local]

UPDATE 20100126: Añadido cómo configurar el máximo de memoria heap



A continuación una chuleta con buena parte de lo que llevo aprendido usando Maven estos dos últimos meses más algunas referencias.



> 1. CREAR PROYECTOS



Crear un proyecto jar


$ mvn archetype:create -DgroupId=com.example -DartifactId=example-jar-project



Crear un proyecto war

$ mvn archetype:create -DarchetypeartifactId=maven-archetype-webapp -DgroupId=com.example -DartifactId=example-war-project





> 2. ECLIPSE



Configurar plugin eclipse para descargar fuentes y javadocs de las dependencias




<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-eclipse-plugin</artifactId>

<!-- Ojo, la versión 2.6 tiene bugs con AJDT -->

<version>2.5</version>

<configuration>

<downloadSources>true</downloadSources>

<downloadJavadocs>true</downloadJavadocs>

</configuration>

</plugin>



Crear variable M2_REPO

Ir a Window -> Preferences -> Java -> Build path -> Classpath variable -> New

Name: M2_REPO

Path: /ruta/a/tu/.m2/repository



Generar ficheros de configuración de un proyecto jar Eclipse

$ mvn eclipse:eclipse



Generar ficheros de configuración de un proyecto war Eclipse

$ mvn eclipse:eclipse -Dwtpversion=1.5



Cargar un proyecto en Eclipse

Ir a File -> Import -> General -> Existing project into Workspace -> Select root directory



Borrar ficheros de configuración proyecto Eclipse

$ mvn eclipse:clean



Ahora más que nunca, se recomienda no subir a CVS o similar los ficheros de configuración del proyecto en el IDE.







> 3. CONFIGURACIÓN DE PLUGINS MÁS COMUNES



Configurar un plugin para este pom y sus hijos


En build -> pluginManagement -> plugins



Configurar un plugin sólo para este pom

En build -> plugins



Configurar encoding y versión java de compilación



<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>2.0.2</version>

<configuration>

<encoding>UTF-8</encoding>

<source>1.4</source>

<target>1.4</target>

</configuration>

</plugin>



Configurar plugin surefire para ignorar fallos de tests, definir patrones de nombres de tests aceptados y configurar propiedades de sistema (locale) durante la ejecución de los tests



<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.4.3</version>

<configuration>

<testFailureIgnore>true</testFailureIgnore>

<includes>

<include>**/*Test.java</include>

<include>**/*Tests.java</include>

</includes>

<systemProperties>

<property>

<name>user.language</name>

<value>es</value>

</property>

<property>

<name>user.country</name>

<value>ES</value>

</property>

</systemProperties>

</configuration>

</plugin>





> 4. COMANDOS ÚTILES EN EL DÍA A DÍA



Borrar carpeta de construcción


$ mvn clean



Ejecutar tests

$ mvn test



Construir proyecto

$ mvn package



Instalar proyecto en tu repositorio local

$ mvn install



Instalar (desplegar) proyecto en el repositorio de la organización (necesita configuración)

$ mvn deploy



Ejecutar Maven saltándose los tests (unitarios e integración)

$ mvn xxxxxxx -Dmaven.test.skip=true



Mostrar el stacktrace de excepción

$ mvn xxxxxxx -e



Mostrar información de debug

$ mvn xxxxxxx -X



Instalar una libreria de terceros en tu repositorio local

mvn install:install-file -Dfile=ruta/a/fichero/jar -DgroupId=com.example -DartifactId=nombre_libreria -Dversion=x.y.z -Dpackaging=jar



Instalar (desplegar) una libreria de terceros en el repositorio de la organización (necesita configuración)

$ mvn deploy:deploy-file -Dfile=ruta/a/fichero/jar -DrepositoryId=id_repositorio -Durl=url_repositorio -DgroupId=com.example -DartifactId=nombre_libreria -Dversion=x.y.z -Dpackaging=jar



Ver pom efectivo (suma de poms padres)

$ mvn help:effective-pom



Ejecutar Maven en modo offline

$ mvn xxxxxxx -o



Preparar Maven para poder ejecutarse en modo offline

$ mvn dependency:go-offline



Ejecutar Maven con máximo de memoria heap configurable (ejemplo con 512m)

$ mvn xxxxxxx -DXmx512m

o editar la variable de sistema MAVEN_OPTS=-Xmx512m





> 5. DEPENDENCIAS



Ver jerarquía de dependencias


$ mvn dependency:tree



Ver dependencias en orden alfabético

$ mvn dependency:resolve



Analizar uso de dependencias

$ mvn dependency:analyze







> 6. RECURSOS



Ciclos de vida


http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html



Estructura estándar de carpetas

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html



Propiedades

http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide



Pom

http://maven.apache.org/ref/2.2.1/maven-model/maven.html



Plugins más comunes

http://maven.apache.org/plugins/index.html



Documentación oficial

http://maven.apache.org/guides/index.html



Libro gratuito: Maven La Guía Definitiva

http://www.sonatype.com/books/maven-book/reference/



Gestor de repositorios Nexus

http://nexus.sonatype.org/index.html

» Leer más, comentarios, etc...

Información legal y técnica