Buscar este blog

miércoles, 19 de mayo de 2010

Que no te la den con el código!!

Alguna vez habéis pensado en como guardaros la espalda cuando entregáis un código.

¿Romperán el proyecto y luego te dirán que lo arregles?

La ingeniería de el software ya es bastante complicada como para tener parámetros como este en cuenta.

Sería buena práctica resolver las incidencias sobre un código fuente que valide el checksum y por tanto NO MODIFICADO.

Para comprobar que el fuente no se ha modificado (y sobre el que se desarrollarán los parches) realizaremos los siguientes pasos.

1. - Entrega el código y calculo del checksum

find \( -name "*.java" -o -name "*.jsp" -o -name "*.jar" -o -name "pom.xml" \) -type f -exec md5sum {} \; > PROYECTO.md5

En el fichero PROYECTO.md5 se guardarán los checksum de los ficheros fuentes jsp, java, jar y el pom.xml

2. - Verificación del código para hacer uso de la garantía.

md5sum -c PROYECTO.md5

El resultado de este comando indica si se ha modificado algún fichero y cual o cuales se han modificado.

NOTA: Si en lugar del código, entregáis un binario, solo habría que hacer el md5sum del fichero binario.

Crear formularios PDF en LINUX

<modo_evil>
En realidad es multiplataforma... pero los usuarios de microshoft, que paguen del producto de adobe.
</modo_evil>

Pues eso, que desde linux también se pueden crear formularios rellenables (fillable) en PDF.

¿Ventajas de estos formularios? que los puedes rellenar en el ordenador, e imprimirlos.

Con los otros tendrías que imprimirlos y rellenarlos a mano.

Bueno, para hacer esto, solo necesitas el OpenOffice (yo estoy usando la versión del repositorio del Ubuntu Lucid).

1. - Mostrar la barra de herramientas de formularios
Ver -> Barras de herramientas -> Campos de control de formularios

2. - Componer tu formulario
Arrastrar campos a diestro y siniestro.

3.- Exportar como PDF y a disfrutar difundiendo tus formularios con acabados profesionales.

martes, 18 de mayo de 2010

Google Maps

Ya en su momento, trabajé el tema de la Geo-Referencia.
Eran otros tiempos y otros requisitos.

Por entonces exploré el tandem geoserver-openlayers.

Hoy nos toca pelearnos con la api de google-maps.

Importar las librerías.
Sacado de un ejemplo de la ayuda de google maps, tenemos lo siguiente.


<html>
<head>
...
<script
src="http://maps.google.com/maps?file=api&v=2&key=[KEY]"
type="text/javascript"></script>
...
</head>
<body>
...
</body>
</html>


KEY
Es necesario solicitar una KEY para utilizar la api de google aquí.

Crear Mapa Básico

Código básico para poner un mapa.


function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.setUIToDefault();
}
}


Establecer un Centro

<script type="text/javascript">
function LoadMapSearchControl() {

var options = {
zoomControl : GSmapSearchControl.ZOOM_CONTROL_ENABLE_ALL,
title : "málaga",
url : "http://www.google.com/corporate/index.html",
idleMapZoom : GSmapSearchControl.ACTIVE_MAP_ZOOM,
activeMapZoom : GSmapSearchControl.ACTIVE_MAP_ZOOM
}

new GSmapSearchControl(
document.getElementById("mapsearch"),
"1600 Amphitheatre Parkway, Mountain View, CA",
options
);

}
// arrange for this function to be called during body.onload
// event processing
GSearch.setOnLoadCallback(LoadMapSearchControl);
</script>


Cargar una marca en el mapa

var point = new GLatLng(lat,lon);
map.addOverlay(new GMarker(point));


Capturar la geo-referencia

GEvent.addListener(map, "click", function(overlay,latlng) {
if (latlng) {
var myHtml = "The GPoint value is: " + map.fromLatLngToDivPixel(latlng) + " at zoom level " + map.getZoom();
map.openInfoWindow(latlng, myHtml);
}
});



Y creo que con esto, tenemos para empezar!!

Ingeniería de Datos

¿No os habéis encontrado nunca con una migración de datos, parseo de datos, o elaboración de informes con una cantidad ingente de datos?

¿Esos datos os vienen de las fuentes más diversas? ¿CSV, excel, Oracle, MySql...?

En esta ocasión, he tenido que realizar una serie de scripts SQL de inserción, desde unos registros en base de datos de Oracle.

Estoy seguro de que se os ocurren muchas formas de hacer esto, pero yo recuerdo a un ex-compañero (saludos rubio!) de trabajo que se divertía mucho con el Pentaho.

Pentaho, es una herramienta Open Source para la minería de datos. Aunque es Open Source, hay una empresa detrás que quiere sacar tajada.

Uno de los componentes de esta herramienta, es Kettle. Implementa la parte de integración de datos (data-integration).

Con esta herramienta podemos hacer precisamente esto.
  • Obtener datos desde diferentes fuentes de datos (BBDD, CSV, excel...)
  • Cruzar los datos para obtener unos registros más ricos.
  • Filtrar los datos.
  • Operar los datos, creando columnas resultantes.
  • Concatenar los datos, reemplazar cadenas.
  • Obtener salidas a diferentes fuentes de datos (ficheros sql, tabla de BBDD...)
La documentación de esta herramienta no es la más rica en contenidos precisamente, pero no hay que dedicarle demasiado tiempo antes de empezar a obtener resultados.

Por desgracia, el desconocimiento de la herramienta, como su falta de documentación, me han requerido apoyarme en scripts de Linux para finalizar el trabajo solicitado. Pero el resultado es satisfactorio.

La web oficial de Kettle http://kettle.pentaho.org/
Descarga... y gratis!!! http://sourceforge.net/projects/pentaho/files/

Una captura un poco obsoleta, para que veáis la pinta de la herramienta.

Metodología en el Trabajo

Siempre he pensado que la metodología es lo que diferencia a los buenos profesionales del resto.

Como profesional, puedes confiar en alguien que es metodológico.

Este es equipo que suelo implantar como herramientas compañeras de la metodología allá donde voy y me lo permiten:

SVN + MantisBT + WIKI.

Esto podemos llevarlo montado en una VMWare (o una VirtualBox aunque requiere más configuración para el acceso a red) con una DEBIAN, un LAMP... (y otras cosas que quizás explique en otro momento) y tenemos un entorno de desarrollo de bolsillo.

Este equipo, podemos complementarlo con el plugin MyLyn de eclipse, orientado a tareas y el conector de mantis que nos permitirá:
  • Obtener un registro de los recursos modificados por tareas.
  • Una vista reducida de recursos por tareas
  • Comentarios de sincronización orientados a tareas (+info)
Sé que no es mucho... pero establece orden en el caos y espero poder ir ampliando este equipo con el tiempo.

Script de Linux

Una de las cosas que más me gusta de mi trabajo, es poder aprender e investigar cosas.

Y cada vez que tengo que realizar un script de Linux, tengo que remangarme, ajustarme las gafas para tener la frente bien abierta.

Ahí va, lo que pretende ser una chuletilla de scripting en linux.

Recorrer los ficheros de una determinada carpeta


VARIABLE=`ls $RUTA_BASE`
for carpeta in $VARIABLE
do
# Codigo a ejecutar por cada carpeta
done

Reemplazar texto de una cadena


VARIABLE=${TEXTO_ORIGEN//CADENA_BUSCADA/CADENA_REEMPLAZO}

En este caso, se reemplazan todas las ocurrencias.

Para reemplazar la primera tendríamos que hacer lo siguiente.


VARIABLE=${TEXTO_ORIGEN/CADENA_BUSCADA/CADENA_REEMPLAZO}

Reemplazar texto de un fichero


sed "s/CADENA_BUSCADA/CADENA_REEMPLAZO/" FICHERO_ORIGEN >> FICHERO_DESTINO

Incluir el texto de un fichero en otro


cat FICHERO_ORIGEN >> FICHERO_DESTINO

Aritmética Básica


CONTADOR=$[$CONTADOR + 1]


Control de flujo


if [ -e FICHERO ]
then
#Codigo a ejecutar
else
#Codigo a ejecutar
fi


Especial mención a la forma en la que se comprueba que el fichero existe.
Podemos comprobar el resto de flags en en TLDP

viernes, 14 de mayo de 2010

Ficheros de Bolsillo

Malidita compatibilidad hacia atrás con sistemas de ficheros (como no... de windows!).

Os pongo en situación.

Estáis en casa de un colega y os enseña un buen repertorio de cosas interesantes y jugosas... isos de juegos, películas con super calidad HD y sonido laxante... y otros grandes éxitos pesados.

Los ojos os hacen chirivitas y resulta que tienes un super pendrive de 32GB o más...

Lástima que para mantener retro compatibilidad tenga un sistema de ficheros en fat, fat32 o vfat, que solo te va a dejar llevarte ficheros de hasta 2GB.

Otra vez, linux al rescate.

Paso 1. - Partir los ficheros
split -b [tamaño_byte] [archivo_origen] [archivo_destino]

por ejemplo:
split -b 1000 perfil.jpg perfil.

genera los ficheros:
perfil.aa
perfil.ab
...
perfil.zz (depende del tamaño del fichero)

Paso 2. - Unir los ficheros
Esta es la parte complicada...

cat perfil.?? > perfil_pegado.jpg

Paso 3. - Sé limpio, por lo que más quieras!!
rm perfil.??