sábado, diciembre 05, 2009

Macro muy cutre y para los muy pobres

Hace tiempo que no publico nada, pero no he conseguido hacer algo de útil para humanidad que vea bueno para compartir. Ayer tuve un momento de inspiración, quería probar hacer fotos macros pero tengo un equipo muy sencillos, el kit de A350 con el objetivo 17-70mm 5.6, con la limitaciones de mi equipo y esta crisis que me ahoga tuve una gran idea, me pregunté ¿cómo podría ampliar mi objetivo para hacerlo macro? mi respuesta fue inminente una lupa. Con la lupa que me regaló mi abuelo cuando era pequeño me puse a jugar con la cámara.


La puse delante del objetivo, y este a subé en modo MF, y una apertura de 11.




He conseguido hacer unas muy buenas fotos.



Eso si recomiendo el uso de un soporte rígido o un trípode para hacer las fotos si no os costará la propia vida mantener el pulso para hacer la foto mientras sujeta con una mano la lupa y la otra la cámara

*Artículo posteado en sonystas

lunes, marzo 02, 2009

Hacer un script para un Backup en un equipo remoto

Esta práctica me la han pedido ya varías personas y pensaba que estaba colgada aquí y me he dado cuenta de que no, así que la voy a colgar por si alguien la necesita.. Consiste en realizar el backup de unos directorios concretos y mandarlo a un equipo remoto:

##Script de David Delgado santos
#!/bin/bash
##Antes de empezar a realizar toda las operaciones, tenemos que ubicarnos en el directorio donse se va a realizar las operaciones
cd /media/hda4/backup
##luego empezamos a declarar las variables necesarias, la primera varible declarada aquí es una variable que coja la fecha y le de un formato bonito
fecha=$(date +%d-%B-%Y)
##esta variable lo que hace es ponerle nombre al fichero, con el nombre de la máquina y la fecha de cuando se ha creado
nombre=`hostname`_$fecha.tar.bz2
##esta variable calcula el tamaño que pesa el directorio etc en kb
etc=`du -s /etc/ | awk '{print $1}'`
##esta variable calcula el tamaño que pesa el directorio home en kb
home=`du -s /home/ | awk '{print $1}'`
##esta variable calcula el tamaño que pesa el directorio var/lib en kb
varlib=`du -s /var/lib/ | awk '{print $1}'`
##esta variable calcula el tamaño que pesa el directorio var/log en kb
varlog=`du -s /var/log/ | awk '{print $1}'`
##calcula el espacio libre donde se va almacenar la copia de seguridad
espacio_libre=`df |grep hda4| awk '{print $4}'`
##realiza la operación para ver si hay espacio
realizarcopia=`expr $etc + $home + $varlib + $varlog - $espacio_libre`
##si el espacio libre es mayor que 0 se realizará la copia
if [ $realizarcopia -lt 0 ]; then
##comprime los directorios, que hemos decididos que deben hacer una copia de seguridad, con el nombre que hemos creado
tar cjf $nombre /etc /var/lib /var/log /home
##cuando se acaba de hacer la copia mostrará un mensaje diciendo que se ha realizado la comprimición.
echo "Se ha hecho con exito la copia de seguridad"
##ahora mira el espacio disponible en talut, la máquina donde se va almacenar la copia de respaldo
espaciotalut=$(ssh copia@192.168.1.51 df |grep sda3| awk '{print $4}')
##mira el tamaño que ha ocupado la copia local
tamano=`du $nombre | awk '{print $1}'`
##compara el tamaño del backup con el espacio disponible, si hay espacios disponible realizará la transferencia
if [ $tamano -lt $espaciotalut ]; then
##antes de mandar el backup, le mira el valor md5sum para comprobar que se haya pasado correctamente
valor=$(md5sum $nombre | awk '{print $1}')
##manda el backup a la otra máquina con el nombre
scp $nombre copia@192.168.1.51:$nombre
##cuando se haya echo muestra un mensaje diciendo que se ha realizado la copia
echo "Se ha pasado la copia de seguridad a talut"
##ahora mira el valor md5sum del backup de la máquina de talut 
valorexterior=$(ssh copia@192.168.1.51 md5sum $nombre | awk '{print $1}')
##si es el mismo del que hay en la máquina local mostrará un mensaje diciendo que se ha realizado la copia correctamente y se acaba el proceso del backup
if [ $valor = $valorexterior ]; then
echo "Se ha pasado la copia de seguridad correctamente"
else
##si no es el mismo mostrará un mensaje y se volverá a enviar
echo "No se ha podido pasar la copia de seguridad correctamente, se intentará de nuevo"
##creamos una varible contador que cuente las veces que se intenta mandar, por si en realidad hay problemas en la red y no se quede en un bucle infinito transferiendo el archivo
contador=0
##realizará el envio hasta que contador sea 3 que tres o los valores de md5sun sea iguales en la dos máquinas
while [  $probar != $valorexterior -o $contador -lt 3 ]; do
##mira el valor en la otra máquina
##realiza otra ves el envio del backup
scp $nombre copia@192.168.1.51:$nombre
##mira en valor en la máquina de talut de nuevo
valorexterior=$(ssh copia@192.168.1.51 md5sum $nombre | awk '{print $1}')
##incrementa el contador
   contador=`expr $contador + 1`
   done
##si el contador es igual a 3 mostrará un mensjae de que tiene problemas en la red
if [ $contador -eq 3 ]; then
echo "No se ha podido hacer la copia correctamente, pongase en contacto con el administrador de la red"
fi
fi
else
##si no hay espacio en talut cuando se realiza la comprobación de espacio en la máquina mostrará un mensaje
echo "No hay suficiente espacio en Talut"
fi
else
##si no hay espacio en la máquina local mostrará un mensaje diciendo que no hay espacio
echo "No hay suficiente espacio para hacer la copia de seguridad"
fi



##ahora para automatizar la tarea, introduciremos en el crontab una línea para que ejecute el script 1 vez al día a la 12 de la mañana. Para realizar esta operación que hacerla como superusuario ejecutamos el comando "crontab -e" y añadimos la línea "00 12 * * * sh /root/backup.sh" donde 00 es el minuto, 12 es la hora a la que se va a ejecutar y * * * es el día, mes y año en el que se va a ejecutar, lo dejamos con * para que se ejecute todos los días a la misma hora.

lunes, febrero 23, 2009

Modificar un informe en Abanq 2.3

Hace tiempo que no escribo, es por flojo, no por otra cosa pero bueno. Ahora ando currando en una empresa donde se adquirió Abanq y he tenido que realizar unas modificaciones para un cliente. Las modificaciones eran que en los informes aparecían las descripciones de los artículos, y el cliente quería que si fuera un envase lo que había en el informe apareciera la descripción del envase en vez de la descripción del artículo. Y como encontré muy poca información para realizar esto os voy a dejár el ejemplo de las modificaciones que realicé para el informe de "Albaranes clientes":
En el archivo flfactinfo.qs declaré arriba la funcion que iba a crear:

function desEnvase(nodo:FLDomNode, campo:String):String {
return this.ctx.oficial_desEnvase(nodo, campo);
}

y luego la definí:

function oficial_desEnvase(nodo:FLDomNode, campo:String):String
{

var codEnvase:String = nodo.attributeValue("lineasalbaranescli.codenvase");
var valor:String;
if (codEnvase && codEnvase != "") {
valor = nodo.attributeValue("envases.descripcion");
} else {
valor = nodo.attributeValue("lineasalbaranescli.descripcion");
}
return valor;
}

En el archivo i_albaranescli.qry añadí los siguientes elementos:

empresa,albaranescli,envases

En el  select añadí los siguientes campos:

 lineasalbaranescli.codenvase, envases.codenvase, envases.descripcion,

Y ya en el from pegaré la línea entera para que vea más claro:

empresa,albaranescli INNER JOIN lineasalbaranescli ON albaranescli.idalbaran = lineasalbaranescli.idalbaran  LEFT OUTER JOIN envases ON envases.codenvase = lineasalbaranescli.codenvase  LEFT OUTER JOIN movilote ON movilote.idlineaac = lineasalbaranescli.idlinea LEFT OUTER JOIN lotes ON movilote.codlote = lotes.codlote

Por última hay que modificar el archivo i_albaranescli.kut para modificar el Field de la descripción del artículo que se encuentra en "Cabeceras de listas de artículos" por la siguiente línea:
< calculationtype="6" functionname="flfactinfo.desEnvase" backgroundcolor="'255,255,255'" bordercolor="'0,0,0'" borderstyle="'0'" borderwidth="'1'" commaseparator="'44'" currency="'32'" datatype="'0'" dateformat="'11'" field="'lineasalbaranescli.descripcion'" fontfamily="'Arial" fontitalic="'0'" fontsize="'9'" fontweight="'50'" foregroundcolor="'0,0,0'" halignment="'0'" height="'20'" negvaluecolor="'0,0,0'" precision="'2'" text="'[lineasalbaranescli.descripcion]'" valignment="'1'" width="'287'" wordwrap="'0'" x="'94'" y="'1'"> < / CalculatedField>