TU ANUNCIO / YOUR PUBLICITY

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

domingo, 25 de mayo de 2014

MiniServer with PYTHON / Miniservidor con PYTHON

A veces, no queremos que nuestro ordenador se convierta en un servidor con todo el montaje de Apache, PHP y demás sino que simplemente mande una información por un puerto. Esto se puede conseguir con Python de la siguiente manera:

Sometimes we do not want your computer to become a server with all mounting Apache, PHP and others but simply send an information for a port. This can be achieved with Python follows:

Programación del lado del servidor:
Server program:

servidor.py:

- No necesita cliente.py. Le basta un navegador.
#!/usr/bin/python
import socket
import time
puerto = 4444; #si es menor de 1000 deberá invocarlo sudo
miSocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
#miSocket.bind( ( socket.gethostname(), puerto ) )
miSocket.bind( ( 'localhost', puerto ) )
miSocket.listen( 1 )
while True:
da = time.time()
channel, details = miSocket.accept()
recibido = channel.recv(1024)
channel.send( '<html><body><input type="button" value="' + recibido + "--" + time.asctime(time.localtime(da)) + '"></body></html>')
channel.close()

- Necesita cliente.py
#!/usr/bin/python
import socket
s = socket.socket()
s.bind(("localhost", 9999))
s.listen(1)
sc, addr = s.accept()
while True:
recibido = sc.recv(1024)
if recibido == "quit":
break
print "Recibido:", recibido
sc.send(recibido)
print "adios"
sc.close()
s.close()


Programación del lado del cliente:
Client program

cliente.py:

- Cuando se necesita cliente.py
#!/usr/bin/python
import socket
s = socket.socket()
s.connect(("localhost", 9999))
while True:
mensaje = raw_input("'?> ")
s.send(mensaje)
if mensaje == "quit":
break
print "adios"
s.close()

- Cuando no se necesita cliente.py y su opción en el navegador

#!/usr/bin/python
import socket
miSocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
#miSocket.connect( (socket.gethostname(), 4545 ) )
miSocket.connect( 'localhost', 4545 ) )
data, server = miSocket.recvfrom( 100 )
print data
miSocket.close()


domingo, 18 de mayo de 2014

Creating thumbnail from AUTOCAD / Creación de miniaturas de AUTOCAD


Hay un convertidor de CAD a SVG denominado cad2svg. Vale tanto para dxf como para dwg. Es descargable desde:
Miniatura de un plano en dwg.

*====================================
* cad2svg.c -- Convert DWG and DXF to SVG
*-------------------------------------------------------------------------
* Author: Renaud BOMPUIS - cad2svg@nkadesign.com - http://etc.nkadesign.com
  • Adapted and augmented from the OpenDWG library examples

Programación en PHP

[…]
//CASO DE PLANOS
if (($ex==".dwg") or ($ex==".dxf")) {
exec('/.../cad2svg "'.$paz.'" -o "'.$paz.'-1.svg"');
exec('sed '."'s/0.50mm/3.50mm/g'".' "'.$paz.'-1.svg" > "'.$paz.'-2.svg"');
exec('sed '."'s/1.50mm/5.50mm/g'".' "'.$paz.'-2.svg" > "'.$paz.'-3.svg"');
exec('convert "'.$paz.'-3.svg" -resize x150 -raise 5x5 -negate "'.$miniPNG.'"');
$im=new imagick($paz."-3.svg");
$im->setImageFormat("png");
$im->thumbnailImage( null, 150);
$im->negateImage( FALSE, imagick::CHANNEL_ALL );
$im->raiseImage( 5, 5, 140, 140, true);

header("Content-type: image/png"); readfile($miniPNG);
// $gestor = fopen($miniPNG, "w"); fwrite($gestor, $im); fclose($gestor);
unlink($paz.'-3.svg'); unlink($paz.'-1.svg'); unlink($paz.'-2.svg');
}
[…}


Programación en Python

[…]
if [[ $EEE == 'dwg' ]] || [[ $EEE == 'dxf' ]] || [[ $EEE == 'DWG' ]] || [[ $EEE == 'DXF' ]]; then
/.../cad2svg "$FICHERO" -o "$FICHERO-1.svg"
sed 's/0.50mm/3.50mm/g' "$FICHERO-1.svg" > "$FICHERO-2.svg"
sed 's/1.50mm/5.50mm/g' "$FICHERO-2.svg" > "$FICHERO-3.svg"
convert "$FICHERO-3.svg" -resize x150 -raise 5x5 -negate "$FICHERO.png"
rm "$FICHERO-1.svg"
rm "$FICHERO-2.svg"
rm "$FICHERO-3.svg"
echo "$j-cad->$FICHERO"
fi
[...]

domingo, 11 de mayo de 2014

Creating thumbnails from office files (Microsoft or OpenOffice or FreeOffice) / Creación de miniaturas a partir de documentos de Office (MS or FreeOffice)


Puede resultar interesante crear miniaturas de ficheros ofimáticos. Un previsualización de ésto e incluso mostrarse a través de una página web.

Ejemplo de miniatura
 de un documento .doc
con efecto biselado
FORMA 1
Existe un código de Python: DocumentConverter.py:

# PyODConverter (Python OpenDocument Converter) v1.1 - 2009-11-14
#
# This script converts a document from one office format to another by
# connecting to an OpenOffice.org instance via Python-UNO bridge.
#
# Copyright (C) 2008-2009 Mirko Nasato <mirko@artofsolving.com>
# Licensed under the GNU LGPL v2.1 - http://www.gnu.org/licenses/lgpl-2.1.html

La forma de trabajar con ello es primero crear la entrada a través del puerto.

libreoffice -headless -accept="socket,port=8100;urp;"
ó
openoffice.org -headless -accept="socket,port=8100;urp;"

/.../dc.py "FICHERO" "FICHERO.pdf"

y después:

convert "$FICHERO.pdf[0]" -resize x150 -raise 5x5 "FICHERO.png"

FORMA 2
Otra posibilidad es partir del fichero de java (http://code.google.com/p/jodconverter/wiki/GettingStarted):

java -jar /.../java_dc/lib/jodconverter.jar -port 8100 "FICHERO" "FICHERO.pdf"
convert "$FICHERO.pdf[0]" -resize x150 -raise 5x5 "FICHERO.png"

NOTA: Obsérvese que se utiliza el comando convert (descargar imagick).

Otro ejemplo lo tenemos en “minifoto.php”:
[…]
//MS Oficce
if (($ex==".doc") or ($ex==".docx") or ($ex==".xls") or ($ex==".xlsx") or ($ex==".rtf") or ($ex==".html") or ($ex==".htm") or ($ex==".ppt") or ($ex==".pptx") or ($ex==".ods") or ($ex==".odt") or ($ex==".odp")) {
$puerto=rand(10000,60000);
$ello='java -jar /directorio/donde/este/jodconverter-core-3.0-beta-4.jar -port '.$puerto.' "'.$paz.'" "'.$paz.'-1.pdf"';
exec ($ello);
exec ('convert "'.$paz.'-1.pdf[0]" -resize x150 -raise 5x5 "'.$miniPNG.'"');
header("Content-type: image/png");
readfile($miniPNG);//echo $im;
unlink($paz.'-1.pdf');
}
[...]

domingo, 4 de mayo de 2014

Metadata in photographs / Metadatos en fotografías

Para la inserción de metadatos y/o visualización de estos existe un repertorio de programas (en linux) exif, jhead, exiv2, exiftool, identyfy...

To insertion metadata in linus there are various programs in Linux: exif, jhead, exiv2, exiftool, identyfy...


$ exiftool -S -t -GPSLongitude -GPSLatitude -GPSAltitude -c %.6f IMG_0722_1.JPG
Que da esta salida. 122.477727 E 8.604807 S 1.281 m
Para añadir las coordenadas GPS deberemos añadir los siguientes tags:
exif:GPSAltitude: 0/1
exif:GPSInfo: 90
exif:GPSLatitude: 60/1, 23/1, 10662/625
exif:GPSLatitudeRef: N
exif:GPSLongitude: 5/1, 19/1, 41599/761
exif:GPSLongitudeRef: E
exif:GPSVersionID: 2, 2, 0, 0


Partiendo de una imagen cualquiera, vemos que no tiene tags con identify -verbose:
We know tags with identify -verbose:

$ identify -verbose toronto.jpg
(...)
Properties:
comment: systemadmin.es
date:create: 2011-08-02T09:58:50+02:00
date:modify: 2011-08-02T09:58:50+02:00
jpeg:colorspace: 2
jpeg:sampling-factor: 2x2,1x1,1x1
signature: b8f1944378ff5891453ed999b7469021de44ab15ed178de645751faf1fdb9f38
(...)


Podemos añadir los tags mediante exiftool:
We add tags with exiftoll:

$ exiftool -GPSAltitude="0/1" toronto.jpg
$ exiftool -GPSLatitude="41.403339" toronto.jpg
$ exiftool -GPSLatitudeRef="N" toronto.jpg
$ exiftool -GPSLongitude="2.1740288" toronto.jpg
$ exiftool -GPSLongitudeRef="E" toronto.jpg


Al sacar los datos con identify veremos como tenemos las coordenadas en los metadatos:
And came back with identity:

$ identify -verbose toronto.jpg
(...)
exif:GPSAltitude: 0/1
exif:GPSInfo: 90
exif:GPSLatitude: 41/1, 24/1, 30051/2500
exif:GPSLatitudeRef: N
exif:GPSLongitude: 2/1, 10/1, 82824/3125
exif:GPSLongitudeRef: E
exif:GPSVersionID: 2, 3, 0, 0
(...)