TU ANUNCIO / YOUR PUBLICITY

AQUÍ PODRÍA ESTAR TU ANUNCIO: / HERE COULD BE YOUR AD E-mail

domingo, 30 de marzo de 2014

Create a animated GIF and from this a movie to YOUTUBE / Crear un GIF animado y de éste una película para YOUTUBE

Varias veces en nuestro blog hemos realizado este truco:
Vamos a elegir un grupo de fotos en secuencia, con ello vamos a crear un gif animado y con el gif animado vamos a crear una película (un archivo avi)

Several times in our blog have done the trick:
We will choose a group of photos in sequence, thereby we will create an animated gif with animated gif we will create a movie (avi file)

El primer paso es tener las fotos:
The first step is to have the photos:

Hay varias opciones. La mas directa es con ImageImagick
The most direct way is with ImageImagick

    convert -delay 1000 *.png animación.gif.
ó


    convert -delay 1000 +repage *.png animación.gif.



La opción +repage puede ser necesaria si nos queda un gif que se salga de los límites que hemos pretendido.
Esta solución es directa y sencilla pero tiene un problema con el orden. A veces la secuencia no es la que quisiéramos. 
Hay otra opción: usar GIMP. Tras la apertura por capas (archivo -> Abrir como capas):

The + repage option may be needed if we have a gif that is outside the limits we have tried.
This solution is simple and direct but has a problem with the order. Sometimes the sequence is not what we wanted.
There is another option: using GIMP. Following the opening of layers (File -> Open as layers):


Archivo -> Guardar como ... animación.gif. Nos aparecerán los siguientes diálogos:
File -> Save As ... animación.gif. We the following dialogs appear:




Y ya tenemos el gif animado como Animado.gif
And we already have the animated gif as Animado.gif



Y ahora la segunda parte. Pasar de gif a avi:
And now the second part. Convert gif to avi:

          ffmpeg -i Animado.gif Animado.avi

Si esto falla hay otra solución más potente:
If this fails there is a more powerful solution:

      mencoder Animado.gif -o Animado.avi.AVI -ovc lavc -lavcopts vcodec=mpeg4

El archivo Animado.avi se sube a YouTube y listo:
The Animado.avi file is uploaded to YouTube and you're done:



domingo, 23 de marzo de 2014

MEGA-MAIL, Sending large files by e-mail / MEGACORREO, Envío de ficheros grandes por correo

¿Quién no ha tenido que enviar un correo con un archivo adjunto voluminoso? Estamos hablando de decenas de MBs. Existe un sistema sencillo y gratuito online propiedad de la empresa ENMACOSA. También denominado "Pásame tu archivo".

El sistema es muy sencillo. Se entra a través de la página:

                     proyecto.enmacosa.com
Portal de I+D de Enmacosa

Se hace click en "Pásame tu archivo" (Menú superior izquierda). O si se prefiere se va directamente a la página:
                    proyecto.enmacosa.com/megacorreo
Portal del Megacorreo de Enmacosa

Para subir se siguen las instrucciones:
                      1º.- Se elige un archivo: C:/ruta/del/archivo/archivo.pdf
                      2º.- Se da un seudónimo: algo.pdf.
                      3º.- Se pincha en "Dar a este botoncito"
Dependiendo de tu conexión a internet irá más deprisa o despacio (suele ser de unos 5MB/minuto).

To upload the instructions are followed: 
                       1º.- a file is chosen: C: /ruta/del/archivo/archivo.pdf 
                       2º.- is given a pseudonym: Algo.pdf 
                       3º.- is click on "Dar este botoncito" 
Depending on your internet connection will go quickly or slowly (usually about 5MB / minute).

Para bajar hay varias opciones a elegir la más cómoda:
To download there are several options to choose the most comfortable:

                      1º.- Si se pincha en abrir el correo, se abrirá nuestro programa de envío de e-mails así:
                      1º.- If you click to open the mail, our program for sending e-mails and will open:

                        De esta manera se manda un correo con el enlace de descarga.
                        In this way an email is sent with the download link.

                        2º.- Otra opción el copiar el texto que hay bajo la frase "O darle este link" y 
                               enviárselo por el método que mejor nos parezca.

                        2. Another option is copy the text under the phrase "O darle este link" and 
                                send it by the method we see fit.

                        3º.- Y por último la opción más simple es que el destinatario abra por su cuenta el 
                         megacorreo. En el cuadro de bajada pone el nombre del seudónimo. En nuestro 
                         ejemplo: algo.pdf e inmediatamente se pondrá a descargar.

                         3. And finally, the simplest option is that the recipient opens his account 
                          megacorreo. Table puts down the name of the alias. in our 
                          example algo.pdf will immediately downloaded.

Debido a la quiebra de la empresa enmacosa, este servicio no está disponible en la actualidad.
Due to the bankruptcy of the company Enmacosa, this service is not available at present.


domingo, 16 de marzo de 2014

Cómo usar ZEND para modificar PDFs con PHP

1º Instalamos ZEND o lo colocamos en un directorio determindo:

En el ejemplo se situa en el subdiretorio zend dentro del directorio de trabajo de php:

require_once 'Zend/Pdf.php';
$pdf = Zend_Pdf::load($Archivo_a_modificar);

$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);
$page->setFont($font,14);
$page->drawText($y_expediente, 450, 733);

$page2 = $pdf->pages[2];
$image = Zend_Pdf_Image::imageWithPath("/xxxx.png");
$font2 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page2->setFont($font2,14);
$page2->drawText($variableString, 262, 734);
$page2->drawImage($image, $xx,$yy,$ancho,$alto);
… etc …
// $pdf->save("/destino.pdf");
$pdfData = $pdf->render();

header("Content-Disposition: inline; filename=result.pdf");
header("Content-type: application/x-pdf");
echo $pdfData; 


LOS PROBLEMAS DE ZEND AL ABRIR ALGUNOS ARCHIVOS PDF

A veces, el framework de Zend tiene algún problema al abrir un archivo pdf. En nuestro programa de php:

<?php
...
$pdf1 = new Zend_Pdf();

$pdf2 = Zend_Pdf::load($archivo_pdf);

...
?>

No voy a preguntarme el motivo por lo que esto ocurre pero el caso es que es así. Por otra parte, si volvemos a imprimir el pdf en cualquier editor de pdf de nuevo en pdf (perdón por las redundancias) sí admite sin problemas el nuevo archivo. La idea que se ocurre es reimprimir el fichero pdf que da problemas en pdf y así eliminar el problema con el pdf original.

¿Cómo lo hacemos?

Como todo va a ser en línea de comandos lo mejor es disponer de una impresora y una impresión accesible en línea de comandos.

1º Impresora: ¿tenemos alguna impresora que emita pdfs? 
ejecutamos:

 lpstat -p -d 

y el resultado es algo así:
la impresora XXXXX está inactiva.  activada desde jue 20 oct 2011 12:01:46 CEST
destino predeterminado del sistema: XXXXX

En ese caso no tenemos algo reconocible en pdf.

2º Instalamos la impresora en pdf
sudo apt-get -y install cups-pdf
Después:
 lpstat -p -d
la impresora XXXXX está inactiva.  activada desde lun 04 mar 2013 12:46:05 CET
la impresora Generic-CUPS-PDF-Printer está inactiva.  activada desde lun 04 mar 2013 12:42:31 CET
destino predeterminado del sistema: Generic-CUPS-PDF-Printer

3º Tenemos que controlar donde imprimirá el nuevo pdf:

sudo gedit /etc/cups/cups-pdf.conf

el alguna línea estará:

Out ${HOME}/PDF

se cambia por

#Out ${HOME}/PDF
Out $/directorio/salida/PDF

La razón es porque muchas veces no se tiene controlado cual el el directorio {home} para www-data (usuario de apache).

4º Modificamos nuestro programa


<?php
...
$pdf1 = new Zend_Pdf();

exec("lp -d Generic-CUPS-PDF-Printer $archivo_pdf");
$nuevo_pdf="/directorio/salida/PDF".basename($archivo_pdf);
sleep(10);
$pdf2 = Zend_Pdf::load($nuevo_pdf);

...
unlink($nuevo);
?>

Expliquemos la modificación del programa:

Tomamos el archivo que da problemas ($archivo_pdf). Lo imprimimos (comando lp) en la impresora CUPS-PDF. Le hacemos esperar 10 segundos (sleep) al programa para darle tiempo a crearlo y guardarlo en /directorio/salida/PDF/ con el mismo nombre (sin las coletillas de directorios). Abre el nuevo archivo ($nuevo_pdf) que no dará problemas y al final borramos el archivo que nos sirvió de puente(unlink).

para más seguridad se puede poner (en vez de sleep(10)):

do{sleep(1);}while (not is_file($nuevo));

domingo, 9 de marzo de 2014

How to prevent hackers who want to enter the VNC server from port 5900. / Parar los pies a los hackers que quieren entrar en el servidor desde VNC, puerto 5900.

Para acceder al servidor, a veces, utilizo VNC. El problema es que  que noto que el archivo .xsession se crea y crece más y más hasta que llena el disco duro y el servidor deja de funcionar.
Una de las últimas entradas son del tipo:

To access the server, sometimes I use VNC. Have long noticed that the .xsession file is created and grows more and more until it fills the hard disk and the server goes down.
One of the latest entries are of the type:


vnc tat y tal desde tal Ip ,,,

Me fastidia porque me gusta entrar en el servidor por VNC y además soy un poco inutil en el tema de la informática.

Le dí al siguiente comando para saber cuales eran los puertos que tenía abiertos
What were the ports that were open?

socklist

y la respuesta fue:
This was the answer:

type  port      inode     uid    pid   fd  name

tcp   5900      12031    1000   1684   18  vino-server
tcp     80      10998       0   3867    3  apache2
...


No voy a decir aquí el resto de puertos que tengo. El caso es que algo tenía que hacer. Como ya he dicho soy un poco ignorante en estos temas. Por ello creé mi propio cortafuegos. Es muy sencillito y permite cerrar y/o abrir puertos a discreción.

Lo peor que puede ocurrir es que cierre algún puerto por demás pero son igualmente fáciles de reabrir

I will not say here other ports that I have. The fact is that something had to be done. As I said I'm a bit ignorant on these issues. So I created my own firewall. It's simple and allows close and / or open ports at will.
The worst that can happen is that you close any other port but equally easy to reopen

Secuencia de comandos:
Script:

ufw enable       // El cortafuegos empieza a funcionar
ufw deny 5900    // Se cierra el puerto 5900
ufw allow 5900   // Se abre el puerto 5900
ufw status       //Vemos lo que hemos cerrado y abierto y responde


Estado: activo



Hasta                      Acción      Desde

-----                      ------------------------
5900                       DENY        Anywhere
1110                       ALLOW       Anywhere
80                         ALLOW       Anywhere
1111                       DENY        Anywhere

Ahora sé que nadie puede entrar por el puerto 5900 ni el 1111. Si pueden por el 1110 y el 80.

Sólo tengo que entrar por ssh (aconsejable que sea un puerto diferente al 20) y desde alli tecleo ufw allow 5900. Cuando acabemos, colocamos de nuevo el cortafuegos, ufw deny 5900 y listos.

Now I know that no one can enter the port 5900 or 1111. If they can by 1110 and 80.

Only I have to enter through ssh (advisable to be a different port 20) and from there click ufw allow 5900. When we're done, put back the firewall: ufw deny 5900.



Otra solución (aunque creo que es algo peor) la expongo a continuación:


.xsession: Un archivo que no para de crecer hasta llenar completamente el disco duro en Linux.

He buscado soluciones de lo más variopintas.

Una de ellas fue intentar particionar el disco duro de tal manera que el directorio /home/usuario fuera el de la partición. El problema estaba en que una vez instalado todo ya no podía dar marcha atras como en el caso de Windows con Parted Magic. (Ídem con Gparted para Linux. ). Había que tener y hacer una copia se seguridad previa. Aún así cuando se colmataba el directorio del usuario volvía a complicarse el tema y a bloquearse el ordenador.

La segunda solución que encontré era la de limitar el tamaño del directorio. Para ello se suele usar la aplicación quota. el problema es que por más que leía foros no me enteraba nada y una vez que creí entenderlo bloqueé el ordenador al reconfigurar /etc/ftab. ¡Los experimentos con gaseosa!

Y la tercera, y definitiva, fue la de limitar el tamaño máximo de archivo. Ocurre que no quiero de ninguna manera que ningún archivo sea mayor de varios Gigas. Y, si es ninguno, tampoco es .xsession. La forma es muy sencilla. Teclea:

sudo gedit /etc/security/limits.conf

Te saldrá un archivo de la forma:

# /etc/security/limits.conf
#
[...]
#@student        -       maxlogins       4
# End of file

Antes de # End of file colocamos una linea más:

# /etc/security/limits.conf
#
[...]
#@student        -       maxlogins       4
*                hard    fsize           4096000
# End of file

¿Qué hemos hecho?

Le hemos dicho al sistema que no pueda albergar ningún archivo mayor de 4GB.

Reiniciamos el equipo y fin. 

Si quieres saber más yo me enteré desde esta página web:

http://magarto.com/blog/archivo/2007/12/11/cambiar-tamano-maximo-de-archivos-en-gnulinux/

lunes, 3 de marzo de 2014

Control de las termografías

Problemática inicial:

Cuando empezamos a hacer termografías, tuvimos los siguientes problemas:
  • Algunas cámaras venían con programas que no permitían exportar termografías modificadas con falso color.
Ejemplo de programa de tratamiento termográfico sin opciones de exportación

  • La termografías realizadas tenían un pobre contraste inicial

  • Si realizaban el paso a falso color no se podían controlar los límites de temperatura.
  • Por supuesto, no podría existir correlación entre los datos Lidar del láser escáner terrestre con las termografías.
Mejora del contraste:
Tras mucho buscar encontramos la forma más sencilla que consiste, o bien en utilizar la biblioteca CV de código abierto o las utilidades Image Imagick.

La orden es muy simple: convertir original -normalize destino. El resultado es el siguiente:


Aplicando patrones termográficos:
Ya al menos se puede ver. Ahora toco el hacerla interactuar con un patrón. Por ejemplo: azul, verde, rojo.

Ejemplo con azul-verde-rojo: dará tres grupos de temperaturas.
Ejemplo con violeta-azul-cyan-verde-amarillo-naranja-rojo: 7 grupos de temperaturas
Dado que estamos en Galicia podemos ajustar el rango de lectura de 0 a 35ºC. de esta manera que ayudaría a ver tres temperaturas diferentes
  • .... 5ºC: violeta
  • 5-10ºC: azul
  • 15-20ºC: cyan
  • 20-25ºC: verde
  • 25-30ºC: amarillo
  • 30-35ºC: naranja
  • 35 ... ªC: rojo
De este modo, la imagen tratada no sólo será más vistosa:


Sino que además sabemos la temperatura de cada elemento por el color.

Esto además nos deja abiertos a cualquier otro tipo de patrón. Imaginemos un patrón un poco más amplio: negro, marrón, rojo, naranja, amarillo, verde, azul claro, azul oscuro, violeta, gris, blanco:


Ecd Vl resultado sería:

Pudiendo llegar a crear efectos que rayan la psicodelia:

Resumiendo, podemos tener una amplia tipología de espectros relacionados directamente con la temperatura real obtenida de una termografía:


Correlacionado datos lidar y termografías:

Partimos de datos lidar y sus proyecciones (se pueden obtener desde la aplicación web: http://sitegi.enmacosa.com)

Tenemos una nube de puntos proyectada ortogonalmente:

Y/o la imagen en color (aunque éste se note poco)



También tenemos las imágenes termográficas:


Si cruzamos los datos de falso color y posición real de los puntos Lidar:
Aquí mostramos tres opciones posibles:





Nos decantamos por la tercera opción y ésta fue la aplicabilidad que le unimos a nuestra aplicación web:




A continuación comentaremos como realizar estas nubes de puntos termográficas desde la aplicación de escritorio desarrollada por Extraco, Misturas, Logica y Enmacosa.

Utilizando nuestro programa MEEL

Las particularidades que debe tener son:

  • Creación de cualquier espectro:
Si deseáramos cambiar por ejemplo a <rosa, violeta, rojo, naranja, amarillo verde cian, azul gris negro> (pink blueviolet red orange yellow green1 cyan blue gray black) el espectro sería:


  • Lectura de un grupo de archivos: Fácil, con un obketo "file".
  • Geolocalización de termografías:
Para la correlación de datos tenemos los siguientes puntos de partida:
  1. Podemos tener un GPS y con sus datos guardar la posición y el tiempo en que se realiza la lectura.
  2. Al guardar las fotografías ya tenemos el tiempos de su creación
  3. Como ya utilizamos con el programa los datos del eje
Conclusión de cada punto del eje (pk) podemos tener las coordenadas de las coordenadas el momento más cercano de los datos tomados del GPS y del momento del GPS buscaremos la foto más cercana creada en el tiempo. Una "simple" triple relación.
Y por último:
  • Previsualización de la foto normalizada y la relativa al espectro.

Veamos más de cerca estos ejemplos:


Claro está, podemos así variar más fácilmente el espectro:


Con el espectro convencional:



Como conclusión final, podremos tomar cualquier termografía, georreferencia o mezclar sus datos con una nube de puntos con la simple ayuda de un GPS.

domingo, 2 de marzo de 2014

Remote copy with LFTP / Copia remota con LFTP

Con FTP siempre ha habido un problema clásico de paciencia. Cuando se quiere subir algo (muchos archivo y carpetas) se hace la misma operación. Se abre un explorador de archivo. Se ven las carpetas y desde nuestro ordenador copiar y pegar. Las esperas pueden ser interminables. Aparecen las preguntas ¿quiere subtituir el anterior archivo? Y como no sabemos si ya estaba actualizado el anterior pues le decimos que sí a todo y durante dos horas se tira subiendo archivos como un campeón. A la mitad del negocio (tras una hora) se rompe la conexión y vuelta a empezar. Lo ideal sería tener una aplicación que le dijera desde donde, hasta donde y que no repitiera lo que ya estuviera y fuera igual. Es decir un back up vía ftp.

FTP has always been a classic problem of patience. When you want to upload something (many file and folders) and this operation is always the same. we opens the explorer files. They select files and copy-paste them. The waits can be interminable. Questions appear wants subtituir previous file? And since we do not know if it was already updated the previous because we say yes to everything and for two hours pulling up files like a champ. A half of the business (after one hour) connection and back again breaks. Ideally you want an application to tell you from where to where and not to repeat what was already well and out. Is a back up via ftp.

Esa aplicación existe. LFTP es un extraordinario comando que te permite hacer copias de seguridad en un directorio accesible por ftp. Sólo hay que tener cuidado con no confundir subir con bajar porque podríamos fastidiarla. Podríamos machacar lo nuevo por lo antiguo en vez de actualizar.

This application exists. LFTP is a special command that allows you to make backups in a directory accessible by ftp. Just be careful not to confuse up with down because we could mess. We could crush the new for the old instead of updating.


Ejemplos de lftp:
lftp examples:

DESTINO: ORDENADOR PROPIO
POSTING: OUR COMPUTER

lftp -f ftp_baja.lftp
→ buscará los ficheros modificados desde el ftp y los colocará en /home/usuario

DESTINO: FTP
POSTING: THE SERVER

lftp -f ftp_sube.lftp
→ buscará los ficheros modificados desde /home/usuario y los subirá al ftp

ftp_baja.lftp
open -u usuario,contraseña server.com
mirror --log=QueSeBajo.log /personal /home/usuario
exit

ftp_bajote.lftp
open -u usuario,contraseña server.com
mirror --log=QueBajote.log /www /directorio/de/backup
exit
#no toca el servidor sólo este ordenador
ftp_sube.lftp
open -u usuario,contraseña server.com
mirror -p -R --log=QueSeSubio.log /home/usuario /personal
exit

ftp_sube.lftp (EN WINDOWS)

open -u usuario,contraseña proyecto.enmacosa.com
mirror -p -R --log=Sube_a_illa.log /directorio/de/backup
exit

NOTA: /dir/directory es si se trata de c:\dir\directory
Si el programa está en el disco C. No hay opción de cambio de disco duro lee desde donde esté el programa instalado