Eclipse Kepler, nueva versión del IDE para Java más utilizado

Eclipse Kepler, nueva versión del IDE para desarrollar en JAVA, PHP, etc.

Recientemente se ha liberado la nueva versión 4.3 del IDE Eclipse Kepler. En ella han colaborado simultáneamente 71 proyectos que en total están compuestos por 58 millones de líneas de código. Actualmente en uno de nuestros proyectos estamos utilizando Juno, la anterior versión bastante inestable, y estamos dudando en cambiar o no a Kepler. Además, está el eterno debate de qué IDE utilizar ¿es hora de cambiar a Netbeans? ¿o podemos dar una nueva oportunidad a Kepler? Como novedades destacan principalmente:

  • Integración con Git (software de control de ve rsiones)
  • Se ha mejorado BIRT para Eclipse, herramienta de reporting y business intelligence desarrollada en JAVA, de forma que ahora soporta nuevos orígenes de datos que no sean SQL.
  • Integración con Linux Tools, herramienta que dispone de varios frameworks para el desarrollo de aplicativos para Linux.
  • Se han realizado mejoras en el JDT (Java Development Tools), como correcciones de algunos errores, mejoras en JUnit, logs de debug, etc.
  • Integración de WTP con Maven.
  • Orión 3.0, nueva versión del editor de código fuente en versión web desarrollada íntegramente en javascript.

Eclipse Kepler, nueva versión del IDE para desarrollar en JAVA, PHP, etc.

Si ya has probado la Eclipse Kepler ¿qué opinas?

Más info | Eclipse Kepler

Sin Comentarios

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

Entre otras cosas, la plataforma SSIS de Microsoft (SQL Server Intregation Services) nos permite programar un flujo de tareas secuenciales o paralelas que se encarguen de la extracción y carga de datos desde diferentes orígenes, transformaciones, importación y exportación, ejecución de otras aplicaciones, etc. Muy utilizado como complemento o directamente como herramienta ETL, una tarea muchas veces recurrida en estos entornos es la de envío de correos con alertas, trazas, mensajes o informes adjuntos con los datos procesados. En esta última situación resulta muy recomendable comprimir previamente cualquier documento adjunto, tanto para agilizar el proceso de envío, como para sortear límites técnicos, como la configuración del tamaño máximo de ficheros adjuntos en el gestor de correo de SQL Server, al que normalmente no se tiene acceso en un proyecto convencional.

Para poder configurar una tarea que comprima un fichero necesitamos tener instalado previamente en nuestro servidor una herramienta de compresión: Winrar, Winzip, 7zip, etc. (sí, parece obvio, pero en entornos de producción este tipo de requerimientos suele ser complejo por unas cosas o por otras). En nuestro caso, vamos a utilizar como ejemplo la open source 7zip que podéis descargar gratuitamente. Si se va a utilizar otro programa simplemente hay que acudir a la documentación y ver los parámetros que necesita para invocarlo desde línea de comandos.

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

En SSIS disponemos de la “tarea” EXECUTE PROCESS TASK que nos permite ejecutar aplicaciones desde línea de comandos o ficheros batch. Tiene tres pestañas, General (donde podemos especificar nombre y descripción), Process (la más importante, donde vamos a indicar el programa o batch a lanzar y sus argumentos) y Expressions, muy útil para  modificar dinámicamente alguno de los parámetros que vamos a ejecutar por línea de comandos. Situándonos en la pestaña de Process, necesitamos configurar:

  • Executable: ruta absoluta del .exe de la herramienta de compresión (7zip, winzip, winrar, etc)
  • Arguments: parámetros para comprimir un fichero (cambian en función de la herramienta de compresión). En el caso de 7zip,  que es el que se ha usado, se pasan 4 parámetros:

7zip

Para configurar con 7zip:

a -tzip c:UsersMiUsuarioDesktopprueba.zip C:UsersMiUsuarioDesktopprueba.txt

  • a: para utilizar la función ADD, que nos permite crear un nuevo fichero comprimido
  • –tzip: formato de compresión. El parámetro es –t, seguido del formato: 7z, zip, gzip, bzip2 o tar (-t7z, -tgzip, etc).
  • Ruta destino: ubicación y nombre del fichero comprimido que vamos a generar
  • Ruta origen: fichero origen a comprimir

Winrar

En el caso de que utilicemos Winrar la forma de invocarlo desde línea de comandos sería:

a m1 c:UsersMiUsuarioDesktopprueba.zip C:UsersMiUsuarioDesktopprueba.txt

  • a: para utilizar la función AGREGAR, que agrega los ficheros y las carpetas especificadas a un archivo
  • m1: método de compresión. Escala del 0 al 5, donde el 5 es el de mayor rendimiento y el 3 es el normal (http://www.winrar.es/soporte/manual/HELPSwM)
  • Ruta destino: ubicación y nombre del fichero comprimido que vamos a genera.
  • Ruta origen: fichero origen a comprimir

Configurar tarea para comprimir fichero en proceso SSIS (SQL Server Integration Services)

Por otro lado, comentar el parámetro  WindowStyle, para el que es recomendable ponerlo a HIDDEN con el objeto de evitar que salga algún popup para confirmar la operación y permitir la automatización completa del proceso.

Al flujo de nuestro procedimiento podremos añadirle el envío de un correo, copiar el fichero comprimido en un repositorio, etc. Cabe destacar que al disponer del 100% de funcionalidad de 7zip (o el programa de compresión utilizado), tenemos a nuestro alcance cualquier opción del programa, como asegurar el fichero con contraseña.

2 Comentarios

Implementar Google Maps en aplicación Android

Desarrollar aplicación Android con Google Maps

La forma más ágil, cómoda y sencilla de implementar Google Maps en una aplicación Android es utilizando la propia app de Google Maps mediante un Intent. Si no es un requisito que Google Maps se explote desde tu aplicación, olvídate de tener que desarrollar todas las funcionalidades, como calcular rutas, capas de datos, etc., con sólo pasar un par de parámetros podrás invocar un activity nuevo de Maps y aprovechar todo su potencial.

Tal y como indican en la documentación oficial de Android, el Intent de Google Maps es un ACTION_VIEW al que se le puede pasar una uri con parámetros, que fundamentalmente son de tres tipos:

Desarrollar aplicación Android con Google Maps

  • Ubicación: ya sean longitud y latitud, o bien la dirección tal cual: calle Gran Vía 13 o tipo de negocio “pizzería en Madrid”
  • Funcionalidad: uno de los aspectos más útiles, y es que además de centrar el mapa en la ubicación indicada, puedes hacer que muestre un label con un literal que puedes especificar para ofrecer más información. Este label también incluye un botón para establecer una ruta guiada por GPS.
  • Visualización: puedes especificar el zoom mediante z=[2-23], donde 23 es el más cercano.

La uri puede tener la siguiente estructrua:

  • geo:latitud,longitud
  • geo:latitud,longitud?z=zoom
  • geo:0,0?q=direccion+especifica
  • geo:0,0?q=negocio+ciudad
  • geo:0,0?q= latitud,longitud (label+mas+informacion)

Un código de ejemplo para invocar el Intent de Google Maps para Android podría ser el siguiente:

String geo = “geo:0,0?q=22222 ,66666(Ubicación de Ejemplo)&z=5”;

Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(geo));

startActivity(i);

Si además quieres especificar que siempre se utilice la aplicación de Google Maps, en vez de que salga el popup para seleccionar qué app quieres usar en caso de que tengas varias de mapas, puedes meter esta línea antes del startActivity:

i.setClassName(“com.google.android.apps.maps”, “com.google.android.maps.MapsActivity”);

 

Sin Comentarios

SQL Server Parameter Sniffing: error timeout con DataAdapter.Fill en .NET

SQL Server Parameter Sniffing: error timeout con DataAdapter.Fill en .NET

Si estás invocando un procedimiento almacenado en SQL Server al que le pasas uno o varios parámetros y observas que el tiempo de ejecución es mucho mayor que si ejecutas manualmente la query, probablemente estés ante un caso de Parameter Sniffing. Este tipo de problema sucede cuando el gestor de la BD intenta reutilizar un plan de ejecución anterior recuperándolo de la caché aplicando  los nuevos valores de los parámetros recibidos.

El plan de ejecución de un procedimiento almacenado en SQL Server no se genera al compilarlo, si no que se crea la primera vez que se ejecuta el SP y después se reutiliza en las sucesivas llamadas. Esto puede dar lugar a ejecuciones con una demora de tiempo muy elevada, ya que puede ser que el plan de ejecución de la primera consulta no sea tan óptimo para otras.

La forma de solucionarlo es utilizar variables locales en lugar de los propios parámetros en la query del procedimiento almacenado.  Creamos una nueva variable del mismo tipo y tamaño que cada parámetro, y le asignamos su valor. Por ejemplo:

CREATE PROCEDURE SP_N4GASH

@fecha Date,

@categoria int

AS

DECLARE @nuevaFecha Date

DECLARE @nuevaCategoria int

SET @nuevaFecha =@fecha

SET @nuevaCategoria=@categoria

SELECT […]  FROM […]

WHERE aud_fecha = @nuevaFecha

AND catID = @nuevaCategoria

GO

En mi caso me apareció este error desde una aplicación C# desde la que invocando a un procedimiento almacenado y metiéndolo en un DataTable mediante DataAdaptar.Fill me arrojaba un error de TimeOut. La solución rápida y mala de este error desde la aplicación web es asignar varios segundos al parámetro timeout del SQLCommand, y aunque esto evita que salte el error y se detenga el proceso, no soluciona el problema de la demora de tiempo, donde a veces se presentan diferencias de más de una hora respecto a la solución desde T-SQL.

Sin Comentarios

Flash Builder 4.6 – Error Java Heap Space

Flash Builder 4.6 – Error Java Heap Space

El error Java Heap Space puede aparecer mientras trabajamos con Flash Builder 4.6 al intentar compilar, limpiar o generar un proyecto. Normalmente ocurre cuando el tamaño de la película flash a generar es muy elevado, o cuando el conjunto de ficheros o archivos que utiliza pesan mucho (imágenes, XML, etc).

Para solucionarlo podemos seguir la solución publicada en el FAQ de Adobe, que consiste en ampliar la memoria virtual de Java. Para ello tenemos que seguir los siguientes pasos:

  • Cerramos Flash Builder ó Eclipse en caso de que estemos usando su plugin.
  • Localizamos el fichero flashbuilder.ini ó eclipse.ini y lo editamos.
  • Modificamos los valores XMS y XMX del parámetro –vmargs. Esos valores indican la cantidad de megas (M) ó kilobytes (K) disponibles para la memoria virtual de java. Estos valores deben ser siempre múltiplos de 1024 kb.
    • Xms256m: Memoria inicial disponible. Lo cambiamos por Xms1024m.
    • Xmx512m: Memoria máxima disponible. Lo cambiamos por Xmx2048m.
  • Volvemos a abrir Flash Builder 4.6 ó Eclipse y debería de funcionar correctamente.

La cantidad de memoria que deseemos dedicar dependerá del equipo donde estemos ejecutando la aplicación.

Sin Comentarios

Flash Builder 4.6 “Workspace in use or cannot be created, chose a different one.”

Flash Builder 4.6 'Workspace in use or cannot be created, chose a different one.'

Este error aparece normalmente cuando cerramos incorrectamente el IDE Flash Builder, por ejemplo, cancelando el proceso desde el Administrador de Tareas de Windows o al producirse algún tipo de error. Hay varios métodos para solucionarlo, en mi caso con la versión 4.6 en una ocasión me funcionó la 1ª y en otra la 2ª:

1. Borrar el fichero .lock ubicado en el directorio .Metadata del workspace de Flash Builder 4.6. Es posible que no os deje borrarlo porque estará siendo utilizado por el proceso de FB, por lo que previamente tenéis que cancelar el proceso y luego podréis borrarlo.

Workspace\.metadata\.lock

2. Borrar el fichero .snap ubicado en:

Workspace\ .metadata\.plugins\org.eclipse.core.resources\.snap

3. Editar el fichero de configuración de preferencias de Flash Builder 4.6 y donde pone RECENT WORKSPACE borramos el que nos está dando error.

UsuarioX/Documents/Adobe Flash Builder 4.5/cascaded/308971/configuration/
.settings/org.eclipse.ui.ide.prefs

Sin Comentarios